Wenn Sie von mir eine E-Mail mit einem Verweis auf diese Seite erhalten haben, dann deshalb, weil Ihre Website offenbar eine Version von Link Library einsetzt (das WordPress-Plugin von Yannick Lefebvre, das in Ihren Dateien unter /wp-content/plugins/link-library/ liegt), die in den betroffenen Bereich eines bekannten Sicherheitsproblems fällt. Diese Seite erklärt, worum es geht, wie Sie prüfen, welche Version Sie haben, wie Sie aktualisieren und was danach zu tun ist.

Das Problem wird als CVE-2026-16532 geführt, eine nicht authentifizierte SQL-Injection-Schwachstelle, die über die Verarbeitung eingereichter Links im Plugin erreichbar ist. Betroffen ist jedes Release vor 7.9.3, behoben ist es in 7.9.3. Das zum Zeitpunkt des Schreibens aktuelle Release ist 7.9.4, das die Korrektur ebenfalls enthält. Wenn Sie etwas Älteres als 7.9.3 einsetzen, aktualisieren Sie Link Library auf 7.9.3 oder neuer.

Eines sei deutlich gesagt: Es gibt keine ältere Version, die sicher wäre. Dies ist kein Fehler, der irgendwann in der Geschichte des Plugins entstanden und dann behoben worden wäre. Der verwundbare Code steckt in jedem veröffentlichten Release, das ich prüfen konnte, bis zurück zur ältesten Version, die das WordPress.org-Verzeichnis noch ausliefert. „Meine Installation ist zu alt, um betroffen zu sein” ist hier also kein Ausweg. Die einzigen nicht betroffenen Versionen sind 7.9.3 und neuer.

Ebenso wichtig: Dieser Hinweis hängt nicht davon ab, wie Ihre Website konfiguriert ist. Link Library enthält ein Formular, über das Besucher Links vorschlagen können, und die naheliegende Annahme ist, dass eine Website nur dann exponiert ist, wenn sie dieses Formular tatsächlich irgendwo auf einer Seite eingebunden hat. Diese Annahme ist falsch. Der betroffene Code läuft bei jeder gewöhnlichen Anfrage im Frontend, ganz gleich, ob Sie das Einreichungsformular je veröffentlicht haben, und die Standardeinstellungen des Plugins verhindern das nicht. Wenn Ihre Website eine betroffene Version einsetzt, ist sie erreichbar. Punkt.

Dies ist ein Fehler im Plugin, kein Fehler im WordPress-Kern. Ein vollständig aktuelles WordPress schützt Sie nicht, wenn das Plugin Link Library selbst auf einer betroffenen Version steht.

Ist diese Nachricht echt?

Ja. Dies ist ein Hinweis nach dem Grundsatz der verantwortungsvollen Offenlegung von einem unabhängigen Sicherheitsforscher. Ich bitte Sie nicht um Geld, Passwörter oder Zugang zu Ihrer Website, und ich habe nicht versucht, in sie einzudringen, etwas an sie zu senden oder etwas auszunutzen.

Ich habe lediglich öffentlich sichtbare Dateien betrachtet, die Ihre Website jedem Besucher ausliefert (genauso, wie Ihre Startseite öffentlich ist), und die Versionsnummer notiert, die das Plugin veröffentlicht. Ich habe insbesondere nichts an die Einreichungsfunktion des Plugins übermittelt, weder auf Ihrer Website noch auf einer anderen, und nichts an dieser Prüfung berührt Ihre Daten, Ihren Adminbereich oder einen privaten Teil Ihrer Website (mehr dazu unter Was ich getan und nicht getan habe).

Wenn Sie überprüfen möchten, wer ich bin, finden Sie die Kontaktdaten am Ende dieser Seite und auf der Seite Über.

Warum das wichtig ist

Link Library erstellt und zeigt Verzeichnisse von Links auf Ihrer Website an und kann Linkvorschläge von Besuchern entgegennehmen. In der Verarbeitung dieser Vorschläge steckt dieses Problem.

