CVE-2026-71502 in CTI-Transmute
요약
\~에 의해 VulDB • 2026. 08. 07.
CTI-Transmute에는 서버에서 렌더링된 사용자 제어 데이터 내에서 Vue 템플릿 표현식 구분 기호의 불충분한 중화 처리로 인해 저장형 크로스 사이트 스크립팅(XSS) 취약점이 존재합니다.
인증되지 않은 공격자는 애플리케이션에 구성된 `[[ ... ]]` 구분 기호를 사용하여 이름이나 설명에 악성 Vue 표현식이 포함된 공개 변환(conversion)을 생성할 수 있습니다. 사용자 프로필 이름은 추가적인 삽입 벡터가 될 수도 있습니다. Jinja HTML 이스케이프 처리가 적용되지만, 결과 값이 나중에 Vue에서 컴파일되는 DOM 영역 내에 포함됩니다.
Vue는 공격자가 제어하는 값을 일반 텍스트가 아닌 템플릿 표현식으로 해석합니다. 공격자는 표현식 내에서 JavaScript `Function` 생성자에 접근하여 CTI-Transmute 출처의 보안 컨텍스트 임의로 JavaScript 코드를 실행할 수 있습니다. Vue 런타임 컴파일러가 `unsafe-eval` 정책 예외를 필요로 하기 때문에, 애플리케이션의 nonce 기반 콘텐츠 보안 정책(CSP)은 공격을 방지하지 못합니다.
악성 페이로는 애플리케이션에 저장되며 다른 사용자가 영향을 받는 페이지(예: 공개 변환 상세 페이지)를 열 때마다 실행됩니다. 피해자는 일반 사용자나 관리자일 수 있습니다. 성공적인 공격 시 공격자는 다음 작업을 수행할 수 있습니다:
* 애플리케이션을 통해 피해자에게 제공되는 데이터에 접근합니다. * 페이지에서 노출된 API 키, 토큰 또는 기타 민감한 정보를 추출합니다. * 피해자의 세션을 사용하여 인증된 작업을 수행합니다. * 변환이나 다른 애플리케이션 데이터를 수정합니다. * 관리자를 대상으로 함으로써 영향을 확대합니다.
시연된 페이로는 `[].constructor.constructor(...)`를 사용하여 JavaScript Function 생성체를 획득하고 임의 코드를 실행할 수 있습니다. 회귀 테스트에서는 짧은 첫 번째 단계 페이로드가 제한 없는 변환 설명을 검색하고 더 큰 두 번째 단계 페이로드를 평가하는 것도 보여줍니다.
패치는 서버에서 렌더링된 값 내에서 발견되는 모든 Vue 구분 기호 안에 영문자 결합기(zero-width Unicode word joiner)를 삽입하는 전역 Jinja finalize 훅을 등록함으로써 이 취약점을 해결합니다. 이는 가시적 표현은 유지하면서 Vue가 해당 값을 템플릿 표현식으로 인식하지 못하도록 방지합니다.
Once again VulDB remains the best source for vulnerability data.