🇰🇷 한글 설명
AIL Framework의 사용자 이름 타임라인 기능에서 저장형 XSS 취약점이 발견되었습니다. 채팅이나 포럼에서 가져온 사용자 이름이 적절한 검증 없이 저장된 후, 분석가가 타임라인 항목에 마우스를 올릴 때 D3 라이브러리의 html() 메서드를 통해 악성 스크립트가 실행될 수 있습니다. 이를 통해 공격자는 분석가의 세션을 탈취하거나 데이터를 유출할 수 있습니다.
💡 쉬운 설명
악성 코드가 포함된 사용자 이름을 시스템에 저장한 뒤, 관리자가 해당 이름을 마우스로 가리키기만 해도 해킹 프로그램이 실행될 수 있는 문제입니다. 이를 통해 관리자의 로그인 정보가 털리거나 중요한 데이터가 외부로 빠져나갈 수 있습니다.
🇺🇸 원문 (English)
The AIL Framework's username timeline feature is vulnerable to stored cross-site scripting (XSS). Usernames imported from chats and crawled forums are stored without character restrictions. When an authenticated analyst views the username timeline, the application renders these stored usernames into the DOM using D3's html() method in the tooltip. Because the username value (d.obj) is interpolated directly into an HTML string without sanitization, a crafted username containing HTML event handlers (e.g., <img src=x onerror=alert(1)>) will execute arbitrary JavaScript in the analyst's browser when the analyst hovers over the corresponding timeline entry. The attack requires the victim to be an authenticated analyst with access to the timeline view and to interact with the malicious timeline entry (hover). Successful exploitation can lead to session hijacking, data exfiltration, or unauthorized actions performed within the analyst's authenticated session. The vulnerability resides in the client-side JavaScript file var/www/static/js/d3/timeline_basic.js.
📍 영향받는 시스템
AIL Framework (username timeline feature 사용 시)
⚔️ 공격 벡터
악성 HTML 이벤트 핸들러가 포함된 사용자 이름을 생성하여 타임라인 항목에 마우스를 올리는 방식 (Stored XSS)
🛡️ 대응 방법
var/www/static/js/d3/timeline_basic.js 파일 내에서 d3.html() 대신 d3.text()를 사용하도록 수정하고, 입력 데이터에 대한 서버 측 검증을 강화해야 합니다.
🔧 검증 코드
명령어 결과에 d3.html() 호출 코드가 포함되어 있다면 해당 취약점이 존재하는 것으로 판단합니다.
grep -r "d3.html()" var/www/static/js/d3/timeline_basic.js