CVE-2026-23735: 싱글톤 룰렛: GraphQL 모듈에서 컨텍스트를 위한 경쟁

발행: (2026년 1월 17일 오전 09:03 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

Overview

Vulnerability ID: CVE-2026-23735
CVSS Score: 8.7 (High)
Published: 2026-01-16

graphql-modules 라이브러리에서 중요한 레이스 컨디션이 존재합니다. @ExecutionContext() 데코레이터를 Singleton‑scoped 서비스 내부에서 사용할 경우, 요청 컨텍스트가 서로 섞일 수 있습니다. 이로 인해 한 사용자의 요청이 동시에 진행 중인 다른 요청의 세션, 인증 토큰 또는 기타 데이터를 의도치 않게 상속받게 됩니다.

Technical Details

  • Root cause: @ExecutionContext()가 Singleton 서비스 내에서 공유 가능한 가변 상태를 생성합니다. 동시 환경에서 병렬 요청이 서로의 컨텍스트 데이터를 덮어쓰게 되어 정체성 혼동 및 데이터 유출이 발생합니다.
  • CWE: CWE‑362 (Race Condition)
  • Attack Vector: Network
  • Attack Complexity: Low
  • Privileges Required: None
  • User Interaction: None

Affected Packages

PackageAffected VersionsFixed In
graphql-modules>= 2.2.1 = 3.0.0 < 3.1.13.1.1

Fixes

  • graphql-modules 2.4.1 또는 3.1.1(이후 버전)으로 업그레이드합니다.
  • Singleton 서비스는 Scope.Operation 또는 Scope.Request를 사용하도록 리팩터링하고, Scope.Singleton은 사용하지 않도록 합니다.
  • Singleton 서비스에서 @ExecutionContext() 사용을 제거하고, 컨텍스트를 메서드 인자로 명시적으로 전달합니다.

Remediation Steps

  1. @Injectable({ scope: Scope.Singleton }) 로 선언된 모든 서비스를 식별합니다.
  2. 해당 서비스가 @ExecutionContext() 데코레이터를 사용하고 있는지 확인합니다.
  3. 패키지를 업그레이드합니다:
    npm install graphql-modules@latest
    # 또는 특정 버전 지정
    npm install graphql-modules@2.4.1   # 2.x 시리즈용
    npm install graphql-modules@3.1.1   # 3.x 시리즈용
  4. 남아 있는 Singleton 서비스를 비‑Singleton 스코프로 리팩터링하거나, 컨텍스트를 수동으로 전달하도록 리팩터링합니다.
  5. advisory에 제공된 병렬 요청 PoC를 실행하여 수정 사항을 검증합니다.

References

  • GitHub Advisory: 레이스 컨디션을 보여주는 공식 PoC(비동기 resolver 사용).
  • Original Issue Report
  • GraphQL Modules Documentation

전체 분석, 인터랙티브 다이어그램 및 추가 세부 사항은 벤더 웹사이트에 게시된 CVE‑2026‑23735 전체 보고서를 참고하십시오.

Back to Blog

관련 글

더 보기 »