← 전체 학습 경로
CASE 03 · 초급

내 문서 번호를 바꾸면?

제공된 계약직 계정으로 Nova Vault를 블랙박스 방식으로 점검하세요. 자신의 문서함과 화면에 정상적으로 노출되는 활동 정보를 출발점으로 삼아, 명시적으로 공유받지 않은 다른 조직의 지정 문서가 열리는지 확인하세요. 성공하면 로그인 사용자·문서 소유자·최종 응답이 함께 보이는 증거를 남기세요.

CLIENT노바 문서함
TARGET SERVICENova Vault
TARGET ADDRESShttps://wargame.hanplanet.com/nova/documents
ESTIMATED TIME30 MIN
CLIENT DOSSIER

의뢰 배경

노바 문서함은 소규모 스타트업에 계약서 보관 기능을 제공합니다. 한 고객사가 공유를 해제한 법무 초안이 외부 계약직 계정의 열람 기록에 남았다고 신고했습니다. 서버에는 정상 로그인과 일반적인 문서 조회로만 기록되어 계정 탈취 여부를 판단하기 어렵고, 해당 고객사는 오늘 안으로 노출 범위와 대응 계획을 요구하고 있습니다.

MISSION OBJECTIVE

이번 목표

계약직 계정으로 공유받지 않은 다른 조직의 지정 문서를 열 수 있음을 재현하고 사용자·소유자 불일치 증거를 확보하세요.

  • 인증, 세션, 인가의 역할을 각각 설명한다.
  • ID를 추측할 수 있다는 사실보다 소유권 검사 누락이 핵심 원인임을 이해한다.
  • 수평 권한 상승을 요청과 SQL 관점에서 추적한다.
TECHNICAL BRIEFING

학습 노트 · 문서 번호는 어느 행을 찾을지 알려 줄 뿐, 그 행을 볼 권한까지 증명하지 않습니다.

IDOR는 사용자가 전달한 객체 식별자를 서버가 직접 조회하면서 현재 사용자가 그 객체에 접근할 수 있는지 확인하지 않을 때 발생합니다. 숫자 ID, UUID, 파일명 모두 같은 문제가 생길 수 있습니다.

취약한 쿼리는 WHERE id = ? 조건만 사용합니다. 안전한 쿼리는 같은 요청에서도 WHERE id = ? AND owner_id = ?처럼 현재 사용자와 자원의 관계를 함께 확인합니다.

복잡하거나 무작위인 ID는 추측을 어렵게 만들 수 있지만 인가를 대신하지 않습니다. 로그, 링크, 공유 화면에서 ID가 노출될 수 있으므로 모든 객체 요청에서 서버 측 검사가 필요합니다.

단계취약한 처리안전한 처리
요청GET /document?id=1002동일
조회WHERE id = :idWHERE id = :id AND owner = :viewer
판정행이 있으면 반환소유자 또는 명시적 공유 관계 확인
결과다른 사용자 문서 노출권한 없으면 404 또는 403
-- 취약한 조회
SELECT title, body FROM documents WHERE id = :id;

-- 안전한 조회
SELECT title, body
FROM documents
WHERE id = :id AND owner_id = :current_user_id;
FIELD REFERENCES

더 깊이 읽기

실습 전후에 공식 문서와 보안 아카데미 자료로 개념을 교차 확인하세요.

PROGRESSIVE HINTS

막혔을 때만 열기

다음 단서가 필요할 때만 한 단계씩 확인하세요.

힌트 1 · 선택자는 어디에 있나

내 문서를 열었을 때 URL에서 어떤 값이 문서를 선택하는지 확인하세요.

힌트 2 · 다른 번호의 흔적

페이지 아래 활동 로그에는 방금 공유가 해제된 문서 번호가 남아 있습니다.

힌트 3 · 소유권 검사 확인

id 값을 활동 로그에서 본 번호로 바꾸세요. 서버는 로그인만 확인하고 owner 조건을 쿼리에 넣지 않습니다.

선행 의뢰가 잠겨 있습니다

이전 단계를 완료하면 자동으로 의뢰 메일과 실습 환경이 열립니다.

로그인 후 실습