Wordpress_cve-2019-9787_defense
Hinweis
Dies ist ein Projekt von Sijia Zhang (https://github.com/sijiahi) und Bowen Zhou (https://github.com/KonjakZhou)
**Voraussetzung:
1 Angriff nachstellen:
- Wordpress5.0 unter http://localhost/wp-admin/ konfigurieren und installieren;
- Als Admin in Wordpress anmelden und mindestens einen Artikel veröffentlichen;
- mal.html öffnen (unter einer anderen Domain konfiguriert, möglicherweise direkt als Datei im Browser öffnen), Submit-Request anklicken.
- Wenn dies funktioniert, werden Sie zur Artikelseite mit einem "cilick me"-Kommentar weitergeleitet. Sobald Sie mit der Maus darüberfahren, erscheint ein Prompt-Fenster, das den erfolgreichen Angriff anzeigt.
2 Verteidigung:
- Dateien in /wp-includes ersetzen und JS-Skripte in /wp-includes/js hinzufügen.
- Die Mock-Post-Datei in den WP-Bereich verschieben und die Mock-Post-Seite öffnen, um die PINGBACK/TRACEBACK-Funktion zu testen.
- Wenn das funktioniert, werden Sie zur Artikelseite mit einem "legal anchor"-Kommentar weitergeleitet;
- mal.com von einer anderen Domain aus öffnen, CSRF-Angriff testen.
**Geänderter Code:
- comment-template: JS-Skript, erweitert um extract-, calculate- und add-doggyNonce-Skript;
- functions: PHP-Skript, erweitert um extract-Attribut-Skript;
- pluggable: PHP-Skript, erweitert um verify-doggyNonce-Skript;
- comment: PHP-Skript, geänderte Logik zur Verarbeitung der Anfragen.
**Dies ist eine Wiederholung von cve-2019-9787 auf Wordpress und eine hash-basierte Verteidigung.
0 Einführung:
Um Wordpress gegen CVE-2019-9787 zu verteidigen, wird ein neues Feld namens doggyNonce eingeführt.
In Fällen, in denen ein Admin versucht, die PINGBACK-Funktion zu nutzen, und _wp_unfiltered_html nicht bereitgestellt werden kann, bitten wir den Admin, die Attribute seiner hochgeladenen Tags mit seinem Cookie zu signieren. Dadurch können wir CSRF-Angriffe abwehren und die Integrität der hochgeladenen Tag-Attribute sicherstellen.
1 Verteidigung:
Wordpress akzeptiert automatisch Kommentare ohne korrektes CSRF-Token als PINGBACK- und TRACEBACK-Anfrage, filtert diesen Kommentar mit einem Whitelist-Filter, extrahiert das href-Feld und rekonstruiert ein "a-Tag".
Um diese Schwachstelle zu verteidigen, werden zwei Schlüsselpunkte berücksichtigt:
- Der Server kann illegale CSRF-Anfragen nicht von legalen PINGBACK/TRACEBACK-Anfragen unterscheiden.
- CSRF-Angreifer injizieren ihren Code in das href-Feld eines "a Tags"; das Tag-Attribut wird nach dem Filtern verändert.
doggyNonce ist ein Hashwert, der vom Cookie wp-setting-time-$uid und dem hochgeladenen href-Attribut abhängt:
doggyNonce=Hash(*uploaded href attrbute,*cookie)
Es sollte beachtet werden, dass doggyNonce die Rolle der Signatur des Admins für das hochgeladene href-Attribut spielt.
**Besonderer Hinweis
- 'mal.html' dient zur Simulation eines CSRF-Angriffs und sollte daher in einer anderen Domain als Wordpress liegen;
- 'post.html' dient zur Simulation der PINGBACK/TRACEBACK-Funktion und sollte daher in derselben Domain wie WP liegen.