🇰🇷 한글 설명
ash-project의 ash_graphql 라이브러리에서 구독 데이터가 잘못된 세션으로 노출되는 취약점이 발견되었습니다. 특정 조건에서 프로세스 딕셔너리의 데이터를 구분 없이 공유하여, 한 사용자의 구독 데이터가 다른 사용자의 토픽으로 전달될 수 있습니다.
💡 쉬운 설명
데이터를 전달하는 과정에서 이름표가 없는 임시 저장 공간을 사용하기 때문에, A라는 사람의 정보가 B라는 사람에게 잘못 배달될 수 있는 문제입니다. 이로 인해 개인정보나 민감한 데이터가 엉뚱한 사용자에게 노출될 위험이 있습니다.
🇺🇸 원문 (English)
Exposure of Data Element to Wrong Session vulnerability in ash-project ash_graphql can deliver one subscription's resolved records to a different subscriber's topic.
AshGraphql.Subscription.Batcher.do_send/5 reads the resolved batch from the process dictionary via Process.get(:batch_resolved) and then unconditionally deletes it. That is sound only inside a task the library owns. On the :backpressure_sync and :noproc fallbacks do_send/5 runs inline in the publishing caller's process, so if a resolver inside an outer do_send/5 triggers another synchronous Ash notification, the inner call finds the outer run's value still under :batch_resolved, adopts it as its own result, and publishes it to the inner topic, a different subscription document with a different actor and tenant. It then deletes the key, so the outer run publishes nothing. The key is not namespaced by run, so records cannot be told apart. The fix saves, clears, and restores :batch_resolved around each run.
This issue affects ash_graphql: from 1.4.0 before 1.11.0.
📍 영향받는 시스템
ash_graphql: 1.4.0 버전부터 1.11.0 미만 버전
⚔️ 공격 벡터
동기식 알림이 발생하는 중첩된 구독 요청을 통해 다른 세션의 데이터를 가로채는 방식
🛡️ 대응 방법
ash_graphql 라이브러리를 1.11.0 이상의 최신 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 버전이 1.4.0보다 낮고 1.11.0보다 낮은지 확인하십시오.
mix deps info ash_graphql | grep -E 'ash_graphql \([0-9]+\.[0-9]+\.[0-9]+\)'