WordPress CSRF-Exploit-Entwurfsstatus

Lesezeit: 8 Minuten

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

  • 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

Benutzeravatar von tmadam
tmadam

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.

  • Dies ist nicht ganz korrekt, da WordPress-Nonces nach einmaliger Verwendung nicht ordnungsgemäß abgelaufen sind. Es ist durchaus möglich, eine Nonce abzufangen und standardmäßig bis zu etwa sechs Stunden lang ungehindert für weitere Anfragen zu verwenden. Dies ist seit langem ein bekannter Exploit in der zugrunde liegenden WordPress-Nonce-Implementierung, gegen den sich das Kernteam seit mehreren Jahren hartnäckig weigert.

    – mopsyd

    4. Oktober 2018 um 17:58 Uhr

  • WordPress-Nonces laufen nicht sofort ab, sondern durchlaufen zwei Lebenszyklusphasen und sind an einzelne Formularaktionen gebunden. Jede abgefangene Nonce kann dann verwendet werden, um mehrere Aufrufe derselben Formularaktion zu erfüllen, an die sie gebunden ist, vorausgesetzt, ihre Lebenszyklusschritte wurden nicht beide aufgelöst. Dies bedeutet, dass ein Interceptor, ohne sie explizit ablaufen zu lassen, mindestens einen Aufruf derselben Formularaktion ungehindert und mehrere Aufrufe derselben Formularaktion erhalten kann, wenn die Quelle, die die Nonce generiert hat, sie nicht ablaufen lässt (was bei einer großen Anzahl von Plugins der Fall ist). ‘t, auch wenn sie aktuell sind).

    – mopsyd

    4. Oktober 2018 um 18:02 Uhr

  • @mopsyd Ich stimme zu und danke für die sehr detaillierten Kommentare, aber das würde durch die Verwendung von HTTPS verhindert, das von HSTS erzwungen wird. Es gibt heutzutage keine Entschuldigung dafür, HTTPS nicht zu verwenden.

    – tmadam

    4. Oktober 2018 um 18:13 Uhr


  • @mopsyd Wenn sie die Nonce abfangen können, können sie auch die Cookies erhalten, also denke ich, dass dies eher ein MITM-Angriffsszenario als ein CSRF-Angriff ist. Bitte korrigieren Sie mich, wenn ich falsch liege, aber wir sprechen über eine MITM-Situation, richtig?

    – tmadam

    4. Oktober 2018 um 18:49 Uhr


  • Ich stimme auch zu, aber ich verstehe auch zumindest teilweise ihre Argumentation. Das WordPress-Team hat sich zum Ziel gesetzt, eine eigenständige Plattform zu erstellen, die die meisten Anwendungsfälle angemessen bedienen kann, ohne dass dafür strenge Abhängigkeiten erforderlich sind. Ein sicheres System, das auch leistungsstark ist, würde wahrscheinlich zahlreiche andere Technologien nutzen, die für diejenigen, die nicht besonders technisch versiert sind, unverständlich sind. WordPress ist ein Schweizer Taschenmesser. Es macht eine Menge Dinge, aber nichts davon gut. Ein Schweizer Taschenmesser hat eine Säge, die in Ihre Tasche passt, aber es ist einer Motorsäge immer unterlegen, abgesehen von der Bequemlichkeit.

    – mopsyd

    5. Oktober 2018 um 3:35 Uhr

Benutzeravatar von mopsyd
mopsyd

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.

1390860cookie-checkWordPress CSRF-Exploit-Entwurfsstatus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy