WordPress 7.1.1 schließt Click2Shell-Kette bis zur Remote-Code-Ausführung
KI-generiertes Bild

WordPress 7.1.1 schließt Click2Shell-Kette bis zur Remote-Code-Ausführung

WordPress 7.1.1 schließt Click2Shell, eine Schwachstelle, die einen einzigen Admin-Klick zu einer Remote-Shell auf Websites mit einem verwundbaren Theme verketten konnte.

WordPress 7.1.1 hat eine Schwachstelle behoben, die es einem einzigen Klick eines angemeldeten Administrators ermöglichen konnte, sich in eine funktionierende Remote-Shell auf dem Server zu verwandeln, so eine von Patchstack veröffentlichte Analyse. Die Schwachstelle mit dem Namen Click2Shell wurde verantwortungsvoll von Paulos Yibelo von pwn.ai gemeldet und im WordPress-Release vom 17. September geschlossen; Patchstacks Bericht des Sicherheitsforschers Chazz Wolcott wurde am 18. September veröffentlicht. Patchstack erklärt, dass seine eigenen Kunden vor der Schwachstelle geschützt sind, und empfiehlt allen anderen, sofort auf die neueste verfügbare Version von WordPress zu aktualisieren.

Der Fehler ist weniger ein einzelner Fehler als eine Kette. Patchstack beschreibt ihn als eine Cross-Site-Request-Forgery (CSRF, ein Trick, bei dem der angemeldete Browser eines Opfers eine Anfrage sendet, die das Opfer nie beabsichtigt hat) kombiniert mit einer Selector-Injection (zusätzliche Zeichen, die in den Code eingefügt werden, der Elemente auf einer Seite sucht, sodass er etwas anderes findet als beabsichtigt). Keine der beiden Schwächen ist für sich genommen dramatisch. Verkettet verwandeln sie einen einzigen Klick in Code, der auf dem Server der Website ausgeführt wird.

Der Mechanismus liegt in der Art und Weise, wie WordPress Themes behandelt. Administratoren können ein Theme direkt aus dem WordPress.org-Katalog im Admin-Panel in der Vorschau anzeigen oder installieren, und dieser Ablauf trägt den Slug des Themes, seinen kurzen identifizierenden Namen, in der URL. Laut Patchstack wird derselbe Wert dann von zwei verschiedenen Codeteilen zweimal gelesen, und die beiden sind sich nicht einig, wie er behandelt werden soll. Auf der Serverseite bereinigt die WordPress.org Themes API den Wert und entfernt zusätzliche Zeichen, sodass eine manipulierte Zeichenfolge wie twentytwenty"]> zum Zeitpunkt der API-Antwort wieder zu twentytwenty zusammenfällt. Auf der Frontend-Seite nimmt das JavaScript von wp-admin denselben Rohwert und setzt ihn direkt in eine jQuery-Selektor-Zeichenfolge ein, ohne jede Bereinigung. jQuery ist eine weit verbreitete JavaScript-Bibliothek, die Webseiten hilft, Elemente zu finden und zu ändern. Diese Diskrepanz ist die gesamte Schwachstelle: Ein speziell gestalteter Slug kann die Seite davon überzeugen, dass die Person, die sie ansieht, auf Installieren bei einem völlig unrelated Theme geklickt hat.

