🇰🇷 한글 설명
WordPress의 Trafft 예약 시스템 플러그인 1.0.17 이하 버전에서 저장형 XSS 취약점이 발견되었습니다. 에이전시 모드에서 권한 확인 없이 AJAX 액션을 통해 예약 웹사이트 URL 설정을 변경할 수 있어, 공격자가 악성 스크립트를 삽입할 수 있습니다.
💡 쉬운 설명
로그인 권한이 있는 사용자가 예약 사이트 주소를 몰래 바꿔치기하여, 방문자의 브라우저에서 악성 코드가 실행되게 만들 수 있는 문제입니다. 이를 통해 관리자의 정보를 훔치거나 사이트를 변조할 수 있습니다.
🇺🇸 원문 (English)
The Booking System Trafft plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the `bookingWebsiteUrl` setting in all versions up to, and including, 1.0.17 due to a missing capability check on the `set_options` AJAX action when the plugin is operating in agency mode. The `trafftSetOptions()` handler verifies a nonce that is exposed to any authenticated user (it is printed inline on every admin page, including profile.php) but performs no capability check before calling `update_option('trafft_option', ['bookingWebsiteUrl' => ...])`. This setting is then used by `trafftAdminAssets()` to enqueue `<bookingWebsiteUrl>/embed.js` as a script on every front-end page that renders the booking shortcode. This makes it possible for authenticated attackers, with Subscriber-level access and above, to point the embed-script URL at an attacker-controlled origin and execute arbitrary JavaScript in the browser of every site visitor (including admins).
📍 영향받는 시스템
WordPress Trafft plugin (버전 1.0.17 및 그 이하 모든 버전)
⚔️ 공격 벡터
인증된 사용자(구독자 권한 이상)가 권한 검증이 누락된 AJAX 요청을 통해 bookingWebsiteUrl 설정을 악성 URL로 변경
🛡️ 대응 방법
Trafft 플러그인을 최신 버전으로 업데이트하거나, 권한 확인 로직이 포함된 패치를 적용하십시오.
🔧 검증 코드
출력된 플러그인 버전이 1.0.17 이하인지 확인하여 취약 여부를 판단합니다.
wp plugin list --status=active | grep -i 'trafft' && wp plugin list --all | grep -E 'trafft' | awk '{print $2 " " $3}'