Перейти к содержимому
Noroxi

CWE-502 · 3 381 записей

Десериализация недоверенных данных

Почему это происходит?

Данные, полученные по сети, десериализуются в собственный объектный формат языка без проверки источника. Во время десериализации могут быть задействованы пути выполнения кода внутри объекта.

Как предотвратить

  1. 01Для сетевых сообщений используйте форматы, содержащие только данные (например, JSON).
  2. 02Проверяйте источник сообщения с помощью подписи или взаимного TLS.
  3. 03Проверяйте десериализованные данные по схеме.

Уязвимый и исправленный код

Показательный учебный пример. Выделенные строки показывают, где ошибка и где исправление.

Уязвимый код

python
payload = sock.recv(65536)job = pickle.loads(payload)

Исправленный код

python
payload = sock.recv(65536)if not hmac.compare_digest(sign(payload), header_sig):    raise PermissionError("недействительная подпись")job = JobSchema.validate(json.loads(payload))

Есть ли этот шаблон в вашем коде?

В рамках услуги «Анализ исходного кода» мы целенаправленно ищем этот класс. Результаты передаются с указанием номеров строк.

CVE этого класса

3 385 записей

Все классы уязвимостей