🇰🇷 한글 설명
ash-project의 ash_graphql 라이브러리에서 발생하는 자원 할당 제한 미비 취약점입니다. 인증되지 않은 클라이언트가 GraphQL 쿼리 복잡도 제한을 우회하여 무제한적인 데이터베이스 읽기를 강제할 수 있습니다.
💡 쉬운 설명
공격자가 복잡한 계산을 요구하는 특수한 질문을 던져 서버의 방어 체계를 속이고, 서버가 감당하기 힘든 엄청난 양의 데이터를 한꺼번에 읽게 만들어 시스템을 마비시킬 수 있습니다.
🇺🇸 원문 (English)
Allocation of Resources Without Limits or Throttling vulnerability in ash-project ash_graphql allows an unauthenticated client to bypass the configured GraphQL query-complexity limit and force an unbounded database read.
AshGraphql.Graphql.Resolver.query_complexity/3 multiplies child complexity by the requested page size only when the argument map contains :limit (offset pagination). Relay connections and keyset pagination use first and last, which never match that clause and fall through to the catch-all that returns child_complexity + 1. A nested relay query such as posts(first: 500) { edges { node { comments(first: 500) { ... } } } } therefore scores as trivially cheap while materializing the full fan-out, passing an Absinthe max_complexity cap that rejects the equivalent limit-based query. The fix adds first and last clauses clamped to the action's page size.
This issue affects ash_graphql: from 0.16.23 before 1.11.0.
📍 영향받는 시스템
ash_graphql: 0.16.23 버전부터 1.11.0 미만 버전
⚔️ 공격 벡터
Relay 연결 또는 키셋 페이지네이션(first/last 인자 사용)을 이용해 쿼리 복잡도 계산 로직을 우회하는 중첩 쿼리 전송
🛡️ 대응 방법
ash_graphql 라이브러리를 1.11.0 이상의 최신 버전으로 업데이트
🔧 검증 코드
출력된 버전이 1.11.0 미만(예: 0.16.23 ~ 1.10.x)이면 취약한 상태입니다.
mix deps info ash_graphql | grep -E 'ash_graphql.*\([0-9]+\.[0-9]+\.[0-9]+\)'