/proc/self/fd вместо эксплойта. Хакер обманул Java через файловые дескрипторы
Версия Fastjson 1.2.83 годами считалась последней безопасной точкой для старой ветки библиотеки, но новая уязвимость показала обратное. Ошибка CVE-2026-16723 (9.0 Critical) позволяет удалённо выполнить код в уязвимых приложениях Spring Boot даже при отключённой функции AutoType и без заранее установленного в системе опасного класса.
Проблема затрагивает Fastjson версий от 1.2.68 до 1.2.83. Alibaba присвоила уязвимости оценку 9,0 балла из 10. Чтобы атаковать, злоумышленнику нужен сетевой доступ к функции, которая передаёт подконтрольный JSON библиотеке Fastjson. Приложение также должно работать как исполняемый архив Spring Boot со встроенными зависимостями, а безопасный режим библиотеки должен оставаться выключенным.
Уязвимость обнаружил Кирилл Фирсов из FearsOff Cybersecurity. Специалист выяснил, что Fastjson обрабатывает служебное поле @type даже при отключённой функции AutoType. Во время проверки имени класса библиотека пытается найти соответствующий ресурс через загрузчик классов. Если вместо имени класса подставить специально подготовленный адрес, приложение может обратиться к внешнему серверу.
Сначала такая техника позволяет вызвать скрытый запрос от имени сервера. Затем атакующий может заставить приложение загрузить удалённый архив Java с вредоносным классом. Аннотация @JSONType внутри такого класса воспринимается как признак доверия, после чего Fastjson обходит часть проверок и пытается загрузить класс.
На Java 8 вредоносный код в некоторых конфигурациях запускается сразу после загрузки удалённого архива. Начиная с Java 9 среда выполнения блокирует имена классов с некоторыми символами, поэтому прямой вариант атаки перестаёт работать. Фирсов нашёл обход для современных версий Java через каталог /proc/self/fd в Linux.
При загрузке удалённого архива среда Java временно сохраняет файл, открывает его, а затем удаляет имя файла с диска. Содержимое при этом остаётся доступным через открытый файловый дескриптор. Атакующий перебирает номера таких дескрипторов и повторно указывает Fastjson путь к уже загруженному архиву. После успешного совпадения библиотека читает вредоносный класс и запускает его код.
Alibaba проверила атаку на Spring Boot 2, 3 и 4 с Java 8, 11, 17 и 21. Уязвимость зависит от специального загрузчика исполняемых архивов Spring Boot. Обычные архивы Java, универсальные сборки и приложения в формате WAR для Tomcat или Jetty, согласно уведомлению Alibaba, не затронуты.
Опасный запрос может попасть в функции JSON.parse, JSON.parseObject(String) и JSON.parseObject(String, Class). Привязка входных данных к конкретному классу не всегда защищает приложение. Вредоносное поле можно вложить в объект, содержащий универсальный тип Object или структуру Map.
ThreatBook сообщила, что зафиксировала попытки эксплуатации после того, как добавила правила обнаружения. Компания смогла воспроизвести выполнение кода в приложении Spring Boot на Java 8, однако тест со встроенным Tomcat привёл только к загрузке удалённого архива или запросу от имени сервера.
Imperva также обнаружила подозрительную активность против организаций из финансовой сферы, здравоохранения, розничной торговли и технологического сектора. Большинство запросов поступало из США, меньшая часть – из Сингапура и Канады. При этом ни ThreatBook, ни Imperva не раскрыли число атак, содержимое запросов, названия пострадавших компаний или подтверждение успешного взлома.
На 25 июля Alibaba не выпустила исправленную версию Fastjson 1.x. Разработчики рекомендуют перейти на Fastjson2, где уязвимый механизм отсутствует. В качестве временной меры можно включить безопасный режим параметром -Dfastjson.parser.safeMode=true или установить ограниченную сборку com.alibaba:fastjson:1.2.83_noneautotype.
Компаниям советуют проверить прямые и косвенные зависимости от Fastjson, а также поискать в журналах необычные значения @type, ссылки на вложенные архивы Java, неожиданные исходящие соединения, запуск дочерних процессов, появление новых файлов и командных оболочек на веб-серверах.
Fastjson 1.2.83 ранее рекомендовали как безопасное обновление после того, как в 2022 году раскрыли обход AutoType. Теперь последняя версия ветки 1.x сама входит в диапазон, уязвимый для CVE-2026-16723.