Уязвимость CVE-2021-45046: продолжение Log4Shell — почему первый патч не сработал
Введение: когда патч не панацея
10 декабря 2021 года Apache выпустил Log4j 2.15.0, который должен был закрыть уязвимость CVE-2021-44228 (Log4Shell). Но уже 11 декабря исследователи обнаружили, что патч неполный. Новая уязвимость получила идентификатор CVE-2021-45046 и рейтинг 9.0. Она позволяла обойти защиту и выполнить код даже на «исправленной» версии. Для серверов Minecraft, которые поспешили обновиться до 2.15.0, это означало, что они всё ещё уязвимы.
Как работал обход патча
Патч 2.15.0 отключал JNDI-подстановки по умолчанию, но оставлял их доступными в специальных контекстах (например, когда сообщение логирования формировалось не напрямую, а через Thread Context). Злоумышленник мог манипулировать контекстом потока (Thread Context) и заставить Log4j выполнить JNDI-подстановку даже с отключённой функцией Message Lookup.
Кроме того, патч не отключал другие опасные lookups (например, ${env:...} для чтения переменных окружения). Хотя прямое RCE через env невозможно, утечка переменных окружения (пароли, токены) тоже была критичной.
Хронология исправлений
- Log4j 2.15.0 (10 декабря) — неполное исправление, уязвим к CVE-2021-45046.
- Log4j 2.16.0 (13 декабря) — полностью отключает JNDI и Message Lookup по умолчанию.
- Log4j 2.17.0 (18 декабря) — финальная версия, закрывающая все известные векторы атаки.
Как проверить, что сервер защищён
Убедитесь, что версия Log4j — 2.17.0 или выше. Версии 2.15.0 и 2.16.0 НЕДОСТАТОЧНЫ для полной защиты. Проверьте ВСЕ JAR-файлы в папке libraries и plugins.
💡 Совет профи
Никогда не ограничивайтесь первым патчем. После обнаружения критической уязвимости исследователи и хакеры активно ищут обходы патча. Дождитесь финальной версии исправления (обычно через 1-2 недели после первого патча). В случае с Log4Shell финальной была 2.17.0, вышедшая через 9 дней после первого патча.
💬 Комментарии (0)
🔒 Войдите, чтобы оставить комментарий
😊 Пока нет комментариев. Будьте первым!