Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 603

Небезопасная десериализация

ПроверилCybersecurity entrepreneur & security researcher

Что такое Небезопасная десериализация?

Небезопасная десериализацияУязвимость, при которой приложение десериализует недоверенные данные, позволяя атакующему создавать произвольные объекты и часто получать удалённое выполнение кода.


Когда приложение преобразует сериализованные данные (бинарные форматы Java/PHP/Python/.NET, YAML или JSON с метаданными типов) обратно в объекты, десериализатор может вызывать конструкторы, магические методы или цепочки гаджетов (gadget chains) — последовательности уже загруженных методов, которые, будучи связанными вместе, достигают опасного стока, такого как Runtime.exec. Получая недоверенный ввод, атакующий формирует payload, который во время десериализации запускает это поведение, что приводит к удалённому выполнению кода (RCE), обходу аутентификации, записи файлов или отказу в обслуживании.

Классический пример — CVE-2015-4852: Oracle WebLogic небезопасно десериализовал неаутентифицированные Java-объекты, отправленные по протоколу T3 на TCP 7001, и при наличии Apache Commons Collections в classpath инструмент ysoserial создавал рабочий RCE-гаджет. Первый патч Oracle использовал хрупкий чёрный список (deny-list) классов вместо того, чтобы полностью запретить десериализацию недоверенных данных. Похожие изъяны затронули Apache Struts (CVE-2017-9805, через XStream) и бесчисленные PHP-баги внедрения объектов через unserialize(). В списке OWASP категория переместилась из A8:2017 в более широкую A08:2021 — Software and Data Integrity Failures.

flowchart LR
  A[Атакующий] -->|сформированный сериализованный блоб<br/>cookie / T3 / тело API| APP[Приложение]
  APP -->|десериализует недоверенные байты| DZ[Десериализатор]
  DZ -->|создаёт объекты<br/>вызывает магические методы| GC[Цепочка гаджетов<br/>в classpath]
  GC -->|достигает опасного стока| RCE[Runtime.exec / запись файла]
  APP -. защита .-> SIG[Подписанный payload +<br/>allow-list типов]
  SIG -.->|отклонить неизвестные типы| DROP[Отбросить]

Меры защиты: никогда не десериализуйте недоверенные данные; предпочитайте форматы, привязанные к схеме (обычный JSON, Protobuf), без восстановления типов; подписывайте или защищайте HMAC сериализованные payload'ы; применяйте строгий allow-list десериализуемых типов; и своевременно обновляйте рантаймы — в современном .NET BinaryFormatter объявлен устаревшим и удалён.

Примеры

  1. 01

    Java-приложение десериализует сессионную cookie с Commons Collections в classpath — RCE.

  2. 02

    Python-сервис выполняет pickle.loads на байтах, контролируемых пользователем.

Частые вопросы

Что такое Небезопасная десериализация?

Уязвимость, при которой приложение десериализует недоверенные данные, позволяя атакующему создавать произвольные объекты и часто получать удалённое выполнение кода. Относится к категории Уязвимости в кибербезопасности.

Что означает Небезопасная десериализация?

Уязвимость, при которой приложение десериализует недоверенные данные, позволяя атакующему создавать произвольные объекты и часто получать удалённое выполнение кода.

Как защититься от Небезопасная десериализация?

Защита от Небезопасная десериализация обычно сочетает технические меры и операционные практики, как описано в определении выше.

Какие есть другие названия Небезопасная десериализация?

Распространённые альтернативные названия: Небезопасная сериализация, Уязвимость десериализации объектов.

Связанные термины

См. также