happy-dom CVE-2026-115895: import alias 코드 실행 취약점이란?

happy-dom의 ESM 컴파일러가 import alias를 처리하는 과정에서 검증 단계가 누락됐습니다. 그 탓에 라이브러리를 로드한 호스트 환경에서 임의의 JavaScript 코드가 실행될 수 있는 보안 취약점(CVE-2026-115895)이 발견됐습니다. 공격자가 조작된 alias를 심어 호스트 환경에서 임의의 JavaScript 코드를 실행하는 것이 이 취약점의 위협입니다.

CVE-2026-115895 취약점 개요 및 영향

이 취약점은 식별자 CVE-2026-115895로 관리되며, 공식 어드바이저리에서는 이를 “unsanitized import alias leads to host code execution”으로 정의하고 있습니다.

핵심 원인은 happy-dom 내부에 구현된 ESM 컴파일러의 입력 값 검증 부재입니다. ESM 컴파일러가 import alias를 처리할 때 적절한 새니타이징(Sanitization) 과정을 거치지 않다 보니, 라이브러리를 로드해 사용하는 호스트 환경에는 공격자가 의도한 임의의 JavaScript 코드가 실행될 수 있는 경로가 생겼습니다.

취약 버전 및 재현 범위

해당 취약점은 특정 커밋 이후 도입된 ESM 컴파일러에서 발생했습니다. 근거 기록에 따르면 문제가 된 ESM 컴파일러는 커밋 7bc831d에서 도입된 것으로 확인됐습니다.

보안 어드바이저리는 실제 개념 증명(PoC) 테스트를 통해 특정 버전들에서 코드 실행이 가능함을 직접 확인했습니다. 반면 일부 구버전에서는 동일한 PoC가 트리거되지 않아 취약점의 영향을 받지 않는 것으로 나타났습니다.

상세한 버전별 영향도는 다음과 같습니다.

구분 해당 버전 비고
코드 실행 확인 버전 17.0.0, 20.0.0, 20.1.0, 20.14.5 PoC를 통해 임의 코드 실행이 직접 확인됨
트리거되지 않은 버전 16.8.1 동일 PoC 테스트 시 취약점이 트리거되지 않음

다만 주의할 점이 있습니다. 17.0.0 버전부터 20.14.5 버전 사이에 존재하는 다른 버전들의 취약 여부는 어드바이저리가 모두 명시적으로 정의해두지 않았습니다. 이 범위 내 버전을 사용하고 있다면 조건부 점검 대상으로 각별한 주의가 필요합니다.

수정 사항 및 대응 방안

happy-dom 메인테이너는 이 코드 주입 취약점을 해결하기 위해 보안 패치를 진행했습니다. 수정 사항은 “Fixed a code injection vulnerability in the ESM compiler”라는 제목의 풀 리퀘스트(PR) #2537에서 이루어졌습니다.

이 PR은 2026년 10월 20일에 병합(Merged)되면서 공식적으로 수정 조치가 완료됐습니다.

보안 대응 가이드라인

  1. 버전 업데이트: CVE-2026-115895 취약점이 해결된 최신 버전으로 업데이트를 권고합니다. PR #2537이 병합된 이후의 릴리스 버전을 확인해 적용합니다.
  2. 취약 범위 확인: 현재 프로젝트에서 사용 중인 happy-dom 버전이 17.0.0, 20.0.0, 20.1.0, 20.14.5 등에 해당하거나, 커밋 7bc831d 이후의 ESM 컴파일러를 사용하는지 점검하십시오.
  3. 입력 값 검증: 라이브러리 업데이트 전까지는 ESM 컴파일러로 전달되는 import alias 관련 설정이나 입력 값이 외부에서 조작될 가능성이 없는지 검토하고, 신뢰할 수 없는 입력값이 유입되지 않도록 제어합니다.

현재 확인된 정보로는 PR #2537의 병합 사실이 명확하지만, 이 수정 사항이 구체적으로 어떤 릴리스 버전부터 포함되었는지에 대한 세부 버전 명시는 기록되어 있지 않습니다. 사용자는 패치 날짜인 2026년 10월 20일 이후에 배포된 공식 릴리스를 기준으로 업데이트 여부를 판단하면 됩니다.

댓글 남기기