Wie kann ich WP am besten vor einem CSRF-Exploit schützen, wenn ich einen neuen Beitragsentwurf erstelle?
Wenn ich einen neuen Beitrag hinzufüge und als Entwurf speichere, kann ich die Anfrage mit Burp Suite abfangen.
Mit dem Engagement-Tool in Burp Suite kann ich den Wert von ändern Beitragstitel und fügen Sie die URL wieder in den Browser ein, der eine erstellt Neu Entwurf mit dem geänderten Beitragstitel.
Wie kann ich mich dagegen absichern?
Prost
WordPress bietet bereits einen CSRF-Schutzmechanismus durch die Verwendung einer Nonce. Beim Erstellen eines neuen Beitrags wird eine neue eindeutige Nonce erstellt. Diese Nonce ist erforderlich und muss zusammen mit den restlichen POST-Daten übermittelt werden, damit der Beitrag als Entwurf gespeichert oder veröffentlicht werden kann. Wenn die Nonce nicht vorhanden oder ungültig ist, wird die Anforderung zurückgewiesen. (Getestet mit WordPress v4.9.8)
In Ihren Tests konnten Sie den Entwurf ändern, weil Sie die korrekte Nonce mit Burp übermittelt haben, aber bei einem CSRF-Angriff wäre dieser Wert unbekannt. Burp ist ein abfangender Proxy, also haben Sie praktisch a ausgeführt MITM Angriff auf Ihren eigenen HTTP-Verkehr. Wenn Sie sich Sorgen über MITM-Angriffe machen, sollten Sie HTTPS verwenden. Natürlich könnte ein Angreifer immer noch Ihren Netzwerkverkehr abfangen, aber alle Daten wären verschlüsselt.
Ich würde also nicht sagen, dass dies ein CSRF-Exploit ist, sondern ein MITM-Exploit. Sie können Ihre WordPress-Installation vor den meisten öffentlichen Exploits schützen, indem Sie Ihre WordPress-Version, Plugins und Themes auf dem neuesten Stand halten, und Sie können auch viele sicherheitsrelevante Plugins darin finden https://wordpress.org/plugins/tags/security/.
Ich denke, das beste Tool für Sicherheitstests auf WordPress ist WPScan. Es verfügt über eine riesige Datenbank mit Schwachstellen und kann mögliche Exploits erkennen und Benutzer, Version und Plugins auflisten. WPScan ist hauptsächlich ein Recon-Tool, aber wir können testen, ob die gemeldeten Schwachstellen mit Metasploit oder ausnutzbar sind Wpxf, ein weniger bekanntes, aber leistungsstarkes Tool, das auf die Ausbeutung von WordPress spezialisiert ist. Beachten Sie, dass diese Tools nur öffentliche Exploits erkennen und ausnutzen können. Wenn Sie neue Schwachstellen entdecken möchten, können Sie Burp oder ähnliche Scanner verwenden und den WordPress-Quellcode studieren.
Wenn ich die Frage falsch verstanden habe und Sie ein Formular haben, das keine Nonce hat (sagen wir, Sie schreiben ein Plugin), können Sie eine Nonce mit hinzufügen wp_nonce_field
und überprüfen Sie es dann in dem Skript, das das Formular mit empfängt wp_verify_nonce
. Wenn Sie jedoch eine WordPress-Installation haben, die keine Nonce mit ihren Formularen verwendet, sollten Sie nicht versuchen, eine Nonce manuell hinzuzufügen, sondern auf eine neuere Version aktualisieren.
WordPress verwendet keine traditionellen Nonces, sondern bindet sie stattdessen an eine bestimmte Kombination aus Formularaktion und Benutzersitzung und speichert sie für die mehrfache Verwendung über zwei Ticks (standardmäßig jeweils 12 Stunden), was bedeutet, dass sie standardmäßig bis zu einem ganzen Tag gültig sind. und vielleicht wiederholt in diesem Zeitraum verwendetsowie nach einer Verwendung “aufgefrischt” zu werden ihren Zeitraum vollständig zurücksetzen. Dies wird seit einigen Jahren von Sicherheitsexperten als irreführend und unsicher kritisiert, und das WordPress-Kernteam hat seine Haltung mit der Behauptung verteidigt, dass die Anforderung, dass jemand sowohl die Benutzersitzung als auch die tatsächliche Nonce hat, dies zu einer vernachlässigbaren Bedrohung macht , obwohl sowohl ein kompromittierter Host als auch eine Site, die keinen gültigen SSL-Schutz hat, dies ziemlich einfach machen können.
Das zugrunde liegende Problem, auf das Sie stoßen, ist symptomatisch für die Tatsache, dass eine WordPress-Nonce überhaupt keine Nonce ist. Es handelt sich im Wesentlichen um einen Zugriffskontroll-Hash, der wiederholt für kurze Zeit für eine einzelne Formularaktion verwendet wird, und es gibt keinen Mechanismus, um seine einmalige Verwendung sicherzustellen. Aus diesem Grund konnten Sie die Nonce erfolgreich abfangen und wiederverwenden. Zu Ihrer Information, dieses Verhalten kann auch ziemlich einfach in Zed Attack Proxy, Wireshark, Charles Proxy und zahlreichen anderen ähnlichen Dienstprogrammen nachgebildet werden. Burp ist nicht das einzige Werkzeug, das diese Schwäche aufdecken kann.
Sie haben jedoch einige Möglichkeiten, dies zu korrigieren, wenn Sie möchten, aber es ist ziemlich umständlich und nicht besonders einfach zu bewerkstelligen.
Die folgenden Funktionen sind steckbar, was bedeutet, dass Sie sie mit Ihren eigenen überschreiben und auch die Systeminterpretation dessen, was eine Nonce ist, steuern können. Sie müssen Ihr eigenes Nonce-System mit diesen spezifischen Methoden bereitstellen und identische Werte zu den ursprünglich erwarteten zurückgeben, damit Sie die Plugins/Kerncode-Funktionalität nicht beschädigen:
Sie könnten beispielsweise Ihre eigene Nonce-Implementierung bereitstellen, indem Sie eine Unterstützung aus einem Paket wie verwenden elhardoum/nonce-php oder wbswjc/nonceund implementieren Sie es dann durch a benutzerdefiniertes Plugin das die obigen austauschbaren Funktionen überschreibt und sie als Wrapper für Ihre eigene Nonce-Implementierung verwendet, obwohl dies nicht unglaublich einfach ist und eine Menge benutzerdefinierter Logik zur Implementierung erfordern wird.
Sie müssen nicht nur die oben genannten Plug-in-Funktionen überschreiben, sondern auch anrufen apply_filters
ähnlich wie ihre eigene Quelle alle Änderungen, die Plugins vorzunehmen versuchen, die an diese Filter gebunden sind, ordnungsgemäß annullieren und auch einen erwarteten Wert in der zurückgeben exakt gleiches Format wie das Original, damit Sie nicht stören, wie andere Plugins/Designs, die Sie möglicherweise verwenden, sie implementiert haben.
Wenn Sie der Meinung sind, dass ein ausreichendes Risiko besteht oder dass die Daten, die Ihre Website schützt, von ausreichender Bedeutung sind, lohnt sich der Aufwand wahrscheinlich. Wenn Sie nicht mit Finanztransaktionen oder sensiblen Daten umgehen, ordnungsgemäß hinter SSL gesichert sind oder kein besonderes Interesse daran haben, eine benutzerdefinierte Implementierung von Nonces zu schreiben und sie anschließend so zu warten, dass sie die Art und Weise umgeht, wie sie unweigerlich zahlreiche Plugins kaputt macht, die die standardmäßige laxe Implementierung erwarten anwesend sein, dann ist es wahrscheinlich am besten, die Core-Entwickler beim Wort zu nehmen und die Standardeinstellungen zu verwenden, vorausgesetzt, Sie aktualisieren häufig, haben ein starkes Sicherheits-Plugin wie Wordfence oder Sucuri und führen routinemäßig Updates für alle Ihre Plugins/Themes durch.
Als absolutes Minimum, Sie ziemlich viel muss verfügen über SSL, um MITM-Angriffe abzuschwächen, und sollten geeignete Header für die Zugriffskontrolle verwenden, um CSRF abzuschwächen.
Verwenden Sie die kostenlose oder die Vollversion der Burp Suite?
– Benutzer8717003
25. September 2018 um 17:32 Uhr
@magenta Danke für die Antwort, die Vollversion ermöglicht es mir, dieses Problem zu sehen.
– wbdlc
26. September 2018 um 8:06 Uhr
Leider habe ich keinen Zugriff auf die Vollversion von Burp. Können Sie mir aus Neugierde sagen, wo und wie die Exploit-URL in das WordPress-Dokument eingebettet wird.
– Benutzer8717003
26. September 2018 um 23:15 Uhr
Sie sollten die vollständige URL, die Sie getestet haben, angeben, wobei die eigentliche Domain ersetzt wird, es sei denn, Sie sind damit einverstanden, sie zu teilen. Sie könnten die Beitragsdaten filtern und prüfen, ob bereits ein Beitrag mit demselben Titel erstellt wurde, aber ich denke nicht, dass dies eine gute Idee ist, es sei denn, Sie beschränken Beiträge auf die Verwendung eindeutiger Titel. Sie könnten auch die Lebensdauer der Nonce begrenzen, aber WordPress handhabt die Nonce bereits ziemlich gut.
– Sally CJ
1. Oktober 2018 um 16:35 Uhr
@SallyCJ Ich kann die URL nicht teilen, obwohl das Problem auf jeder WP-Installation + Burp Suite repliziert werden kann. Ich kann die Nonce-Lebensdauer nicht einschränken, da bei den Entwürfen keine Nonce verwendet wird. Prost
– wbdlc
2. Oktober 2018 um 7:47 Uhr