GHSA-XX7M-69FF-9CRP: SurrealDB의 Poison Pill: 단일 문자열로 데이터베이스 충돌시키기
Source: Dev.to
개요
취약점 ID: GHSA-XX7M-69FF-9CRP
CVSS 점수: 6.5 (중간)
공개일: 2026-02-12
SurrealDB의 내장 JavaScript 엔진(QuickJS)에서 서비스 거부(DoS) 취약점이 존재합니다. 과도하게 큰 문자열 리터럴을 포함하는 스크립팅 함수를 정의하면, 컴파일 단계에서 널 포인터 역참조(CWE‑476) 가 발생합니다. 이는 Rust의 안전 보장을 우회하고 데이터베이스 프로세스가 세그멘테이션 폴트로 종료되게 합니다.
취약점 세부 정보
- 구성 요소: QuickJS /
rquickjs - 공격 벡터: 네트워크(인증 필요)
- 영향: 프로세스 충돌(서비스 거부)
- 익스플로잇 상태: 개념 증명(Proof‑of‑Concept) 제공
문제는 QuickJS가 컴파일 중 거대한 문자열 리터럴을 처리하는 방식에 있습니다. 공격자는 거대한 문자열을 생성하고 이를 JavaScript 엔진에 전달하는 맞춤형 SurrealQL 쿼리를 제출함으로써 즉시 충돌을 일으킬 수 있습니다.
영향을 받는 버전
| 제품 | 영향을 받는 버전 |
|---|---|
SurrealDB Server (rquickjs < 0.11.0 사용) | 2026‑02‑02 이전 모든 빌드 |
| SurrealDB Embedded (Rust crate) | rquickjs < 0.11.0에 의존하는 버전들 |
해결 방안
의존성 업데이트
# Cargo.toml
dependencies:
- rquickjs = "0.6"
+ rquickjs = "0.11.0"
rquickjs≥ 0.11.0을 포함하는 버전으로 SurrealDB를 업그레이드합니다.- 내장 스크립팅이 필요하지 않다면 비활성화합니다.
- 실행 엔진에 도달하기 전에 과도하게 큰 문자열 리터럴을 차단하도록 쿼리 분석을 구현합니다.
운영 단계
- 현재 버전 확인
surreal version - 최신 Docker 이미지 가져오기
docker pull surrealdb/surrealdb:latest - 데이터베이스 인스턴스 재시작
- 수정 확인 – 테스트 환경에서 큰 문자열을 포함한 함수를 정의해 보세요. 이제 충돌 대신 오류가 반환되어야 합니다.
참고 자료
- GHSA 권고: GHSA-XX7M-69FF-9CRP
- CWE‑476: 널 포인터 역참조
전체 보고서는 권고 웹사이트에서 인터랙티브 다이어그램 및 완전한 익스플로잇 분석과 함께 확인할 수 있습니다.