Für sich genommen ist ein still installiertes, aber inaktives Theme kein großes Risiko. Wie Patchstack anmerkt, ist ein inaktives Theme oder Plugin ohne Aktivierung in WordPress im Wesentlichen inert. Es gibt einen Moment, in dem ein inaktives Theme tatsächlich ausgeführt wird, und das ist, wenn es im WordPress-Customizer in der Vorschau angezeigt wird. Die vollständige von pwn.ai erstellte Kette nutzte ein echtes Katalog-Theme, Mobile Repair Zone 2.5.4, als zweite Stufe. Zuerst installiert die manipulierte URL das Theme, dann lädt ein Folge-Link den Customizer mit aktivem Mobile Repair Zone. Dadurch wird die functions.php-Datei des Themes ausgeführt und registriert ihre Hooks, einschließlich eines AJAX-Handlers, der eine Plugin-Download-URL ohne Nonce-Prüfung (eine Nonce ist ein Einmalcode, der beweist, dass eine Anfrage aus Ihrer eigenen Sitzung stammt) und ohne jegliche Berechtigungsprüfungen akzeptierte. Wenn dieser Aktion eine URL übergeben wird, die auf eine ZIP-Datei im Besitz des Angreifers zeigt, behandelt WordPress das bösartige Archiv als gewöhnliches Plugin, lädt es herunter und führt es auf dem Server aus. Das ist der Schritt, der das Ergebnis von einem inaktiven Theme, das zu erscheinen scheint, zu einem Angreifer mit einer funktionierenden Shell ändert.

Patchstack stellt ausdrücklich klar, dass dies kein Drive-by-Angriff ist, und die Unterscheidung ist wichtig. Kein Angreiferkonto nötig und Remote-Code-Ausführung hintereinander zu lesen, kann den Eindruck erwecken, als könnte jeder Besucher ihn auslösen, aber der Angreifer muss einen Website-Administrator dazu bringen, eine manipulierte URL zu laden. Ein normaler Besucher kann ihn nicht auslösen, und ein privilegierteres Konto wie ein Autor oder Redakteur auch nicht. Es gibt zwei Wege. Der erste ist ein gezielter Phishing-Angriff gegen einen bestimmten Administrator, der angemeldet ist und mit dem bösartigen Link interagiert. Der zweite ist eine bereits auf der Website vorhandene XSS-Injection (Cross-Site Scripting, eine Schwachstelle, die es einem Angreifer ermöglicht, eigenen Code in eine Seite einzufügen, wo er im Browser jedes Betrachters ausgeführt wird), die die Anfrage automatisch auslöst, wenn ein Administrator die Seite ansieht. Dieser zweite Weg setzt voraus, dass der Angreifer bereits einen Fuß in der Tür hatte, was bedeutet, dass eine andere Komponente zuerst für XSS anfällig sein musste, und Click2Shell wäre nur eine von mehreren Möglichkeiten, sie auszunutzen. Das vollständige Ergebnis der Remote-Code-Ausführung hängt auch davon ab, dass die Zielwebsite ein verwundbares Theme installieren kann. Wo neue Themes nicht installiert werden können, zum Beispiel wenn DISALLOW_FILE_MODS aktiviert ist, könnte die Injection immer noch auftreten, aber ihre Auswirkung erstreckt sich nicht auf die Installation neuer Themes oder Plugins auf der Website.

WordPress 7.1.1 schließt das Problem mit zwei Maßnahmen. Es beschränkt den verwundbaren Selektor auf echte .theme-Elemente im Dokument, und es führt den Slug durch $.escapeSelector(), bevor der Wert in die Selektor-Zeichenfolge gelangt. Die Daten werden jetzt als wörtlicher Text und nicht mehr als strukturelle Daten behandelt, sodass sie nicht mehr selbst auf Schaltflächen klicken können. Patchstacks weiterreichender Punkt ist, dass die Lektion weniger mit diesem einen Selektor zu tun hat als mit der Form des Fehlers: Wenn ein URL-Parameter im Backend und im Frontend verarbeitet wird, muss er auf beiden Seiten bereinigt werden, und dieses Muster kann überall auftreten, wo zwei verschiedene Codeteile dieselbe Eingabe unabhängig voneinander parsen.

Für Website-Betreiber ist die praktische Schlussfolgerung dieselbe wie bei den meisten WordPress-Fixes. Core-Updates sind der Ort, an dem dieser Patch landet, und ein aufgeschobenes Update ist ein Fenster, das offen bleibt. Wo der Alltag des Patchings das Schwierige ist, hält AEU Hosting, unser Managed-WordPress-Hosting-Service, die WordPress-Plattformebene für die von ihm betriebenen Websites instand, und die Details sind unter albhosting.eu aufgeführt. Auch die Gewohnheit bei der Theme-Auswahl ist wichtig: Ein ungenutztes Theme, das installiert bleibt, ist eine weitere Sache, die zur Ausführung gebracht werden kann.

