Mastodon Mastodon Mastodon Mastodon

Десеріалізація

Оновлено: · CyberSecureFox Editorial Team

Десеріалізація — перетворення збережених чи переданих даних назад на програмні об’єкти; якщо її застосовують до неперевірених даних, зловмисник може домогтися виконання коду.

Як працюють атаки на десеріалізацію

Застосунки серіалізують об’єкти — перетворюють їх на байти, JSON чи XML, — щоб зберегти чи передати мережею, а на іншому боці десеріалізують. Формати на кшталт Java-серіалізації, .NET BinaryFormatter, функції unserialize() у PHP чи модуля pickle у Python уміють відтворювати об’єкти довільних типів і автоматично викликати їхні методи. Зловмисник, що керує серіалізованими даними, будує з класів у бібліотеках застосунку «ланцюжки гаджетів» (gadget chains), і під час відтворення об’єктів виконуються команди. Інструменти на кшталт ysoserial генерують такі навантаження автоматично.

Слабкість описано як CWE-502. Дослідження 2015 року про ланцюжки гаджетів у бібліотеці Apache Commons Collections показало, що так можна атакувати безліч Java-застосунків, зокрема Jenkins та Oracle WebLogic.

Чому це важливо

Небезпечна десеріалізація зазвичай веде до віддаленого виконання коду, часто без автентифікації, тому такі вразливості отримують найвищі оцінки небезпеки. Корпоративне проміжне ПЗ, VPN-шлюзи й системи передавання файлів не раз зламували через помилки десеріалізації, а публічні експлойти з’являються швидко. Це близький родич впровадження коду, що входить до категорії OWASP Top 10 «Порушення цілісності ПЗ і даних».

Як запобігти

  • Не десеріалізувати дані з неперевірених джерел за допомогою нативних форматів об’єктів; використовувати прості формати на кшталт JSON зі суворою схемою.
  • Якщо без нативної десеріалізації не обійтися — застосовувати білі списки дозволених класів і перевірку цілісності (підписи).
  • Видаляти невикористовувані бібліотеки, що дають ланцюжки гаджетів, і оновлювати фреймворки.
  • Відстежувати винятки десеріалізації та незвичні дочірні процеси.
Синоніми:
небезпечна десеріалізація, insecure deserialization