В Log4j 2 обнаружена возможность обойти фильтр десериализации
В Log4j 2 обнаружен способ обойти allowlist в FilteredObjectInputStream. Проблема связана с java.rmi.MarshalledObject: этот класс разрешен фильтром, но содержимое объекта при распаковке может десериализоваться уже без дополнительной проверки. Из‑за этого сервисы, которые принимают по сети сериализованные LogEvent от недоверенных источников, могут быть уязвимы к небезопасной десериализации. При наличии подходящей цепочки гаджетов на сервере это может привести к удаленному выполнению кода.
По данным опубликованного исследования, затронуты:
- log4j‑api 2.11.0–2.26.1;
- log4j‑core 2.8.0–2.26.1.
В открытом доступе уже появился PoC с OOB (out‑of‑band) DNS — проверкой, поддержкой RCE‑нагрузок и Nuclei‑шаблоном для поиска доступных сетевых приемников.
Рекомендуем:
- Проверить инфраструктуру на наличие сетевых приемников, сериализованных LogEvent, включая TCP Socket Server, SocketAppender и аналоги. Особое внимание — портам 4560/4562/4563/9500, если они доступны из недоверенных сетей.
- В качестве временной меры можно использовать параметр при запуске Java‑процесса:
‑Djdk.serialFilter=’!java.rmi.MarshalledObject’. Это блокирует данный путь десериализации, но может нарушить штатную передачу сериализованных LogEvent. - Не рассчитывать только на maxdepth и maxbytes: такие ограничения могут остановить отдельные цепочки гаджетов, но не устраняют сам обход фильтра.
Для пользователей BI.ZОNE WAF уже доступны правила, которые предотвращают попытки эксплуатации.