Click2Shell veranschaulicht auch, warum Schweregradbezeichnungen irreführen können. Zwei Schwächen, die jeweils mit einem Schulterzucken abgetan würden, eine Anfrage, die der Browser nicht hätte senden sollen, und eine Zeichenfolge, die hätte escaped werden müssen, werden zu einer serverseitigen Shell, wenn sie kombiniert werden, und für keine der beiden Hälften ist ein Angreiferkonto erforderlich. Die ehrliche Lesart des Patchstack-Berichts ist, dass der Exploit real war, der Fix veröffentlicht ist und die Vorbedingung menschlich ist: Ein Administrator muss klicken, oder etwas anderes auf der Website muss bereits injizierten Code ausliefern.

So schützen Sie sich

  1. Melden Sie sich in Ihrem WordPress-Dashboard an, öffnen Sie den Bildschirm Updates und stellen Sie sicher, dass Sie die neueste Version von WordPress verwenden, 7.1.1 oder später.
  2. Klicken Sie niemals auf einen Link über Ihre Website, der per E-Mail oder Nachricht eintrifft, selbst wenn er von einem Kollegen oder Ihrem Hosting-Unternehmen zu kommen scheint; öffnen Sie Ihre Website stattdessen, indem Sie ihre Adresse s
  3. Bitten Sie die Person, die Ihre Website wartet, oder Ihren Hosting-Anbieter, automatische Updates für WordPress einzuschalten, damit Sicherheitsfixes ankommen, ohne dass sich jemand daran erinnern muss.
  4. Löschen Sie jedes Theme oder Plugin, das Sie nicht aktiv nutzen, denn ein installiertes, aber ungenutztes Theme kann trotzdem aktiviert werden, ohne dass Sie es bemerken.
  5. Installieren Sie Themes und Plugins nur aus dem offiziellen WordPress-Katalog, nicht über Links, die Ihnen zugesandt werden, oder von unbekannten Download-Seiten.
  6. Wenn Ihnen jemand sagt, dass Ihre Website ihm einen seltsamen oder unerwarteten Link gesendet hat, kontaktieren Sie sofort Ihren Hosting-Anbieter, damit er es überprüfen kann.

Begriffe Erklärt

  • CSRF (Cross-Site Request Forgery) Ein Trick, bei dem Ihr bereits angemeldeter Browser eine Anfrage an eine Website sendet, der Sie vertrauen, ohne dass Sie es beabsichtigen.
  • remote code execution Wenn ein Angreifer es schafft, sein eigenes Programm auf Ihrem Server auszuführen, was ihm praktisch die Kontrolle darüber gibt.
  • sanitize Informationen, die in eine Website gelangen, bereinigen, indem Zeichen entfernt oder neutralisiert werden, die ein Computer sonst als Anweisungen lesen könnte.
  • selector injection Zusätzliche Zeichen in den Teil des Codes einer Seite einschleusen, der nachschaut, auf welches Element gehandelt werden soll, sodass er stattdessen auf ein anderes handelt.
  • jQuery Ein weit verbreiteter JavaScript-Baustein, der einer Webseite hilft, Teile von sich selbst zu finden und zu ändern.
  • nonce Ein einmaliger Sicherheitscode, der an eine Anfrage angehängt wird, um zu beweisen, dass sie wirklich aus Ihrer eigenen Sitzung auf der Website stammt.
  • XSS (Cross-Site Scripting) Eine Schwachstelle, die es einem Angreifer ermöglicht, eigenen Code in eine Seite einzufügen, sodass er im Browser jedes Betrachters dieser Seite ausgeführt wird.
  • slug Der kurze Name, der ein Theme oder Plugin in einer Webadresse identifiziert.

Verwandte AEU-Dienste

  • AEU Panel Control-Panel für Managed Hosting