
PoC und Abhilfe für CVE-2019-9787 (WordPress XSS/CSRF/RCE). Zeigt Bereinigungskorrekturen, HttpOnly-Cookies und hashbasierte CSRF-Abwehr mit Codeänderungen.
Beheben Sie den Logikfehler im Bereinigungsprozess für Administratoren.
Fügen Sie die beiden Zeilen hinzu in /wp-admin/includes/ajax-actions.php und /wp-includes/comment.php (Details im Bericht)
remove_filter( 'pre_comment_content', 'wp_filter_post_kses' );
add_filter( 'pre_comment_content', 'wp_filter_kses' );
http-only
Für von PHP verwaltete Session-Cookies wird das Flag entweder dauerhaft in der php.ini (PHP-Handbuch zu HttpOnly) über den Parameter gesetzt:
session.cookie_httponly = True
hash-basierte Verteidigung
CSRF-Validierungstoken wurden in WordPress nicht implementiert, da dies die Trackback- und Pingback-Funktionen von WordPress behindern würde. Der Server kann illegale CSRF-Anfragen nicht von legitimen PINGBACK/TRACEBACK-Anfragen unterscheiden. WordPress akzeptiert automatisch Kommentare ohne korrektes CSRF-Token als PINFBACK- und TRACEBACK-Anfragen und filtert diesen Kommentar mit einem Whitelist-Filter.
Zur Verteidigung dieser CSRF-Sicherheitslücke fügen wir ein neues Feld im Formular namens 'hashnonce' hinzu, um zu überprüfen, dass der Kommentar vom Administrator gesendet wurde. Der Administrator signiert einen Wert des Kommentarfeldes mit seinem Cookie.
Die Signatur des Wertes des Kommentarfeldes verwendet MD5 zur Generierung des Hashwerts (siehe Grafik).
Wenn der Administrator versucht, PINFBACK und TRACEBACK zu übernehmen und _wp_unfiltered_html nicht bereitgestellt werden kann, verwenden wir wp_verify_hashNonce. Wenn die Validierung fehlschlägt, wird ein Fehler gemeldet. Auch wenn die Validierung erfolgreich ist, wurde der Logikfehler korrigiert und 'wp_filter_kses' wird zum Filtern von Kommentaren verwendet.
Geänderter Code:
Die dritte Methode stammt aus https://github.com/sijiahi/Wordpress_cve-2019-9787_defense