OWASP A08: Чем опасно доверие к чужому коду
• Software or Data Integrity Failures (нарушения целостности ПО или данных), восьмая категория в OWASP Top 10:2025. Сюда относятся ситуации, когда приложение принимает код или данные за доверенные, не проверив их происхождение и отсутствие подмены.
• Представим программу с автоматическим обновлением, она скачивает новую версию, распаковывает её и запускает установку. Всё удобно, но проверку подписи разработчик не предусмотрел.
• Если злоумышленник получит возможность заменить файл на сервере обновлений, программа сама скачает и запустит его код. Пользователю даже не придётся открывать подозрительное вложение, он просто обновит приложение привычным способом.
• Хеш рядом с файлом не всегда решает проблему. Если атакующий может заменить и архив, и опубликованный SHA-256, проверка пройдёт успешно. Ломать хеш-функцию не потребуется, достаточно посчитать новый хеш для подменённого файла.
• Поэтому обновление проверяют по цифровой подписи, используя заранее доверенный ключ, а при ошибке установку останавливают. При этом подпись подтверждает происхождение и отсутствие изменений после подписания, но не гарантирует, что сам код безопасен.
• Другой пример из этой категории, небезопасная десериализация. Чтобы сохранить объект или передать его по сети, программа преобразует его в набор байтов, а при получении восстанавливает обратно. Проблемы начинаются, когда содержимое этих байтов контролирует кто-то другой.
• Например, сервер получает данные пользователя и восстанавливает из них объект через python библиотеку
pickle:profile = pickle.loads(request.data)
• Выглядит как обычное чтение данных, но специально подготовленный pickle может выполнить код уже во время загрузки. Проверять поля полученного объекта после
pickle.loads уже поздно, опасное действие могло произойти внутри самого вызова.• Для обычного обмена полями профиля достаточно JSON, без восстановления произвольных Python-объектов. Но формат сам по себе не делает данные достоверными: структуру и значения проверяем отдельно, а права пользователя определяем на сервере, не по присланному
role: admin.• Обновление и объект из запроса выглядят как разные истории, но ошибка одна: приложение начинает использовать чужое содержимое раньше, чем убеждается, что ему можно доверять. Проверка должна происходить до выполнения кода, а не после. Удачи!
#OWASP #ВебБезопасность
• Поддержать автора монеткой: @v_meshke
