🇰🇷 한글 설명
QuickJS-NG 0.16.0 이전 버전의 quickjs.c 내 js_atomics_store() 함수는 RangeError를 반환할 때 변환된 값을 해제하지 않아 메모리 누수가 발생합니다. 공격자는 버퍼를 분리하거나 축소하는 valueOf를 이용해 Atomics.store를 반복 호출함으로써 힙 메모리를 고갈시켜 서비스 거부(DoS)를 유발할 수 있습니다.
💡 쉬운 설명
자바스크립트를 실행할 수 있는 공격자가 특정 함수를 반복 호출하면, 프로그램이 사용하고 나서 반환하지 않는 메모리가 계속 쌓입니다. 결국 메모리가 가득 차 서비스가 멈추거나 비정상 종료될 수 있습니다.
🇺🇸 원문 (English)
QuickJS-NG before 0.16.0 contains a memory leak vulnerability in js_atomics_store() in quickjs.c that fails to free the converted value when returning a RangeError. Attackers running JavaScript can repeatedly call Atomics.store with a valueOf that detaches or shrinks the buffer to exhaust heap memory and cause denial of service.
📍 영향받는 시스템
QuickJS-NG 0.16.0 미만 버전을 사용하는 모든 시스템 및 애플리케이션
⚔️ 공격 벡터
공격자가 자바스크립트 코드를 실행할 수 있는 환경에서 valueOf로 버퍼를 분리/축소하며 Atomics.store를 반복 호출하여 힙 메모리를 고갈시킵니다.
🛡️ 대응 방법
QuickJS-NG를 0.16.0 이상 버전으로 업데이트합니다.
🔧 검증 코드
출력된 버전이 0.16.0 미만이면 취약하므로 업데이트가 필요하고, 0.16.0 이상이면 패치가 적용된 것입니다. 버전 정보가 없으면 설치 경로와 패키지 관리자를 통해 직접 확인해야 합니다.
qjs --version 2>/dev/null || grep -rn 'QJS_VERSION' /usr/include /usr/local/include 2>/dev/null | head -5