
CVE-2025-10377
Schwachstellentyp: Cross-Site Request Forgery (CSRF)
Betroffene Funktion: sd_toggle_logs()
CVSS v3.1: 4,3 (Medium)
Vector: AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:L/A:N
(Hinweis: Der Wert spiegelt eine unbefugte Zustandsänderung wider, die ein Admin-Opfer und Benutzerinteraktion erfordert.)
Beschreibung der Schwachstelle:
Die Funktion sd_toggle_logs() verarbeitet sensible Vorgänge wie das Aktivieren/Deaktivieren von Seitenzugriffsprotokollen, Fehlerprotokollen und E-Mail-Protokollen. Sie stützt sich jedoch lediglich auf den Parameter $_REQUEST['log_type'] und eine Berechtigungsprüfung (current_user_can( 'manage_options' )), ohne CSRF-Schutz zu implementieren (z. B. check_admin_referer() oder einen Nonce).
Daher kann ein Angreifer einen eingeloggten Administrator dazu verleiten, eine bösartige Seite zu besuchen, die stillschweigend eine manipulierte Anfrage sendet und so unbeabsichtigte Aktivierungs-/Deaktivierungsänderungen an der Seitenprotokollierung verursacht.
Unbefugte Zustandsänderungen für die Funktionen der Seitenprotokollierung (Seitenzugriffsprotokoll, Fehlerprotokoll, E-Mail-Protokoll).
Wenn die Fehlerprotokollierung aktiviert ist, beginnt die Website möglicherweise damit, Anwendungsfehler in einen vom Plugin festgelegten Dateipfad zu schreiben (was die Chance auf betriebliche Informationsweitergabe über Protokolle erhöht), die direkte Auswirkung dieses Problems ist jedoch der Zustandswechsel selbst.
Wenn ein eingeloggter Benutzer mit manage_options die Angreiferseite besucht, wird die entsprechende Protokollierungsfunktion ohne ausdrückliche Zustimmung umgeschaltet.
<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>
Implementieren Sie WordPress-Nonces (check_admin_referer() oder wp_verify_nonce()) zur Validierung von Anfragen.
Beschränken Sie sensible Aktionen ausschließlich auf POST-Anfragen.
Verlassen Sie sich nicht allein auf Berechtigungsprüfungen zum Schutz vor CSRF.
Falls Sie das Problem nicht genau wie im Bericht beschrieben reproduzieren können, sehen Sie sich bitte die folgende Videodemonstration (PoC) für ein klares Reproduktionsszenario an: