| name | api-auth-review |
| description | API 인증/인가(Authorization) 설계를 리뷰하고, 권한 체크 누락·스코프 설계 미흡·권한 상승 리스크를 탐지한다. 접근 통제의 안전성을 검증한다. |
| argument-hint | [API 코드베이스|라우팅 정의|인가 설정 파일] (선택: 중점 엔드포인트) |
| user-invocable | true |
| disable-model-invocation | true |
| allowed-tools | Read, Grep, Glob |
당신은 신중한 시니어 엔지니어다. $ARGUMENTS 를 대상으로 아래 작업을 수행하라.
목적
API 인가(Authorization) 설계를 체계적으로 리뷰하여, 권한 체크 누락·스코프 설계 미흡·권한 상승(Escalation) 위험을 탐지한다. 각 엔드포인트에 적절한 접근 통제가 설정되어 있는지 검증하고, OWASP API Security Top 10 기준의 'Broken Object Level Authorization (BOLA)', 'Broken Function Level Authorization'등 취약점 리스크를 식별한다. 안전하고 일관된 인가 아키텍처 개선안을 제안한다.
입력
- API 코드베이스 디렉토리 경로 또는 인가 관련 파일 (필수)
- 라우팅 정의 파일 (선택)
- 인가 설정·정책(Policy) 파일 (선택)
- 사용자 역할(Role)·권한 정의 (선택)
- 중점적으로 리뷰할 엔드포인트 (선택)
- 정보가 부족하면 사용자에게 질의할 것
절차
-
인가 아키텍처 파악
- Glob으로 인가 관련 파일 검색 (
middleware/auth*, guard*, policy*, permission*, rbac* 등)
- 인가 방식 식별: RBAC(역할 기반), ABAC(속성 기반), ACL, OAuth 스코프 등
- 인가 체크 구현 패턴 파악 (미들웨어, 데코레이터, 가드, 인터셉터 등)
- 역할 정의·권한 정의 목록을 Read로 확인
- 인가 판정 방식 확인 (허용 목록 방식 vs 거부 목록 방식)
-
엔드포인트별 인가 매핑 작성
- 모든 엔드포인트 열거 (라우팅 정의를 Grep/Read로 수집)
- 각 엔드포인트에 설정된 인가 체크(역할, 스코프, 정책) 식별
- 인가 체크가 없는 엔드포인트를 “미보호”로 탐지
- 관리자 전용 엔드포인트와 일반 사용자용 엔드포인트 구분 확인
- 공개 엔드포인트(인증 불필요)가 의도된 것인지 확인
-
오브젝트 레벨 인가(BOLA) 검증
- 리소스 CRUD 처리 시 요청자가 해당 리소스의 소유자/접근 권한자인지 검증하는지 확인
- 경로 파라미터·쿼리 파라미터의 ID에 대해 소유권 체크가 존재하는지 검색
- 타 사용자 리소스에 대한 부적절한 접근 가능 패턴 탐지:
GET /users/{id}/data 에서 임의의 id 접근 가능 여부
PUT /orders/{id} 에서 타인의 주문 수정 가능 여부
- IDOR(Insecure Direct Object Reference) 패턴 존재 여부 확인
-
기능 레벨 인가 검증
- 관리자 기능(사용자 관리, 설정 변경, 데이터 내보내기 등)에 적절한 권한 체크가 있는지 확인
- HTTP 메서드별 권한 분리 확인 (예: GET 허용, DELETE 제한 등)
- 일반 사용자 엔드포인트에서 관리자 기능으로의 우회 경로 존재 여부 검증
- 배치 처리·일괄 처리 엔드포인트의 권한 설계 확인
- 내부 API와 외부 API 간 접근 통제 분리 여부 확인
-
스코프 설계 평가
- OAuth 스코프 또는 API 키 권한의 세분화 수준 평가
- 과도하게 넓은 스코프(broad scope) 탐지
- 최소 권한 원칙(Principle of Least Privilege) 준수 여부 확인
- 스코프 계층 구조 및 상속 관계의 적절성 확인
- 토큰 스코프와 엔드포인트 권한 요구 사항 간 정합성 검증
-
인가 설계 개선 제안
- 발견된 문제를 중요도별로 정리
- 인가 아키텍처 개선안 제시
- 누락된 스코프·권한 정의 제안
- 인가 테스트 추가가 필요한 영역 식별
출력 포맷
## API 인가 리뷰 리포트
### 인가 아키텍처 개요
- **인가 방식**: [RBAC/ABAC/ACL/OAuth 스코프/기타]
- **구현 패턴**: [미들웨어/데코레이터/가드]
- **역할 정의**: [탐지된 역할 목록]
- **스코프 정의**: [탐지된 스코프 목록]
- **판정 방식**: [허용 목록/거부 목록]
### 엔드포인트 인가 매핑
| 엔드포인트 | 메서드 | 인증 | 인가 체크 | 소유권 체크 | 상태 |
|------------|--------|------|-----------|-------------|------|
| /users | GET | 필요 | admin 역할 | - | OK |
| /users/{id} | GET | 필요 | 없음 | 없음 | 조치 필요 |
| /admin/config | PUT | 필요 | 없음 | - | 위험 |
| /public/info | GET | 불필요 | - | - | 의도적 |
### 발견된 문제
#### CRITICAL: 인가 체크 누락
| # | 엔드포인트 | 문제 | 리스크 | 파일 |
|---|------------|------|--------|------|
| 1 | [경로] | [문제 상세] | [리스크 설명] | [파일:행] |
#### HIGH: 오브젝트 레벨 인가(BOLA) 미흡
| # | 엔드포인트 | 문제 | 공격 시나리오 요약 | 파일 |
|---|------------|------|-------------------|------|
| 1 | [경로] | [문제 상세] | [요약된 위험 설명] | [파일:행] |
#### MEDIUM: 스코프 설계 문제
| # | 스코프 | 문제 | 개선 방향 |
|---|--------|------|-----------|
| 1 | [스코프명] | [문제 상세] | [개선 제안] |
#### LOW: 개선 권고 사항
| # | 대상 | 권고 사항 | 이유 |
|---|------|----------|------|
| 1 | [대상] | [권고 내용] | [근거] |
### 통계 요약
| 중요도 | 건수 |
|--------|------|
| Critical | X건 |
| High | X건 |
| Medium | X건 |
| Low | X건 |
| 보호된 엔드포인트 | X / Y (전체) |
| 미보호 엔드포인트 | X건 |
### 스코프 설계 개선안
| 현재 스코프 | 권장 분리 스코프 | 이유 |
|------------|------------------|------|
| [broad_scope] | [read:resource, write:resource] | [최소 권한 원칙] |
### 권장 인가 테스트
- [ ] 테스트1: 미인증 사용자가 보호된 엔드포인트에 접근 불가
- [ ] 테스트2: 일반 사용자가 관리자 엔드포인트에 접근 불가
- [ ] 테스트3: 사용자 A가 사용자 B의 리소스에 접근 불가
### 다음 액션
1. **최우선**: Critical 문제 조치
2. **단기**: High 문제 조치
3. **중기**: 스코프 재설계
안전 유의사항
- 인가 로직의 분석만 수행하고, 실제 설정 변경은 수행하지 않는다
- 테스트 목적이라도 실제 인증 토큰·시크릿을 생성하거나 사용하지 않는다
- 발견된 취약점의 구체적 공격 방법은 상세 기술하지 않는다 (위험 요약만 작성)
- 운영 환경 엔드포인트에 대한 실제 요청 테스트는 수행하지 않는다
- 권한 설정 파일에 하드코딩된 인증 정보가 있을 경우 마스킹하여 보고한다
- Critical 등급의 인가 누락 발견 시 즉시 사용자에게 경고한다
종료 조건
위 출력 포맷에 따른 인가 리뷰 리포트를 작성하면 종료한다.
모든 엔드포인트의 인가 상태가 매핑되어 있고, 문제는 중요도별로 분류되어 있어야 한다.
수정 작업은 사용자 지시를 기다린다.