In betroffenen Versionen baut das Plugin bei der Verarbeitung eines eingereichten Links seine Prüfung, ob dieser Link bereits existiert, als Datenbankabfrage zusammen, in die es die eingereichten Werte direkt hineinschreibt. Die Werte werden für die Anzeige bereinigt, aber sie werden nicht für die Verwendung in SQL maskiert, und die Abfrage läuft ohne Prepared Statement. Die Folge ist, dass ein nicht angemeldeter Besucher diese Abfrage verändern und Daten aus der Datenbank Ihrer Website auslesen kann. Version 7.9.3 schreibt die Abfrage so um, dass sie ein Prepared Statement verwendet, und schließt das Problem damit.

Um den Punkt von oben zu wiederholen, denn er ist derjenige, der am ehesten zu falscher Beruhigung führt: Die Exponierung hängt nicht davon ab, ob das Einreichungsformular irgendwo auf Ihrer Website veröffentlicht ist. Der Codepfad, der Einreichungen verarbeitet, horcht bei jeder Anfrage im Frontend mit, und alles, was eine Anfrage braucht, um ihn zu erreichen, lässt sich aus dem Plugin selbst beziehen, ohne dass auf irgendeiner Seite ein Formular existiert. Ob Ihre Website exponiert ist, hängt an einer einzigen Sache: an der Version, die Sie einsetzen.

Es lohnt sich außerdem, genau zu sein, was dieses Problem ist und was nicht. Es erlaubt einem Angreifer, Daten aus der Datenbank zu lesen. Das ist für sich genommen ernst, denn eine WordPress-Datenbank enthält Dinge wie E-Mail-Adressen von Benutzern und gehashte Passwörter, auf manchen Websites auch Kunden- oder Mitgliederdaten. Aber es ist für sich genommen keine Codeausführung aus der Ferne, keine Übernahme der Website und kein Weg für einen Angreifer, sich selbst ein Administratorkonto zu verschaffen. Es ist enger gefasst als die Probleme rund um vollständige Kompromittierung, über die ich an anderer Stelle schreibe, und ich benenne das Ausmaß lieber ehrlich, als bei Ihnen einen bedrohlicheren Eindruck zu hinterlassen, als die Fakten hergeben.

Ich beschreibe das auf dem Niveau, das ein Website-Betreiber zum Handeln braucht, und nicht weiter. Ich veröffentliche nicht die Details, mit denen jemand das Problem nachstellen könnte, und ich bitte Sie, es weder auf Ihrer eigenen noch auf einer fremden Website auszuprobieren. Ihre Versionsnummer abzulesen, wie unten beschrieben, sagt Ihnen alles, was Sie für Ihre Entscheidung brauchen.

Wenn meine E-Mail dieses Problem genannt hat, bedeutet das, dass die von Ihrer Website gemeldete Version älter als 7.9.3 ist. Ich habe nicht geprüft, ob Ihre konkrete Website ausnutzbar ist; beobachtet habe ich ausschließlich die Version.

Bin ich betroffen?

Es kommt auf eine Frage an: Welche Version von Link Library setzen Sie ein?

Im WordPress-Adminbereich (maßgeblich):

  1. Melden Sie sich in Ihrem WordPress-Dashboard an (meist unter ihredomain.de/wp-admin).
  2. Gehen Sie zu Plugins und dann Installierte Plugins.
  3. Suchen Sie Link Library, den Eintrag mit dem Ordner link-library, und lesen Sie die Version unter dem Namen ab.

Aus der öffentlichen Manifestdatei (ohne Anmeldung): Öffnen Sie ihredomain.de/wp-content/plugins/link-library/readme.txt im Browser. Die Zeile Stable tag: weiter oben nennt die Version, die Ihre Installation meldet; genau diese öffentliche Datei habe ich gelesen. Bei diesem Plugin habe ich überprüft, dass sie in jedem neueren Release mit dem tatsächlich veröffentlichten Code übereinstimmt, sie ist also eine verlässliche Prüfung.

