Можно ли найти IDOR статическим анализом? Пишем ядро для Python
kovachvl 33 минуты назад Можно ли найти IDOR статическим анализом? Пишем ядро для Python Средний 11 мин 710 Python * Информационная безопасность * Кейс Всем привет. Пару месяцев ломал себе голову, почему никто в коде не...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: kovachvl 33 минуты назад Можно ли найти IDOR статическим анализом? Пишем ядро для Python Средний 11 мин 710 Python * Информационная безопасность * Кейс Всем привет. Пару месяцев ломал себе голову, почему никто в коде не ищет IDOR-уязвимости.
Ответы получал разные: что в большинстве случаев мы будем получать FP/FN в коде, да и зачем их искать, если у нас есть DAST? Но базовый DAST может не находить, если приложение написано на жёстком SPA или же у него фиговый краулер. И несколько дней назад дописал модуль (или ядро) для детекта уязвимости IDOR для ЯП Python.
Технические детали
Главный вопрос, на который я хотел ответить этой работой, звучит так:Можно ли искать IDOR статическим анализом не эвристиками, а через анализ связи между пользовательским идентификатором, объектом и проверкой авторизации? Дальше вся статья последовательно отвечает на этот вопрос: сначала показываю, что именно надо поймать, потом почему существующие подходы это не ловят, потом как устроено ядро, и в конце - что оно реально даёт на живом коде. СодержаниеЧто такое IDOR и примеры уязвимого кода на PythonРесерч на эту тему, какие есть решения и тестыКак вообще написан модуль и почему его можно использовать как базовый Taint-модульЗамер на продуктахВыводы1.
Давайте начнём с того, что такое IDOR? IDOR (Insecure Direct Object Reference) - уязвимость в веб-приложениях, которая позволяет получить несанкционированный доступ к конфиденциальным данным или чужим аккаунтам из-за отсутствия проверки прав на стороне сервера. Ну из простых примеров взять, что у вас есть две квартиры.
Одна ваша, вторая друга. По сути, вы в квартиру друга не можете зайти без ключа, но вы нашли обход и получили доступ. Давай теперь посмотрим, где уязвимость IDOR в коде.
Отраслевые последствия
Базовый пример на Flask:from flask import Flask, g, jsonify from models import Invoice app = Flask(__name__) @app. route("/invoice/ @login_required def get_invoice(invoice_id): invoice = Invoice. get(invoice_id) return jsonify(invoice.
route("/invoice/ - это декоратор, связывающий URL с функцией. - динамический URL-параметр. Он означает, что часть URL после /invoice/ будет передана в функцию как переменная invoice_id, причём Flask автоматически преобразовывает её в целое число, поэтому если вы введёте /invoice/abc, то вам вернётся 404.
login_required - декоратор защиты, блокирует доступ к эндпоинту для неавторизованных пользователей и автоматически перенаправляет на страницу логина. def get_invoice(invoice_id): - объявление функции, обрабатывающей запрос. Она принимает invoice_id из URL.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.






