🇰🇷 한글 설명
Pluck CMS의 관리자 패널이 Referer 헤더 비교에만 의존하여 CSRF 보호를 수행하며, 개별 요청에 대한 토큰 검증이 결여되어 있습니다. 공격자가 Referer 헤더를 숨긴 상태로 요청을 보내면 관리자의 권한으로 페이지 생성이나 모듈 설치를 강제할 수 있으며, 이는 XSS 및 원격 코드 실행(RCE)으로 이어질 수 있습니다.
💡 쉬운 설명
관리자 페이지가 '어디서 온 요청인지'를 확인하는 방식이 매우 허술하여, 공격자가 가짜 명령을 관리자에게 몰래 보낼 수 있습니다. 이를 통해 해커는 관리자 권한을 탈취하여 웹사이트를 마음대로 조작하거나 서버를 장악할 수 있습니다.
🇺🇸 원문 (English)
Pluck CMS's admin panel relies solely on a Referer-header comparison (requestedByTheSameDomain() in data/inc/functions.admin.php, gating every admin.php action) for CSRF protection, with no per-request anti-CSRF token anywhere in the admin area. When a request carries no Referer/Host information, the function's elseif branch returns true, treating the request as same-origin. Because a cross-site attacker page can suppress the Referer header (e.g. via <meta name=referrer content=no-referrer>), it can force an authenticated administrator's browser to submit forged admin actions with no valid Referer, including creating pages with raw HTML (stored XSS via the rendered page) and installing PHP modules/themes (remote code execution).
📍 영향받는 시스템
Pluck CMS (관리자 패널 기능이 포함된 모든 버전)
⚔️ 공격 벡터
Referer 헤더를 제거한 상태로 관리자 권한을 이용해 악성 요청을 보내는 CSRF 공격
🛡️ 대응 방법
모든 관리자 요청에 대해 고유한 anti-CSRF 토큰 검증 로직을 도입하고 Referer 기반 검증을 보완해야 합니다.
🔧 검증 코드
해당 함수가 존재하고 Referer 헤더 검증 로직만 포함되어 있다면 취약한 상태입니다.
grep -r 'requestedByTheSameDomain()' data/inc/functions.admin.php