SurrealDB: HTTP /rpc `sessions` 메서드가 연결된 세션 UUID를 유출하여 익명 호출자가 전체 세션 하이재킹을 가능하게 합니다.
HTTP /rpc sessions 메서드는 인증 없이 연결된 모든 세션 UUID를 반환했으며 /rpc 핸들러는 소유권 확인 없이 임의의 session 필드를 허용했습니다. 익명의 호출자는 UUID를 열거하고 인증된 세션을 가장할 수 있습니다.
"연결됨"은 HTTP 세션 맵에 대한 유일한 작성자인 {"method":"attach"}를 통해 등록된 세션을 의미합니다. 일반적인 상태 비저장 /rpc 요청은 sessions()에서 필터링되고 요청이 끝날 때 삭제되는 임시 요청별 세션을 사용하므로 열거할 수 없습니다.
attach를 실행하는 클라이언트, 특히 공식 Rust SDK의 Http/Https 엔진(Surreal 핸들당 한 번 자동 연결)./sql, /key, /signin, /export 등); WebSocket /rpc(연결별 범위, 연결 거부됨); 임베디드/MCP 사용; 결코 attach되지 않는 임시POST /rpc 호출자.연결 및 인증된 각 세션에 대해 인증되지 않은 공격자는 세션이 도달할 수 있는 모든 데이터를 읽고, 쓰고, 삭제할 수 있고, 메타데이터를 덤프하고, 세션을 무효화하고, 해당 세션의 권한 수준(최대 루트까지)으로 에스컬레이션할 수 있습니다. 아직 인증되지 않은 연결된 세션은 '레벨::아니요'이며 권한을 부여하지 않습니다.
sessions()는 이제 method_not_allowed를 반환합니다. WebSocket은 연결별 열거를 유지합니다./rpc 핸들러는 호출자의 요청 수준 인증 주체(행위자 ID + 수준)에 대해 클라이언트 제공 세션 ID를 제어합니다. 불일치는 session_not_found를 반환합니다.SURREAL_HTTP_MAX_ATTACHED_SESSIONS를 통해 제한됩니다.버전 3.1.0 이상은 영향을 받지 않습니다.
이 문제를 완전히 해결하는 구성 수준 완화는 없습니다. 업그레이드할 수 없는 사용자의 경우:
/rpc(특히 Rust SDK의 Http/Https 엔진)에 대해 attach를 호출하는 SDK 및 클라이언트 흐름을 피하세요. 연결된 세션 맵을 절대 채우지 않는 WebSocket 전송 또는 REST 엔드포인트(/sql, /signin, /key, /export)를 선호합니다./rpc를 신뢰할 수 있는 클라이언트로 제한합니다.왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 88.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 88.00 |
VPI 공식 vpi-v1 기준