Возврат к истокам: небезопасная десериализация

Источник: Fastly

Возврат к истокам: небезопасная десериализация

Источник: Fastly

Узнайте, что такое небезопасная десериализация, как злоумышленники используют ее для атак и как предотвратить эти угрозы с помощью передовых методов безопасного кодирования и Fastly Next-Gen WAF.

•Обновлено: 6 октября 2026 г.

Передача сериализованных данных является фундаментальной основой современных веб-приложений, однако ее безопасная реализация может быть сложной задачей. Злоумышленники будут пытаться использовать уязвимости небезопасной десериализации везде, где они видят передачу сериализованных данных. В этой статье мы описываем, что такое небезопасная десериализация, как эта уязвимость используется для проведения кибератак и как эти атаки могут быть предотвращены с помощью передовых практик безопасного кодирования и средств защиты, встроенных в Fastly Next-Gen WAF.

Что такое сериализация?

Веб-приложения часто используют сложные структуры данных и нуждаются в способе сохранения или передачи этих сложных данных от клиента к серверу (и наоборот). Сериализация относится к процессу преобразования таких сложных данных в формат, который может быть сохранен (например, в базах данных или файлах) или передан (например, по сети). Сериализация иногда упоминается под другими именами, такими как маршаллинг, пиклинг или выравнивание. Концептуально это похоже на укладывание коробок при переезде, чтобы они поместились в вашу машину, и перевозку их к другу.

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

Существует множество способов сериализации и множество используемых форматов, в зависимости от варианта использования данных и рассматриваемых систем. Некоторые форматы могут использоваться в разных языках программирования, например JSON или XML. Другие форматы сериализации специфичны для отдельных языков программирования, например PHP или Java. Встроенные в язык методы сериализации обычно предоставляют дополнительные возможности по сравнению с независимыми от языка, такими как JSON или XML. К сожалению, эти механизмы могут создавать уязвимости в системе безопасности из-за дополнительных функций и предположений о том, какие сериализованные данные будут предоставлены.

Небезопасная десериализация происходит, когда приложение десериализует недоверенные входные данные, чаще всего при использовании форматов сериализации, встроенных в язык. Эксплуатация в основном зависит от двух факторов:

  • Форматы сериализации, встроенные в язык, выполняют дополнительные действия при десериализации данных. Иногда их называют магическими методами в PHP, это действия, которые происходят при реконструкции, уничтожении, десериализации и т. д. сложных объектов. Иногда это включает открытие файла, создание сетевого соединения, закрытие сокета и т. д.

Форматы сериализации, встроенные в язык, выполняют дополнительные действия при десериализации данных. Иногда их называют магическими методами в PHP, это действия, которые происходят при реконструкции, уничтожении, десериализации и т. д. сложных объектов. Иногда это включает открытие файла, создание сетевого соединения, закрытие сокета и т. д.

  • Отсутствие ограничений на типы данных, которые будут десериализованы.

Отсутствие ограничений на типы данных, которые будут десериализованы.

Отсутствие ограничений при десериализации входных данных может дать кибератакующим уникальную возможность для проведения атак. Злоумышленники могут полагаться на дополнительные действия, выполняемые приложением при десериализации данных, для выполнения отдельных операций. Каждое из этих действий в разговорной речи называется гаджетом. Когда злоумышленник объединяет несколько действий в единую полезную нагрузку, это называется цепочкой гаджетов. Фокус для злоумышленников заключается в поиске полезных цепочек гаджетов. Хотя приложение может десериализовать любые предоставленные ими входные данные, оно не может просто десериализовать произвольный код. Для успешной эксплуатации эксплойта приложение должно понимать сложные данные после их десериализации.

Представьте этот тип атаки как набор для микроволновки. Вы решаете, что пора обедать, распаковываете коробку, кладете еду в микроволновку и включаете ее. Но что, если злоумышленник незаметно положил туда много алюминия? Теперь ваша микроволновка горит! А теперь представьте, что злоумышленник вместо алюминия положил в еду для микроволновки камни. Камни не повредят микроволновку. Возможно, вы сбиты с толку и раздражены, потому что не смогли поесть, и теперь вам придется выбросить еду и заказать еду на вынос, но ничего страшного не произошло, кроме потери времени, ресурсов и испорченного настроения. В этом случае алюминий представляет собой одиночную цепочку гаджетов, с которой ваша микроволновка точно знает, что делать — просто с плохим результатом.