Eine Prüfung, die bei diesem Plugin nicht funktioniert, verlassen Sie sich also bitte nicht darauf. Wenn Sie es gewohnt sind, Plugin-Versionen aus der ?ver=-Nummer abzulesen, die im Quelltext Ihrer Seite an einem Skript oder Stylesheet hängt, führt Sie das hier in die Irre. Die Versionsnummern an den Asset-URLs dieses Plugins sind die eingefrorenen Versionen mitgelieferter Bibliotheken von Drittanbietern (Werte wie 4.0.1, 1.0.0 oder 1.3.9) oder die Version des WordPress-Kerns. Keine davon ist die Version des Plugins, und es ist sinnlos, eine von ihnen mit 7.9.3 zu vergleichen. Nutzen Sie den Adminbereich oder die readme.txt.

Noch ein Sonderfall: Manche sehr alten Installationen zeigen in ihrer readme.txt Stable tag: trunk. Das ist überhaupt keine Versionsnummer. Wenn Sie das sehen, nutzen Sie stattdessen die Plugin-Seite im Adminbereich und behandeln Sie die Installation als betroffen, solange diese Seite nichts anderes sagt, denn eine Installation, die alt genug für trunk ist, ist mit Sicherheit älter als 7.9.3.

Wenden Sie dann diese Regel an:

  • Alles, was älter als 7.9.3 ist: betroffen. Aktualisieren Sie. Es gibt keine Grenze, unterhalb derer ein älteres Release wieder sicher wäre.
  • 7.9.3 oder neuer: bereits behoben. Auch 7.9.4, das aktuelle Release, enthält die Korrektur.

Wie Sie aktualisieren

Das Plugin ist kostenlos, weiterhin veröffentlicht und wird aktiv gepflegt, die Behebung ist also ein gewöhnliches Update. Der sicherste Weg führt über WordPress selbst, und zwar mit einem Backup vorab:

  1. Erstellen Sie ein Backup Ihrer Website (Dateien und Datenbank), bevor Sie etwas ändern. Die meisten Hoster bieten Backups mit einem Klick, alternativ nutzen Sie ein WordPress-Backup-Plugin.
  2. Gehen Sie im WordPress-Adminbereich zu Dashboard und dann Aktualisierungen, oder zu Plugins und dann Installierte Plugins. Wenn dort ein Update für Link Library aufgeführt ist, installieren Sie es von hier aus.
  3. Wenn Sie die Kommandozeile bevorzugen, tut WP-CLI dasselbe: wp plugin update link-library.
  4. Wenn kein Update erscheint, können Sie das aktuelle Release direkt von der Seite des Plugins im WordPress.org-Verzeichnis beziehen, Link Library, und über Plugins, dann Plugin installieren, dann Plugin hochladen aktualisieren.
  5. Prüfen Sie nach dem Update mit den obigen Schritten die neue Versionsnummer (7.9.3 oder neuer) und kontrollieren Sie, dass Ihre Linkverzeichnisse weiterhin angezeigt werden und sich normal verhalten.

Wenn Sie schon dabei sind, lohnt es sich zu prüfen, ob der WordPress-Kern und Ihre übrigen Plugins aktuell sind, denn für sie alle gilt dasselbe Prinzip.

Nach dem Update

Das Update auf 7.9.3 oder neuer schließt das Problem: Die Prüfung bei der Einreichung läuft nun als Prepared Statement, eingereichte Werte werden also als Daten behandelt und nicht als Teil der Abfrage.

