🇰🇷 한글 설명
CTI-Transmute의 변환 그래프 시각화 과정에서 저장형 XSS 취약점이 발견되었습니다. 공격자가 조작한 MISP 또는 STIX 데이터가 노드 라벨, 속성, JSON 출력 기능 등을 통해 HTML 파싱 싱크로 전달되어 악성 스크립트가 실행될 수 있습니다.
💡 쉬운 설명
해커가 조작한 데이터를 시스템에 저장하면, 그래프를 보는 사용자의 브라우저에서 악성 코드가 자동으로 실행될 수 있는 보안 결함입니다. 그래프의 이름이나 속성 값에 숨겨진 코드가 포함되어 사용자의 정보를 탈취할 수 있습니다.
🇺🇸 원문 (English)
CTI-Transmute is affected by a stored cross-site scripting (XSS) vulnerability in the conversion graph used to visualise converted MISP and STIX content.
Attacker-controlled values originating from converted CTI data were passed to multiple HTML-parsing sinks in the graph user interface without sufficient neutralisation. In particular, node labels, node sublabels, edge labels, node properties, edge properties, and node types could contain crafted HTML or JavaScript content.
The Pivotick graph library renders some of these values through HTML-parsing operations. Consequently, a malicious value such as an HTML element containing an event handler could be interpreted as markup rather than displayed as plain text. The first remediation explicitly notes that Pivotick rendered node and edge labels as HTML and therefore introduced escaping before data was handed to the graph renderer.
A separate vulnerable sink was present in the Open raw JSON functionality. The raw object associated with a graph node was inserted into a new document using document.write() and an interpolated HTML string. Crafted JSON content could therefore break out of the intended <pre> element and inject executable markup. The fix replaced this construction with DOM APIs and assigns the JSON using textContent.
The initial correction did not cover all Pivotick rendering paths. A subsequent patch addressed additional XSS vectors in the graph properties panel. Values derived from the original CTI object—including property names, property values, hash algorithm names, child attributes, edge properties, and STIX object types—could still reach Pivotick's HTML resolver. According to the patch, Pivotick's tryResolveHTMLElement processes string values using template.innerHTML, allowing malicious markup to execute when a graph node is hovered over or selected.
The complete remediation therefore:
* HTML-escapes node labels, node sublabels, and edge labels before they are passed to Pivotick.
* Restricts graph node type values to a safe identifier character set.
* Wraps node and edge property values in DOM elements populated through textContent, preventing Pivotick from treating attacker-controlled strings as HTML.
* Replaces the raw-JSON popup's interpolated document.write() with DOM construction and textContent.
📍 영향받는 시스템
CTI-Transmute (Pivotick graph library를 사용하는 버전)
⚔️ 공격 벡터
조작된 CTI 데이터(MISP/STIX)를 통해 노드 라벨, 속성 또는 JSON 출력 기능에 악성 HTML/JavaScript 삽입
🛡️ 대응 방법
노드/에지 라벨의 HTML 이스케이프 처리, 노드 타입 문자열 제한, DOM API 및 textContent를 사용한 안전한 데이터 렌더링 적용
🔧 검증 코드
명령어 결과에서 Pivotick의 tryResolveHTMLElement가 template.innerHTML을 사용하여 문자열을 처리하는 코드가 발견되면 취약한 상태입니다.
grep -r "template.innerHTML" /path/to/cti-transmute/src/ 2>/dev/null