🇰🇷 한글 설명
WWBN AVideo 29.0 이전 버전의 YPTSocket 플러그인에는 저장형 DOM XSS 취약점이 존재합니다. 인증되지 않은 공격자가 WebSocket 연결 URL의 page_title 파라미터를 조작하면, 해당 값이 온라인 사용자 디버그 패널을 보는 모든 관리자 브라우저에서 임의의 JavaScript를 실행시킬 수 있습니다. 패치 커밋 8be71e53ccbe9b84b30870db386fb4d2b11e1c16에서 수정되었습니다.
💡 쉬운 설명
익명의 공격자가 특정 방식으로 접속하면, 그 정보가 관리자 화면에 그대로 표시되어 관리자 권한으로 악성 코드가 실행될 수 있습니다. 이 때문에 관리자 계정이 완전히 장악될 위험이 있습니다.
🇺🇸 원문 (English)
WWBN AVideo is an open source video platform. Versions prior to 29.0 contain a stored DOM Cross-Site Scripting vulnerability in the YPTSocket plugin. Any unauthenticated remote attacker can execute arbitrary JavaScript in the authenticated origin of every administrator currently viewing a page that renders the YPTSocket online-users debug panel. plugin/YPTSocket/getWebSocket.json.php issues a signed WebSocket token to any anonymous caller, and MessageSQLiteV2::onOpen at plugin/YPTSocket/MessageSQLiteV2.php lines 91 and 110 reads the attacker-controlled webSocketSelfURI and page_title query parameters from the WebSocket connection URL with no validation. Both values persist into the in-memory SQLite connections table and broadcast inside the users_id_online array sent to every connected client; on the client, plugin/YPTSocket/script.js::updateSocketUserCard interpolates the broadcast page_title into an HTML template literal that is passed to jQuery $.append(html), which parses attacker bytes into live DOM nodes including <img> with inline event handlers. Successful attackers can can read non-HttpOnly cookies and the CSRF token rendered into the admin dashboard, issue authenticated requests to any admin-only endpoint, exfiltrate the admin dashboard DOM, and chain into any admin-context mutation. When the victim is an AVideo administrator, the attacker turns a single anonymous WebSocket connection into full administrative takeover via the admin's own session. This issue has been patched by https://github.com/WWBN/AVideo/commit/8be71e53ccbe9b84b30870db386fb4d2b11e1c16.
📍 영향받는 시스템
WWBN AVideo 29.0 미만 버전 (YPTSocket 플러그인 포함)
⚔️ 공격 벡터
인증 없이 조작된 page_title/webSocketSelfURI 파라미터로 WebSocket에 연결해 관리자 화면에 악성 스크립트를 주입
🛡️ 대응 방법
AVideo를 29.0 이상으로 업그레이드하거나 커밋 8be71e53ccbe9b84b30870db386fb4d2b11e1c16을 적용하고, 필요시 YPTSocket 플러그인을 비활성화
🔧 검증 코드
MessageSQLiteV2.php의 onOpen 부분에서 page_title/webSocketSelfURI 값이 필터링(htmlspecialchars 등) 없이 사용되면 취약한 상태이며, 패치된 버전에서는 이스케이프/검증 코드가 확인되어야 합니다.
grep -rn "page_title" /var/www/html/plugin/YPTSocket/ 2>/dev/null | head -20