🇰🇷 한글 설명
Happy DOM은 그래픽 사용자 인터페이스 없이 동작하는 웹 브라우저의 JavaScript 구현체입니다. 17.0.0부터 21.0.4 이전 버전의 ECMAScript 모듈 컴파일러는 명명된 ESM import 별칭을 검증하지 않고 생성된 구조분해 바인딩에 삽입하며, enableJavaScriptEvaluation이 활성화된 경우 공격자가 조작한 HTML이나 모듈 소스를 통해 Node.js 호스트 프로세스에서 임의 코드가 실행될 수 있습니다. 이는 CVE-2026-33943의 불완전한 수정에 따른 잔여 경로입니다.
💡 쉬운 설명
웹 페이지를 처리하는 Happy DOM 라이브러리의 취약점으로, 악성 모듈 코드가 서버에서 실행될 수 있습니다. 자바스크립트 평가 기능을 켠 경우에만 위험하며 21.0.4 버전으로 업데이트하면 해결됩니다.
🇺🇸 원문 (English)
Happy DOM is a JavaScript implementation of a web browser without its graphical user interface. From 17.0.0 until 21.0.4, packages/happy-dom/src/module/ECMAScriptModuleCompiler.ts accepts a named ESM import alias without validating that it is a JavaScript binding identifier before inserting it into a generated destructuring binding. With enableJavaScriptEvaluation enabled, attacker-controlled HTML or module source can use an invalid alias that becomes a valid default initializer after compilation, causing the generated JavaScript to execute in the Node.js host process. The demonstrated reachable path uses a JSON module import attribute, which prevents the malicious alias from being emitted again in a later ESM circular-import assignment and keeps the generated function syntactically valid. This incomplete fix for CVE-2026-33943 is a distinct residual path because the earlier remediation validated the local export importName path but not the named-import alias. This issue is fixed in version 21.0.4.
📍 영향받는 시스템
Happy DOM 17.0.0 이상 21.0.4 미만을 사용하는 Node.js 애플리케이션
⚔️ 공격 벡터
공격자가 조작한 HTML 또는 모듈 소스에 잘못된 import 별칭을 넣고 JSON 모듈 import 속성을 사용해 Node.js 호스트에서 코드를 실행
🛡️ 대응 방법
happy-dom 패키지를 21.0.4 이상으로 업그레이드하고, 신뢰할 수 없는 입력에 대해 enableJavaScriptEvaluation을 비활성화
🔧 검증 코드
출력된 버전이 21.0.4 이상이면 수정된 버전이며, 21.0.4 미만이거나 결과가 없으면 취약 가능성이 있으니 프로젝트 의존성을 확인해야 합니다.
npm ls happy-dom 2>/dev/null | grep happy-dom