← 목록으로

IDOR / BOLA: 권한 검증이 빠졌을 때

[Web] Web · 작성: 2026-07-19 19:15:17 · 조회 3

IDOR(Insecure Direct Object Reference)와 BOLA(Broken Object Level Authorization)는 사실상 같은 문제를 가리킨다. "로그인은 확인하지만, 그 리소스가 요청자 본인 것인지는 확인하지 않는" 패턴이다. OWASP API Security Top 10에서 1위를 차지할 만큼 실무에서 압도적으로 자주 나온다.

원리

GET /api/orders/1042

이 요청이 "로그인 여부"만 확인하고 "1042번 주문이 로그인한 사용자의 것인지"는 확인하지 않으면, 숫자만 바꿔서 (1041, 1043...) 다른 사용자의 주문 정보를 그대로 볼 수 있다. UUID를 쓴다고 완전히 안전한 것도 아니다 — UUID가 응답 어딘가(목록 API, 알림 등)에 노출되면 그걸 수집해서 순회할 수 있다.

파일 다운로드, 계정 정보 수정, 주문 취소처럼 "ID로 특정 리소스를 지정하는" 모든 엔드포인트가 대상이다.

탐지 방법

  1. 계정 두 개(A, B)를 만든다.
  2. 계정 A로 로그인해서 리소스를 하나 만들고, 그 리소스의 ID/식별자를 확인한다.
  3. 계정 B의 세션으로 그 ID를 직접 요청해본다 (URL 파라미터, 요청 바디 모두 시도).
  4. GET(조회)뿐 아니라 PUT/PATCH/DELETE(수정/삭제)도 반드시 같이 테스트한다 — 조회는 막혀 있어도 수정은 뚫려 있는 경우가 흔하다.
  5. ID가 순차적 숫자면 자동화 스캔(Burp Intruder)으로 넓은 범위를 빠르게 확인할 수 있다.

방어

-- 이렇게 하지 말고
SELECT * FROM orders WHERE id = ?

-- 이렇게
SELECT * FROM orders WHERE id = ? AND user_id = ?

Web 카테고리의 글 (4/11)

  1. SQL Injection: 원리, 탐지, 방어
  2. XSS (Cross-Site Scripting): Stored / Reflected / DOM 차이와 방어
  3. CSRF (Cross-Site Request Forgery): 원리와 방어
  4. IDOR / BOLA: 권한 검증이 빠졌을 때
  5. SSRF (Server-Side Request Forgery): 서버가 대신 요청하게 만들기
  6. 파일 업로드 취약점: 웹쉘로 이어지는 경로
  7. 안전하지 않은 역직렬화 (Insecure Deserialization)
  8. SSTI (Server-Side Template Injection): 원리와 탐지
  9. OS Command Injection: 원리와 필터 우회
  10. JWT 취약점: alg=none부터 알고리즘 컨퓨전까지
  11. Race Condition (TOCTOU) 취약점
← CSRF (Cross-Site Request Forgery): 원리와 방어 SSRF (Server-Side Request Forgery): 서버가 대신 요청하게 만들기 →