Когда проблема не в коде, а в замысле. OWASP A06: Insecure Design
• Insecure Design (небезопасное проектирование) — это широкая категория, где нужные защитные механизмы отсутствуют или неэффективны уже на уровне проектирования и архитектуры. Сюда входят и ошибки бизнес-логики, например когда не определено, какие изменения состояния приложения недопустимы.
• В OWASP Top 10:2025 Insecure Design занимает шестое место, опустившись с четвёртого, при этом OWASP отмечает, что с 2021 года отрасль стала заметно активнее применять моделирование угроз.
• Важно отличать ошибку проектирования от ошибки реализации, у них разные причины, они возникают на разных этапах разработки и исправляются по-разному.
• Безопасный дизайн тоже может содержать ошибки реализации, но небезопасный дизайн идеальным кодом не исправить, потому что нужные меры защиты в нём просто не были созданы.
• Один из сценариев OWASP, восстановление доступа через "секретный вопрос":
if answer == user.secret_answer:
allow_password_reset()
• Код написан без ошибок и делает ровно то, что задумано, но проблема в самой идее. Ответ может знать не только владелец аккаунта, поэтому такие вопросы нельзя считать подтверждением личности. NIST 800-63b и OWASP ASVS их запрещают, а саму функцию нужно заменить более безопасным решением.
• Ещё один сценарий: сеть кинотеатров даёт скидки на групповое бронирование и требует депозит только для групп больше пятнадцати человек.
• Атакующий может проверить, получится ли несколькими запросами забронировать шестьсот мест сразу во всех кинотеатрах, что приведёт к серьёзным потерям дохода. Ошибок в коде здесь может не быть, правила просто никто не проверил на злоупотребление.
• Суть threat modeling сводится к четырём вопросам: над чем мы работаем, что может пойти не так, что с этим делать и достаточно ли хорошо справились.
• Безопасный дизайн нельзя добавить к готовому продукту как надстройку или инструмент, это культура и методология, которая начинается ещё до написания кода, с требований и проектирования. Удачи!
#OWASP #ВебБезопасность
• Поддержать автора монеткой: @v_meshke
