DEEP DIVE REPORT

happy-dom import alias 코드 실행(CVE-2026-115895): 확인된 버전과 아직 확인되지 않은 경계

SecurityDesk
• 2026.10.25 • 조회 3

happy-dom의 ESM 컴파일러가 import alias를 충분히 검증하지 않은 채 처리해, 라이브러리를 로드한 호스트에서 임의 JavaScript가 실행될 수 있다는 보고가 GitHub 어드바이저리에 게시되었다. 이 글은 제공된 근거가 실제로 확인하는 범위와 아직 확인하지 못한 경계를 분리하고, 그 경계 안에서만 점검 순서를 제시한다.

개요

개요 인포그래픽
어드바이저리는 문제를 unsanitized import alias leads to host code execution, 즉 검증되지 않은 import alias가 호스트 코드 실행으로 이어진다고 정리한다. 추적 식별자는 CVE-2026-115895다.

  • 문제가 된 ESM 컴파일러는 커밋 7bc831d에서 도입되었다.
  • 어드바이저리는 PoC를 happy-dom 17.0.0, 20.0.0, 20.1.0, 20.14.5에 직접 테스트해 코드 실행을 확인했다고 기재한다.
  • 같은 PoC는 happy-dom 16.8.1에서는 트리거되지 않았다.
  • 수정은 풀 리퀘스트 #2537로 진행되었다. 이 PR의 제목은 Fixed a code injection vulnerability in the ESM compiler이고, 제공된 기록에 따르면 2026년 10월 20일에 병합되었다.

영향 범위

확인된 영향 범위는 어드바이저리가 PoC로 직접 테스트한 버전이다.

  • happy-dom 17.0.0
  • happy-dom 20.0.0
  • happy-dom 20.1.0
  • happy-dom 20.14.5

동일한 PoC가 트리거되지 않은 버전으로 16.8.1이 명시된다.

확인되지 않은 버전 경계

어드바이저리는 17.0.0과 20.14.5 사이에 있는 다른 버전들이 취약한지 명시하지 않는다. 따라서 그 구간의 릴리스는 취약 확정 상태가 아니라 조건부 점검 대상으로 다루는 편이 안전하다. ESM 컴파일러가 커밋 7bc831d에서 도입되었다는 기재는, 그 이후 릴리스를 점검 목록에 올리는 근거로 쓸 수 있다.

어떤 환경에서 문제가 될 수 있는가

어드바이저리가 확인하는 결과는 라이브러리를 로드한 호스트 프로세스에서의 코드 실행이다. 테스트 러너나 빌드 머신처럼 개발 도구 체인의 권한을 상속받은 환경에서 이 결과가 발생하면, 그 환경이 보유한 소스·토큰 접근 권한이 함께 위험 대상이 될 수 있다는 해석이 가능하다.

다만 어드바이저리는 import alias 검증 부재와 그 결과만 설명할 뿐, 어떤 입력 경로가 그 경계에 도달하는지는 명시하지 않는다. 따라서 외부 스크립트나 서드파티 웹 페이지 마크업을 평가하는 워크로드가 특히 위험하다는 판단은 확인된 사실이 아니라, 각 환경이 자신의 입력 경로를 확인할 때까지 보류해야 할 조건으로 다룬다. 반대로 신뢰된 자체 코드만 평가하는 환경에서는 실제 악용 경로가 제한적일 수 있다는 해석도 같은 근거 위에서 성립한다.

기술적 분석

문제의 출발점은 alias 처리다. ESM 컴파일러가 import alias를 검증 없이 처리하는 지점이 코드 주입의 진입점이 되고, 주입된 코드는 컴파일러를 호출한 호스트의 실행 결과로 나타난다. 피해 지점이 라이브러리 내부가 아니라 호스트 경계라는 점이, 이 문제를 단순한 파싱 오류보다 무겁게 만든다.

재현 상태

  • 어드바이저리의 PoC는 happy-dom 17.0.0, 20.0.0, 20.1.0, 20.14.5에서 직접 트리거되었다.
  • 같은 PoC는 happy-dom 16.8.1에서는 트리거되지 않았다.
  • 어드바이저리에 기재된 PoC의 공개 코드와 야생 악용 증거는 조사 범위에서 확인되지 않았다.
  • CISA KEV 등재 여부도 확인되지 않았다.

PoC 코드가 공개되지 않았다는 사실은 위험도를 낮추지 않는다. 어드바이저리 스스로 PoC로 코드 실행을 재현했다고 기록하고 있으므로, 재현 가능성은 입증된 상태로 보는 것이 합리적이다. 동시에 실제 공격 캠페인이 관측된 것은 아니므로, 이 문제를 이미 악용 중인 사건이 아니라 개발 도구 체인에서 제거해야 할 코드 실행 결함으로 취급해야 한다.

이 분석의 한계

  • 17.0.0과 20.14.5 사이 나머지 버전의 취약 여부는 어드바이저리가 명시하지 않아, 패치 대상 목록을 좁힐 수 없다.
  • 호스트 코드 실행의 구체적 세부, 예를 들어 샌드박스 우회 조건이나 파일 시스템 접근 범위에 대한 기술 분석은 제공된 증거에 포함되지 않았다.
  • 제공된 릴리스 인용은 v21.0.4 페이지의 URL만 담고 있어, PR #2537의 수정이 어떤 릴리스에 포함됐는지는 제공된 인용만으로는 확인되지 않는다.
  • 구체적인 IOC나 로그 지표가 증거에 없어, 탐지·완화에 대한 구체 지침은 이 글의 근거 범위 밖에 있다.

대응 방안

배포 버전 대조

가장 먼저 할 일은 자신의 배포가 어드바이저리가 PoC로 확인한 버전, 즉 17.0.0, 20.0.0, 20.1.0, 20.14.5 중 하나인지 확인하는 것이다. package.json과 lockfile에 적힌 happy-dom 버전을 어드바이저리의 버전 기재와 직접 대조한다. 그 구간의 다른 버전이라면 버전 경계가 확인되지 않았다는 전제 아래 조건부 점검 대상으로 올린다.

수정 반영 여부 확인

제공된 기록이 확인해 주는 수정 사실은 PR #2537의 제목과 2026년 10월 20일 병합이다. 따라서 각 프로젝트는 자신의 배포에 이 수정이 들어 있는지 릴리스 정보와 체인지로그에서 확인해야 한다. 어떤 릴리스부터 수정이 적용되는지는 제공된 인용으로 확정되지 않으므로, 이 글은 특정 버전을 수정 버전으로 단정하지 않는다.

근거가 닿지 않는 영역

워크로드 중단·격리, 전용 컨테이너나 최소 권한 실행, SBOM·자동 갱신 정책, 자식 프로세스·네트워크·설정 변경을 보는 로그 점검 같은 운영 지침은 제공된 어드바이저리 인용이 뒷받침하지 않는다. 이 글은 그런 지침을 권고하지 않으며, 그런 조치가 필요한 조직은 어드바이저리와 벤더 릴리스 정보를 추가 확인한 뒤 판단해야 한다.

참고자료

함께 읽으면 좋은 글

본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

로그인

아직 댓글이 없습니다.

첫 번째 댓글을 작성해보세요!

IT 도구 서랍

→ Unix: 2025-01-15T09:30:00
→ 날짜: 1736934600

→ ASCII: ABC
→ 문자: 65 66 67

ASCII 코드표 — 클릭하면 입력란에 추가

DecHex약어설명
DecHex문자
DecHex문자

→ 유니코드: 홍길동
→ 문자: \ud64d\uae38\ub3d9