🇰🇷 한글 설명
ash-project의 ash_graphql 라이브러리에서 발생하는 입력값 검증 미흡 취약점입니다. 인증되지 않은 클라이언트가 조작된 relay node ID를 사용하여 쿼리를 보낼 경우, 처리되지 않은 KeyError가 발생하여 릴레이 노드가 충돌할 수 있습니다.
💡 쉬운 설명
공격자가 특수하게 조작된 아이디를 보내면 서버 프로그램이 예상치 못한 오류를 일으켜 갑자기 멈춰버릴 수 있습니다. 이는 서비스가 중단되는 원인이 될 수 있습니다.
🇺🇸 원문 (English)
Improper Input Validation vulnerability in ash-project ash_graphql allows an unauthenticated client to crash a relay node(id: ...) query with an unhandled KeyError.
AshGraphql.Graphql.Resolver.resolve_node/2 decodes the client-supplied global ID with decode_relay_id/1, which only base64-decodes the string and splits it on : without validating the type segment. The decoded type is passed straight to Map.fetch!(type_to_domain_and_resource_map, type). Because fetch! raises on a missing key, a relay ID whose type segment is a valid atom that is not a relay-exposed type aborts the resolver before its resolve/2 clauses and their rescue handlers run, so the error never becomes a GraphQL error and may expose a stacktrace. Common resource names are easy to guess. The fix uses Map.fetch/2 and returns an Invalid node id error for unknown types.
This issue affects ash_graphql: from 0.27.0 before 1.11.0.
📍 영향받는 시스템
ash_graphql: 0.27.0 버전부터 1.11.0 미만 버전
⚔️ 공격 벡터
인증되지 않은 사용자가 유효하지 않은 타입 세그먼트를 포함한 base64 인코딩된 relay ID를 쿼리에 포함하여 전송
🛡️ 대응 방법
ash_graphql 라이브러리를 1.11.0 이상의 최신 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 버전이 0.27.0보다 낮거나 1.11.0보다 낮은지 확인하십시오.
mix deps info ash_graphql | grep -E 'ash_graphql \([0-9]+\.[0-9]+\.[0-9]+\)'