CVE-2026-23735: 싱글톤 룰렛: GraphQL 모듈에서 컨텍스트를 위한 경쟁
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
| Package | Affected Versions | Fixed In |
|---|---|---|
graphql-modules | >= 2.2.1 = 3.0.0 < 3.1.1 | 3.1.1 |
Fixes
- graphql-modules 2.4.1 또는 3.1.1(이후 버전)으로 업그레이드합니다.
- Singleton 서비스는
Scope.Operation또는Scope.Request를 사용하도록 리팩터링하고,Scope.Singleton은 사용하지 않도록 합니다. - Singleton 서비스에서
@ExecutionContext()사용을 제거하고, 컨텍스트를 메서드 인자로 명시적으로 전달합니다.
Remediation Steps
@Injectable({ scope: Scope.Singleton })로 선언된 모든 서비스를 식별합니다.- 해당 서비스가
@ExecutionContext()데코레이터를 사용하고 있는지 확인합니다. - 패키지를 업그레이드합니다:
npm install graphql-modules@latest # 또는 특정 버전 지정 npm install graphql-modules@2.4.1 # 2.x 시리즈용 npm install graphql-modules@3.1.1 # 3.x 시리즈용 - 남아 있는 Singleton 서비스를 비‑Singleton 스코프로 리팩터링하거나, 컨텍스트를 수동으로 전달하도록 리팩터링합니다.
- advisory에 제공된 병렬 요청 PoC를 실행하여 수정 사항을 검증합니다.
References
- GitHub Advisory: 레이스 컨디션을 보여주는 공식 PoC(비동기 resolver 사용).
- Original Issue Report
- GraphQL Modules Documentation
전체 분석, 인터랙티브 다이어그램 및 추가 세부 사항은 벤더 웹사이트에 게시된 CVE‑2026‑23735 전체 보고서를 참고하십시오.