🇰🇷 한글 설명
WordPress의 Passeum Ticketing 플러그인 1.0 이하 버전에서 저장형 XSS 취약점이 발견되었습니다. 관리자 권한을 가진 공격자가 shop_name 설정을 악성 URL로 변경하면, 해당 플러그인이 포함된 모든 페이지에서 외부 스크립트가 실행될 수 있습니다. 다만, 관리자는 이미 unfiltered_html 권한을 가지고 있어 단일 사이트 설치 환경에는 영향을 미치지 않습니다.
💡 쉬운 설명
관리자 권한을 탈취한 해커가 플러그인 설정에 가짜 주소를 입력하여 웹사이트 방문자들에게 악성 코드를 실행시킬 수 있는 문제입니다. 이 코드는 사이트의 모든 페이지에서 작동하여 방문자의 정보를 훔칠 위험이 있습니다.
🇺🇸 원문 (English)
The Passeum Ticketing plugin for WordPress is vulnerable to Stored Cross-Site Scripting in all versions up to, and including, 1.0. This is due to the `get_shop_url()` method returning the `shop_name` setting value without sanitization when it begins with "http", combined with insufficient validation in the `validate_shop_name()` function which only checks for empty values and string type. This makes it possible for authenticated attackers, with Administrator-level access and above, to inject arbitrary external scripts by setting the `shop_name` to an attacker-controlled URL (e.g., `https://attacker.com`), which causes the plugin to enqueue external JavaScript and CSS from the attacker-controlled domain via `wp_register_script()` and `wp_register_style()`. The injected scripts execute on every frontend page containing any Passeum Ticketing shortcode, affecting all site visitors. Please note that this does not affect single-site installations as administrators already have the `unfiltered_html` capability.
📍 영향받는 시스템
Passeum Ticketing plugin for WordPress (version 1.0 and below)
⚔️ 공격 벡터
관리자 권한을 이용해 shop_name 설정값에 악성 외부 URL을 삽입하여 스크립트를 로드함
🛡️ 대응 방법
플러그인을 최신 버전으로 업데이트하거나, shop_name 설정값에 대한 입력값 검증 로직을 강화해야 함
🔧 검증 코드
명령어 결과에 해당 플러그인 이름과 1.0 이하의 버전이 출력되면 취약한 상태임
wp plugin list --name=passeum-ticketing --format=csv | grep -E 'passeum-ticketing,1\.[0-9]'