Das WordPress-Plugin TranslatePress macht Websites mehrsprachig und läuft nach Herstellerangaben auf über 400 000 Installationen. Am 14. August erschien Version 3.3.2 — und schloss eine Lücke, die mit 9,8 von 10 Punkten bewertet wurde.
Über sie liessen sich WordPress-Websites vollständig übernehmen: ohne Anmeldung, ohne Zutun eines Mitarbeitenden, mit anschliessend vollen Administratorrechten.
Die Meldung erreicht die Fachpresse erst jetzt. Wer seither nicht aktualisiert hat, steht seit knapp zwei Wochen offen — und selbst wer damals aktualisiert hat, ist inzwischen nicht mehr auf dem aktuellen Stand. Dazu weiter unten mehr.
Was passiert ist
Der Ablauf klingt zunächst absurd, ergibt aber Sinn, wenn man weiss, wie ein Übersetzungs-Plugin arbeitet.
TranslatePress sammelt automatisch alle Zeichenketten einer Website ein, damit sie übersetzt werden können — Beschriftungen, Meldungen, Textbausteine. Diese Sammlung ist eine Standardeinstellung, sie muss niemand einschalten.
Zu den eingesammelten Zeichenketten gehörte auch der Inhalt der Passwort-zurücksetzen-Mail. Und darin steht die Adresse, mit der man ein neues Passwort setzt.
Diese Adresse landete also in der Übersetzungstabelle der Zweitsprache. Und diese Tabelle liess sich über eine öffentlich erreichbare Schnittstelle des Plugins abrufen — ohne Anmeldung.
Damit war der Weg kurz: Zurücksetzen anstossen, die Adresse aus der Übersetzungstabelle auslesen, neues Passwort setzen, anmelden.
Ob es Sie betrifft
Zwei Bedingungen mussten zusammenkommen:
Das automatische Erfassen von Zeichenketten muss aktiv sein. Das ist die Standardeinstellung — hier ist die Antwort für die meisten also ja.
Das Administratorprofil muss auf eine veröffentlichte Zweitsprache eingestellt sein, nicht auf die Grundsprache der Website. Das klingt nach einem Sonderfall, ist aber genau das, was passiert, wenn jemand seine Oberfläche auf Französisch stellt, während die Website deutsch geführt wird.
In der Schweiz ist das kein Randfall. Mehrsprachige Websites sind hier der Normalfall, und Teams, in denen nicht alle dieselbe Sprache bevorzugen, ebenfalls.
Warum 3.3.2 nicht mehr genügt
Beim Nachprüfen für diesen Beitrag zeigte sich etwas, das in keiner der Meldungen steht: Seit dem 14. August sind zwei weitere Versionen erschienen, beide mit Sicherheitskorrekturen.
- 3.3.2, 14. August — die kritische Lücke, um die es hier geht.
- 3.3.3, 18. August — eine weitere Cross-Site-Scripting-Lücke, diesmal im Übersetzungs-Editor.
- 3.3.4, 25. August — noch eine, wieder über Kommentare, wieder ohne Anmeldung ausnutzbar.
Drei Sicherheitsversionen in elf Tagen. Wer am 14. August pflichtbewusst aktualisiert hat, läuft heute wieder mit einer bekannten Lücke.
Das ist keine Kritik am Hersteller — er behebt schnell und benennt die Melder. Es ist ein Hinweis darauf, wie Aktualisierungen im Alltag scheitern: Man aktualisiert, wenn eine Meldung durch die Presse geht, und dann wieder ein halbes Jahr nicht.
Was zu tun ist
Prüfen Sie die Version. In der WordPress-Verwaltung unter *Plugins*. Aktuell ist 3.3.4. Alles vor 3.3.2 ist für die hier beschriebene Übernahme anfällig, alles vor 3.3.4 für eine der beiden späteren Lücken. Die Aktualisierung ist unkritisch und dauert eine Minute.
Sehen Sie die Benutzerliste durch. Nach einer Übernahme legen Angreifer üblicherweise ein zweites Administratorkonto an, um den Zugang zu behalten. Ein Konto, das Sie nicht zuordnen können, ist ein Alarmzeichen.
Setzen Sie die Passwörter der Administratoren neu — jedenfalls dann, wenn die Website zwei Wochen lang mit der alten Version lief und mehrsprachig ist.
Angriffe im grossen Stil sind bisher nicht bekannt. Das ist eine Momentaufnahme; die technische Beschreibung ist inzwischen öffentlich.
Die eigentliche Lehre
Der Fehler ist behoben, das Muster bleibt.
Eine Funktion, die pauschal alles einsammelt, sammelt am Ende auch das ein, was sie nicht soll. Das Plugin hatte keine böse Absicht und keinen exotischen Programmierfehler — es tat genau das, wofür es gebaut wurde: alle Texte erfassen. Nur gehörte einer davon nicht in eine öffentlich abrufbare Tabelle.
Dass es kein Ausrutscher war, zeigt die Änderungsliste des Herstellers. Über die letzten Versionen hinweg wurden sechs Sicherheitskorrekturen vorgenommen, und fünf davon drehen sich um dieselbe Mechanik: die Markierungen, mit denen das Plugin übersetzbare Textstellen kennzeichnet. Einmal in Kommentaren, einmal in der Suche des Übersetzungs-Editors, einmal in den Textbausteinen. Immer derselbe Kern, immer eine andere Stelle, an der er nach aussen durchschlägt.
Das ist typisch für eine Funktion, die überall zugleich greift: Sie hat keine Angriffsfläche, sie *ist* eine.
Denselben Gedanken haben wir gestern an anderer Stelle beschrieben: Bei ChatGPTs neuer Mitschreibefunktion landen die erfassten Daten in unverschlüsselten Dateien im Benutzerverzeichnis — auch dort ist es kein Fehler, sondern die Bauweise.
Die Frage bei jedem Werkzeug, das umfassend erfasst, lautet deshalb nicht nur «was macht es mit den Daten», sondern «wo landen sie, und wer kommt dort heran».
Und noch etwas: Der Weg führte wieder über die Passwort-Wiederherstellung. Warum ausgerechnet diese Funktion so oft betroffen ist, haben wir gestern aufgeschrieben — der Fall hier ist das aktuelle Beispiel dazu, mit Versionsnummer.