🇰🇷 한글 설명
Roxy-WI의 로그 뷰어 기능에서 사용자 입력을 적절히 이스케이프하지 않고 HTML로 직접 삽입하여 저장된 XSS 취약점이 존재합니다. 공격자가 HAProxy 또는 Nginx 접근 로그에 악성 스크립트를 주입하면, 관리자가 로그를 조회할 때 스크립트가 실행됩니다.
💡 쉬운 설명
웹 관리 도구의 로그 화면에서 악성 코드가 실행될 수 있는 보안 구멍이 있습니다. 공격자가 서버 로그에 해로운 스크립트를 넣으면, 관리자가 로그를 볼 때 그 코드가 작동하여 시스템이 위험해집니다.
🇺🇸 원문 (English)
Roxy-WI is a web interface for managing Haproxy, Nginx, Apache and Keepalived servers. In versions 8.2.6.4 and prior, wrap_line (app/modules/common/common.py:181-186) and highlight_word (app/modules/common/common.py:188-192) build raw HTML by string concatenation with no escaping. The frontend (app/static/js/script.js, log-viewer paths) uses .html(data) / .append(data) to inject the response body. Anyone able to write a line into a managed HAProxy/Nginx access log (i.e. anyone who can send an HTTP request to the public LB) can land an <svg/onload=…> payload that executes when a Roxy-WI admin opens the log viewer. At time of publication, there are no publicly available patches.
📍 영향받는 시스템
Roxy-WI version <= 8.2.6.4
⚔️ 공격 벡터
공격자가 대상 서버의 접근 로그에 악성 스크립트를 기록한 후, Roxy-WI 관리자가 해당 로그를 조회하도록 유도
🛡️ 대응 방법
공급사에서 제공하는 패치가 출시될 때까지 대기하거나, 입력값에 대한 HTML 이스케이핑 처리를 적용한 자체 수정 버전을 사용
🔧 검증 코드
명령어 실행 시 escape 함수 호출 없이 문자열 연결만 수행하는 코드가 출력되면 취약한 버전으로 판단
grep -r 'wrap_line\|highlight_word' /path/to/roxy-wi/app/modules/common/common.py | grep -v 'escape'