Vor zehn Tagen haben wir über eine schwere Lücke in einem weit verbreiteten WordPress-Plugin berichtet. Dabei ist uns ein Fehler unterlaufen: Wir schrieben, die Ausnutzung brauche ein angemeldetes Konto. Das stimmt nicht. Wir haben den Beitrag korrigiert.
Beim Nachrecherchieren kam etwas zum Vorschein, das über diesen einen Fall hinausgeht — und über dieses eine Plugin.
Der Angreifer brauchte kein Konto, weil es auf fast jeder Website eine Funktion gibt, die ihm keines abverlangt. Sie heisst Trackback, sie stammt aus den frühen 2000er-Jahren, und sie ist vermutlich auch auf Ihrer Website aktiv.
Was Trackbacks sind
In der Frühzeit der Blogs gab es ein Höflichkeitsproblem: Wenn jemand auf einen fremden Beitrag verlinkte, erfuhr der Verlinkte davon nichts.
Die Lösung war eine automatische Meldung von Website zu Website. Verlinkt A auf B, schickt A eine Nachricht an B — und bei B erscheint unter dem Beitrag ein Hinweis, dass jemand darauf Bezug genommen hat. Die offizielle Dokumentation unterscheidet dabei zwei Formen: Trackbacks werden von Hand ausgelöst und senden einen Textauszug mit, Pingbacks laufen automatisch und senden keinen Inhalt.
Das war eine gute Idee für ein Netz, in dem Menschen einander lasen und kommentierten. Von diesem Netz ist wenig übrig. Die Funktion ist geblieben.
Warum das mehr ist als eine überflüssige Altlast
Sehen Sie sich an, was dabei tatsächlich passiert.
Ein Unbekannter schickt Ihrer Website eine Nachricht. Kein Konto, kein Passwort, kein Formular, keine Sicherheitsabfrage. Diese Nachricht enthält eine Adresse und — beim Trackback — einen Text. Beides wird in Ihrer Datenbank gespeichert.
Das ist die einzige Stelle, an der ein Fremder ohne jede Hürde Inhalte in Ihre Datenbank schreiben darf. Kommentare kann man abschalten oder zur Freigabe zurückhalten; darüber denkt jeder einmal nach. Über Trackbacks denkt niemand nach.
Beim Pingback kommt etwas hinzu, das in der offiziellen Dokumentation steht und sich lohnt, zweimal zu lesen: Nach Erhalt der Meldung ruft Ihre Website die genannte Adresse selbst auf, um zu prüfen, ob der Verweis wirklich dort steht. Ein Fremder kann Ihre Website also dazu bringen, eine Adresse seiner Wahl abzurufen. Sie ist damit nicht nur Empfängerin, sondern Handelnde.
Der Fall von letzter Woche
Im Umzugs-Plugin All-in-One WP Migration — über fünf Millionen Installationen — lief der Angriff genau so ab.
Der Angreifer hinterliess an einem beliebigen öffentlichen Beitrag zwei präparierte Trackbacks. Die wurden gespeichert und taten zunächst nichts. Wochenlang, wenn nötig.
Ausgelöst wurden sie erst, als der Betreiber selbst eine Sicherung erstellte und wieder einspielte. Dabei schreibt das Plugin alle Adressen in der Datenbank um — und die eingeschleusten Zeichen wurden dabei zu einer eigenen Datenbankabfrage. Über den Umweg eines öffentlich sichtbaren Kommentars gelangte der Angreifer an einen internen Schlüssel und darüber an die ganze Website.
Man kann das als Fehler des Plugin-Herstellers lesen, und das ist es auch. Man kann es aber auch anders lesen: Ohne die offene Trackback-Funktion hätte der Angreifer seine Fracht gar nicht erst ablegen können.
Der Haken, der keiner ist
Jetzt kommt der Teil, der in kaum einer Anleitung steht — und der den Unterschied macht.
Die Einstellung findet sich unter Einstellungen, Diskussion, ganz oben. Sie heisst sinngemäss «Link-Benachrichtigungen von anderen Blogs (Pingbacks und Trackbacks) erlauben». Der Haken ist gesetzt. Man nimmt ihn heraus, speichert, und hat das Gefühl, die Sache erledigt zu haben.
Sie ist nicht erledigt.
Diese Einstellung steht in der Dokumentation unter der Überschrift «Vorgabe für neue Beiträge», und dort steht ausdrücklich dazu, dass sie für einzelne Beiträge übersteuert werden kann. Auf Deutsch: Sie gilt für alles, was Sie ab jetzt schreiben. Jeder bereits veröffentlichte Beitrag behält, was bei seiner Erstellung galt.
Bei einer Website mit zweihundert Beiträgen aus acht Jahren heisst das: zweihundert offene Türen, unverändert. Und das sind ausgerechnet die Beiträge, die seit Jahren in den Suchmaschinen stehen und die ein Angreifer als Erstes findet.
Was tatsächlich hilft
Drei Schritte, zusammen etwa fünf Minuten.
Erstens die Vorgabe abschalten. Einstellungen, Diskussion, den Haken bei den Link-Benachrichtigungen entfernen, speichern. Damit ist alles Künftige erledigt.
Zweitens — und das ist der Schritt, der übersprungen wird — die bestehenden Beiträge nachziehen. In der Beitragsliste oben die Anzeige auf alle Einträge stellen, per Kopfzeile sämtliche Beiträge auswählen, dann Massenbearbeitung, dort Pings auf «nicht erlauben» setzen und übernehmen. Dasselbe für die Seiten. Das ist unspektakulär und dauert zwei Minuten, aber es ist der eigentliche Vorgang.
Drittens nachsehen, was schon da liegt. Unter den Kommentaren stehen Trackbacks und Pingbacks in derselben Liste. Was dort an Verweisen von Websites steht, die Sie nicht kennen, gehört gelöscht.
Wer es gründlicher möchte, lässt die Schnittstelle, über die Pingbacks hereinkommen, serverseitig sperren. Das gehört in die Hand dessen, der den Server betreut, weil einzelne Plugins und Apps denselben Weg für legitime Zwecke nutzen. Bei den Websites in unserer Wartung ist das Teil der Grundeinrichtung.
Der Punkt dahinter
Es geht hier nicht um Trackbacks. Es geht um eine Sorte Risiko, die sich schlecht anfühlt, weil sie so unscheinbar ist.
Eine Funktion, die niemand mehr braucht, verschwindet nicht von selbst. Sie läuft weiter, verursacht keine Kosten, fällt in keiner Besprechung auf — und wartet darauf, dass irgendwann jemand einen Weg findet, sie zu benutzen. Genau das haben wir beim Umzugs-Plugin beschrieben, das nach dem Umzug jahrelang liegen bleibt. Es ist dasselbe Muster, nur ist es diesmal keine Erweiterung, sondern eine eingebaute Funktion.
Abschalten schlägt absichern. Was nicht läuft, braucht keine Updates, hat keine Lücken und steht in keiner Meldung. Das ist die billigste Sicherheitsmassnahme, die es gibt, und die einzige, die dauerhaft wirkt.
Wenn Sie nicht wissen, was auf Ihrer Website an solchen Altlasten mitläuft: Wir sehen es uns an — Trackbacks, ungenutzte Erweiterungen, alte Konten, offene Schnittstellen. Das ist eine überschaubare Aufgabe mit einem klaren Ergebnis.