🇰🇷 한글 설명
WordPress의 All-In-One Security (AIOS) 플러그인 5.4.7 이하 버전에서 저장형 XSS 취약점이 발견되었습니다. 공격자가 REST API 요청 경로에 악성 스크립트를 삽입하면, 관리자가 디버그 로그 페이지를 확인할 때 해당 스크립트가 실행되어 사이트 권한을 탈취할 수 있습니다.
💡 쉬운 설명
해커가 특수한 주소를 통해 몰래 악성 코드를 웹사이트 데이터베이스에 저장할 수 있습니다. 관리자가 로그를 확인하는 순간 이 코드가 실행되어 관리자 계정을 해킹당할 위험이 있습니다.
🇺🇸 원문 (English)
The All-In-One Security (AIOS) – Security and Firewall plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to and including 5.4.7. This is due to insufficient input sanitization in the get_rest_route() function and missing output escaping in the column_default() method of the debug log list table. When the 'Disable REST API for non-logged in users' feature (aiowps_disallow_unauthorized_rest_requests) is enabled alongside debug logging (aiowps_enable_debug), an unauthenticated attacker can embed arbitrary HTML or JavaScript in the REST request path. The path is retrieved via urldecode($_SERVER['REQUEST_URI']), which decodes URL-encoded payloads into literal HTML characters. This decoded, unsanitized value is concatenated directly into a debug log message and stored in the database. When an administrator navigates to the AIOS Dashboard Debug Logs page, the column_default() method returns the raw database value without escaping, and the parent list table echoes it directly, causing JavaScript execution in the administrator's browser session. This makes it possible for unauthenticated attackers to inject arbitrary web scripts that execute when an administrator views the debug log page, enabling nonce theft, privileged AJAX/REST actions, and potential full site compromise.
📍 영향받는 시스템
All-In-One Security (AIOS) WordPress plugin versions up to and including 5.4.7
⚔️ 공격 벡터
인증되지 않은 공격자가 URL 인코딩된 페이로드를 REST API 요청 경로에 포함하여 전송
🛡️ 대응 방법
AIOS 플러그인을 최신 버전으로 업데이트하거나, 디버그 로그 기능을 비활성화하십시오.
🔧 검증 코드
출력된 플러그인 버전이 5.4.7 이하인지 확인하여 취약 여부를 판단합니다.
wp plugin list --status=active | grep -i 'all-in-one-security'