피드로 돌아가기
How to Prevent IDOR Vulnerabilities in Django REST APIs
Dev.toDev.to
Security

Queryset Scoping과 Defense-in-Depth를 통한 IDOR 취약점 원천 차단

How to Prevent IDOR Vulnerabilities in Django REST APIs

Stefan2026년 5월 3일13intermediate

Context

Django REST Framework의 ModelViewSet이 제공하는 기본 추상화로 인해 Authorization 계층이 누락되어 발생하는 IDOR 취약점 분석. 인증된 사용자가 PK 기반 URL 조작을 통해 타인의 데이터에 접근하는 구조적 결함 존재.

Technical Solution

  • get_queryset()을 request.user 기준으로 필터링하여 ORM 레벨에서 데이터 접근 범위 제한
  • 403 Forbidden 대신 404 Not Found를 반환하여 리소스 존재 여부에 대한 정보 유출 방지
  • BasePermission의 has_object_permission을 구현한 IsOwner 클래스로 mutating action에 대한 2차 검증 수행
  • perform_create 내에서 owner를 request.user로 강제 바인딩하여 사용자 입력값에 의한 소유권 조작 차단
  • UUID 적용을 통한 Sequential ID 기반의 Resource Enumeration 공격 비용 증가
  • CI 단계에서 타 사용자 계정으로 접근 시 404 반환을 검증하는 Automated Cross-User Test 도입

1. 모든 ViewSet의 get_queryset()이 request.user로 필터링되어 있는지 확인

2. CUD 작업 시 perform_create 및 BasePermission의 has_object_permission 적용 여부 검토

3. 외부 노출 ID를 Sequential Integer에서 UUID로 전환하여 무작위 대입 공격 방어

4. CI 파이프라인에 타 사용자 리소스 접근 시 404를 확인하는 통합 테스트 케이스 추가

5. Semgrep 등 SAST 도구를 활용해 unscoped .objects.get() 사용 사례 탐지

원문 읽기