🔍 CVE-2026-71502

0.0
CVSS Score
UNKNOWN
2026-08-08
2026-10-24 15:10
✅ 완료

🇰🇷 한글 설명

CTI-Transmute에서 서버 렌더링된 사용자 데이터 내 Vue 템플릿 구분자가 적절히 중화되지 않아 발생하는 저장형 XSS 취약점입니다. 공격자는 악성 Vue 표현식을 포함한 데이터를 저장하여 다른 사용자의 브라우저에서 임의의 자바스크립트를 실행할 수 있습니다.

💡 쉬운 설명

웹사이트에 악성 코드가 담긴 글을 저장해두면, 다른 사용자가 그 글을 읽을 때 자동으로 해킹 코드가 실행되는 보안 결함입니다. 이를 통해 공격자는 사용자의 개인정보를 훔치거나 계정을 탈취할 수 있습니다.

🇺🇸 원문 (English)

CTI-Transmute contains a stored cross-site scripting vulnerability caused by insufficient neutralization of Vue template expression delimiters in server-rendered user-controlled data. An unauthenticated attacker can create a public conversion whose name or description contains a malicious Vue expression using the application's configured [[ ... ]] delimiters. User profile names may provide an additional injection vector. Although Jinja HTML escaping is applied, the resulting value is subsequently included in a DOM region compiled by Vue. Vue interprets the attacker-controlled value as a template expression rather than ordinary text. By accessing the JavaScript Function constructor from within the expression, an attacker can execute arbitrary JavaScript in the security context of the CTI-Transmute origin. The application's nonce-based Content Security Policy does not prevent exploitation because the Vue runtime compiler requires the unsafe-eval policy exception. The malicious payload is stored by the application and executed whenever another user opens an affected page, such as the public conversion detail page. The victim may be a normal user or an administrator. Successful exploitation could allow the attacker to: * Access data available to the victim through the application. * Extract API keys, tokens, or other sensitive information exposed to the page. * Perform authenticated actions using the victim's session. * Modify conversions or other application data. * Escalate the impact by targeting an administrator. A demonstrated payload can use [].constructor.constructor(...) to obtain the JavaScript Function constructor and execute arbitrary code. The regression tests also show that a short first-stage payload could retrieve an uncapped conversion description and evaluate a larger second-stage payload. The patch addresses the vulnerability by registering a global Jinja finalize hook that inserts a zero-width Unicode word joiner inside every Vue delimiter found in server-rendered values. This prevents Vue from recognizing the values as template expressions while preserving their visible representation.

📍 영향받는 시스템

CTI-Transmute (Vue 템플릿 구분자 설정이 활성화된 버전)

⚔️ 공격 벡터

공개 변환 이름이나 설명에 악성 Vue 표현식([[ ... ]])을 삽입하여 저장한 후 타 사용자가 해당 페이지를 열도록 유도

🛡️ 대응 방법

Jinja finalize hook을 사용하여 Vue 구분자 내부에 제로 너비 유니코드 워드 조이너(ZWJ)를 삽입하는 패치 적용

🔧 검증 코드

응답 데이터 내에 중화되지 않은 [[ ]] 형태의 템플릿 구분자가 포함되어 있다면 취약한 상태입니다.

Shell / Script
curl -s http://<target-system>/api/conversions | grep -E '\[\[.*\].*\]'

💻 영향받는 소프트웨어

IBM WebSphere Application Server