Инциденты и уязвимости

Log4Shell (CVE-2021-44228) — уязвимость библиотеки логирования и почему командам было трудно быстро понять, используют ли они её

Log4Shell — RCE в Log4j уровня CVSS 10.0 (декабрь 2021). Главная проблема — транзитивные зависимости, о которых вы не знали. Уроки: SBOM и быстрый патчинг.

Опубликовано 2026-06-07 Обновлено 2026-10-23 4 мин чтения
На этой странице

Возвращаемся к крупному прошлому инциденту — не чтобы воспроизвести атаку, а ради уроков, которые всё ещё применимы к вашей эксплуатации.

2021/12
раскрыто
10.0
CVSS (наивысший класс)
транзитивная
главная проблема
несколько
последующих CVE

Что произошло: запись строки в лог стала путём атаки

Log4j занимался обыденной задачей записи логов и очень широко использовался в Java-приложениях. Уязвимость: библиотека интерпретировала определённый шаблон внутри логируемых строк как нечто, что нужно «разрешить, обратившись наружу», и в итоге выполняла указанный извне код.

Так злоумышленник, подсунувший сформированную строку в «куда-то, что логируется» (имя пользователя, заголовок), мог добраться до выполнения кода. То, что пассивное действие вроде логирования может стать путём атаки, стало большой неожиданностью.

Почему было трудно понять, затронуты ли вы

Большинство приложений никогда не устанавливали Log4j напрямую. Его подтягивал фреймворк или SDK. Это транзитивная зависимость: зависимость зависимости зависимости. Без вашей «ведомости материалов» вы не могли даже определить, затронуты ли вы.

Ваше приложение (одна строка в package.json)
└─▶
фреймворк / SDK (прямая зависимость)
└─▶
компонент логирования (зависимость зависимости)
└─▶
Log4j ← уязвимость (никогда не устанавливалась напрямую)
Вы добавили одну строку, но под ней лежат десятки «зависимостей зависимостей». Log4j был среди них.

Главной проблемой было незнание, используете ли вы это

Когда вы «не можете определить, используете ли вы это», вы не можете даже приоритизировать реагирование. Была ли у вас ведомость материалов (SBOM) во многом определяло, как быстро вы могли отреагировать.

Хронология

  1. 2021-12-09–10

    Уязвимость становится широко известной; мир спешно проверяет «затронуты ли мы?».
  2. сразу после

    Развёртываются экстренный патчинг и временные меры; всплеск попыток эксплуатации.
  3. впоследствии

    Публикуется несколько последующих CVE (исправления к исправлению) — «исправлено один раз» не было концом.

Уроки, которые всё ещё применимы

1

Имейте SBOM (ведомость материалов)

Сделайте видимым, что ваше приложение использует внутри: npm ls, lock-файлы и инструменты SBOM показывают, что реально работает. Смотреть только на «что вы установили напрямую» недостаточно.

2

Машинно мониторьте зависимости

В момент выхода CVE автоматически узнавайте, применим ли он (Dependabot / osv-scanner), включая транзитивные зависимости. Ручные проверки всегда что-то упускают.

3

Делайте патчинг быстрым

Регулярно отрабатывайте цикл «обновить, проверить, выкатить», чтобы в экстренном случае сделать это быстро. См. построение мониторинга зависимостей.

4

Отслеживайте последующие CVE

После Log4Shell появились исправления к исправлению. Не останавливайтесь на «исправлено один раз»; отслеживайте продолжения.

Читать дальше

Источники и область проверки

Первоисточники ниже подтверждают рассмотренные настройки, область влияния или меры; ссылки проверены 23 октября 2026 года. Учитывайте версии и конфигурации. Приоритеты и выводы — рекомендации сайта, а не повторная проверка всей статьи или гарантия безопасности.

FAQ

QЧто было нового в проблеме Log4Shell?
A

Он обнажил опасность транзитивных зависимостей в глобальном масштабе: быть уязвимым через библиотеку, используемую внутри другой библиотеки, даже без прямой установки. Не зная свой SBOM, вы не могли даже определить, затронуты ли вы.

QПочему логирование стало вектором атаки?
A

Log4j интерпретировал определённый текст внутри логируемых строк как нечто, что нужно «разрешить, обратившись наружу». Злоумышленнику оставалось лишь подсунуть сформированную строку туда, где она будет залогирована (имя пользователя, HTTP-заголовок), превратив пассивный путь логирования в выполнение кода.

QКак избежать повторения?
A

Три вещи: машинно мониторить зависимости (Dependabot/osv-scanner), генерировать SBOM, чтобы видеть, что вы реально используете, и вести процесс обновления достаточно быстрый, чтобы оперативно патчить. Также отслеживайте последующие CVE (исправления к исправлению).