Was ein Update nicht leisten kann, sorgfältig formuliert. Das Update verhindert, dass in Zukunft etwas aus Ihrer Datenbank ausgelesen wird. Es kann nicht ungeschehen machen, was möglicherweise bereits ausgelesen wurde, während die Website auf einer betroffenen Version stand. Ich habe keinerlei Einblick darin, ob das auf Ihrer Website geschehen ist, und ich habe nicht nachgesehen; die meisten Websites im betroffenen Bereich wurden vermutlich nie angerührt. Weil ich Ihnen das aber nicht mit Sicherheit sagen kann, ist etwas Vorsorge angemessen, im Verhältnis zu dem, was Ihre Datenbank enthält:

  • Wenn Ihre Website eine schlichte Publikationsseite ist, deren Datenbank Ihre Beiträge, Seiten und eine Handvoll Benutzerkonten enthält, ist der sinnvolle Schritt, Ihre Benutzer (und besonders Ihre Administratoren) ihre Passwörter ändern zu lassen. WordPress speichert Passwörter gehasht und nicht im Klartext, aber Hashes schwacher Passwörter lassen sich offline knacken, ein frisches Passwort räumt diese Sorge also aus.
  • Wenn Ihre Website Sensibleres speichert (Mitgliederdaten, Kundendaten, API-Schlüssel oder andere Zugangsdaten, die Plugins vorhalten), behandeln Sie auch diese als austauschenswert.
  • Das Erneuern der Sicherheitsschlüssel und Salts von WordPress in der wp-config.php (neue Werte gibt es mit einem Klick beim offiziellen Schlüsselgenerator) meldet alle Benutzer einmal ab und macht gestohlene Sitzungstoken ungültig.

Damit die Einordnung klar ist: Dies ist eine Vorsichtsmaßnahme und keine Feststellung, dass Ihre Daten abgeflossen sind. Dieser Hinweis beruht auf einer Versionsnummer, nicht auf Anzeichen eines Angriffs.

Was ich getan und nicht getan habe

Um vollständig transparent zu machen, worauf meine E-Mail beruht: Ich habe nur öffentliche Dateien gelesen, die Ihre Website ohnehin jedem Besucher ausliefert, konkret die öffentliche readme.txt des Plugins und Ihre Startseite. Ich habe nicht auf Ihren WordPress-Adminbereich, Ihre Datenbank oder einen anderen privaten Teil der Website zugegriffen.

Insbesondere habe ich nie etwas an die Einreichungsfunktion des Plugins übermittelt, weder auf Ihrer Website noch anderswo. Es wurde nichts eingereicht, gespeichert, getestet oder ausgenutzt. Das wiegt hier schwerer als auf den meisten dieser Seiten, denn die Verarbeitung der Einreichungen ist genau das, worum es bei diesem Problem geht, „ich habe sie nicht angerührt” ist also der ganze Unterschied zwischen einer Offenlegung und einem Eindringen.

Ich veröffentliche außerdem bewusst nicht die Details, die jemandem helfen würden, dieses Problem auszunutzen. Die obige Beschreibung endet auf dem Niveau, das ein Website-Betreiber braucht, und ich verlinke keinerlei Proof-of-Concept-Code.

Dies ist eine versionsbasierte Beobachtung: Ihre Website meldet eine Version, die älter als 7.9.3 ist. Eine Website in diesem Bereich kann bereits anderweitig geschützt sein, etwa durch eine Web Application Firewall oder eine zurückportierte Korrektur. Dieser Hinweis ist keine Aussage darüber, dass Ihre Website zum Zeitpunkt meiner Prüfung ausnutzbar war.

Ich habe keinen Webmaster / ich komme nicht weiter

Wenn Sie die Website nicht selbst betreuen, leiten Sie diese Seite bitte an die zuständige Person weiter (Ihre Webentwicklung, Agentur oder Ihren Hoster). Dort wird man die obigen Schritte schnell wiedererkennen.

Wenn Sie die Website selbst betreuen und nicht weiterkommen, helfe ich Ihnen gern kostenlos weiter. Melden Sie sich einfach über die Kontaktdaten unten.

Kontakt

Evan Harris, Sicherheitsforscher

Ich melde mich zu solchen Themen ausschließlich, um Betreibern zu helfen, ihre Websites abzusichern. Wenn Sie nicht erneut kontaktiert werden möchten, sagen Sie einfach Bescheid; ich halte mich daran.

Quellen

Offizielle Meldungen und Nachverfolgung

Hersteller / Plugin