Итак, как злоумышленники находят алюминий, который можно положить вам в обед? Цепочки гаджетов могут существовать в произвольных приложениях, но часто встречаются в повторно используемых библиотеках, что делает их удобными для использования злоумышленниками в Интернете. Некоторые примеры коллекций таких известных цепочек гаджетов включают phpggc для PHP, Ysoserial для Java и так далее.

Атаки с использованием небезопасной десериализации могут быстро выйти из-под контроля в зависимости от того, какие гаджеты доступны или обнаружены в уязвимом приложении. Они выходят за рамки простого изменения файла и служат плацдармом для масштабных вторжений. Успешные полезные нагрузки могут приводить к утечке информации, изменению или удалению файлов или даже к выполнению произвольного удаленного кода (RCE).

Как предотвратить атаки с использованием небезопасной десериализации

Учитывая распространенность сериализации и масштаб последствий уязвимости небезопасной десериализации, методы безопасного кодирования имеют ключевое значение для минимизации и снижения рисков. Хотя самым безопасным способом предотвращения атак с использованием небезопасной десериализации является отказ от десериализации входных данных, контролируемых пользователем, для многих приложений это вряд ли возможно.

Поэтому для минимизации риска атак с использованием небезопасной десериализации при сохранении необходимой функциональности приложения разработчикам следует рассмотреть следующие методы предотвращения:

  • Проверьте и задокументируйте все потенциальные механизмы сериализации и десериализации

Проверьте и задокументируйте все потенциальные механизмы сериализации и десериализации

  • Сократите десериализацию входных данных, контролируемых пользователем, везде, где это возможно, чтобы уменьшить поверхность атаки приложения

Сократите десериализацию входных данных, контролируемых пользователем, везде, где это возможно, чтобы уменьшить поверхность атаки приложения

  • Используйте менее сложные форматы сериализации (например, JSON), где это возможно, чтобы еще больше уменьшить поверхность атаки приложения

Используйте менее сложные форматы сериализации (например, JSON), где это возможно, чтобы еще больше уменьшить поверхность атаки приложения

  • Используйте подход на основе белого списка для десериализации только тех входных данных, которые соответствуют ожидаемым типам данных, и предотвращения слепого доверия к пользовательскому вводу

Используйте подход на основе белого списка для десериализации только тех входных данных, которые соответствуют ожидаемым типам данных, и предотвращения слепого доверия к пользовательскому вводу

  • Внедрите такие процедуры, как строгая проверка подписи, чтобы гарантировать надежность данных

Внедрите такие процедуры, как строгая проверка подписи, чтобы гарантировать надежность данных

Анализируйте журналы ошибок на предмет потенциальных уязвимостей сериализации. Именно так мы обнаружили CVE-2023-30534, уязвимость небезопасной десериализации в Cacti.

Как всегда, более широкие рекомендации по безопасности, такие как многоуровневая защита, обеспечивают дополнительные уровни защиты при возникновении неизбежной уязвимости. В основе надежной стратегии безопасности приложений лежит межсетевой экран веб-приложений (WAF), который позволяет разработчикам двигаться быстро и без препятствий.

Предотвращение атак десериализации с помощью Fastly Next-Gen WAF

Решение Fastly Next-Gen WAF от Fastly разработано для обнаружения атак с неквалифицированной десериализацией путем сигнализации только о вредоносных сериализованных входных данных, не блокируя при этом безопасные сериализованные данные, необходимые вашему приложению. Обнаружение вредоносных цепочек гаджетов в PHP, Java, FastJSON и других языках при одновременном разрешении нормального использования сериализованных входных данных является ключом к защите вашего приложения без ущерба для его производительности. Свяжитесь с нами, чтобы узнать больше о том, как Fastly может помочь остановить атаки неквалифицированной десериализации, способные нарушить работу ваших приложений.

О чём эта статья

Что-то непонятно? Спросите по статье — объясню простыми словами.

Не хотите разбираться сами? Мы поможем.

Ещё в разделе «Облака и инфраструктура»

Все →

Ещё от Fastly