Content Views Sicherheitshinweis
Wenn Sie eine E-Mail von mir erhalten haben, die Sie auf diese Seite verweist, liegt dies daran, dass Ihre Website anscheinend eine Version von Content Views – Post Grid & Filter (das WordPress-Plugin von Content Views / PT Guy, das sich in Ihren Dateien unter /wp-content/plugins/content-views-query-and-display-post-page/ befindet) ausführt, die in den betroffenen Bereich eines bekannten Sicherheitsproblems fällt. Diese Seite erklärt, worum es sich bei dem Problem handelt, wie Sie herausfinden können, wie sehr es für Ihre Website von Bedeutung ist, wie Sie Ihre Version ablesen, ohne getäuscht zu werden, und wie Sie ein Update durchführen.
Es handelt sich um CVE-2026-15361, eine SQL-Injection in der Vorschauverarbeitung des Plugins. Sie betrifft jede Veröffentlichung vor 4.5 und wurde in 4.5 behoben, das am 28. Juli 2026 veröffentlicht wurde. Wenn Sie eine Version älter als 4.5 ausführen, aktualisieren Sie Content Views auf 4.5.1 oder höher, die aktuelle Veröffentlichung zum Zeitpunkt der Erstellung dieser Seite (4. August 2026). Es gibt keinen veröffentlichten CVSS-Wert für dieses Problem, daher werde ich Ihnen keinen nennen, und mir ist kein öffentlicher Exploit-Code dafür bekannt.
Es gibt keine ältere Version, die sicher ist. Dies ist kein Fehler, der irgendwann im Verlauf der Plugin-Geschichte eingeführt und später behoben wurde. Ich habe jeden veröffentlichten Release-Tag in der Geschichte des Plugins überprüft, vom frühesten im Jahr 2014 bis 4.4, und der betroffene Code ist in allen enthalten. „Meine Installation ist zu alt, um betroffen zu sein” ist hier kein Ausweg. Die einzigen Versionen, die nicht betroffen sind, sind 4.5 und neuer.
Bevor wir zu allem anderen kommen, die Einschränkung, die entscheidet, wie sehr dies für Ihre Website von Bedeutung ist, denn ich möchte sie lieber nennen, als den Hinweis größer klingen zu lassen, als er ist: Dieser Fehler kann nur von jemandem genutzt werden, der auf Ihrer Website angemeldet ist. Es spielt keine Rolle, was das Konto normalerweise darf, und WordPress’ niedrigste Rolle reicht aus, aber ein Konto ist erforderlich. Die Frage, die über Ihre Gefährdung entscheidet, ist also keine Einstellung irgendwo im Plugin, sondern wer auf Ihrer Website ein Konto erhalten kann. Ich kann Ihre Plugin-Version aus einer öffentlichen Datei ablesen, und ich kann sehen, ob WordPress seine Standard-Registrierungsseite ausliefert, aber ich kann nicht sehen, wer Konten auf Ihrer Website besitzt, daher ist dieser Hinweis eine vorsorgliche Warnung und kein bestätigter Befund über Sie.
Beachten Sie, was diese Einschränkung nicht ist. Es gibt keine Option zum Abschalten, kein Feature zum Zurückziehen und keine Konfiguration, die Sie aus dem betroffenen Bereich herausnimmt. Der betroffene Handler ist bei jeder Installation einer betroffenen Version registriert, unabhängig davon, ob Sie jemals ein Beitragsraster auf einer Seite platziert haben. Wenn Sie nach einem Kontrollkästchen zum Abschalten suchen, werden Sie keines finden, weil es keines gibt. Das Update ist die Behebung.
Ein Wort zur Dringlichkeit, da es sich um einen bedingten Hinweis handelt. Wenn Sie die einzige Person mit einem Konto auf der Website sind und niemand sonst eines erhalten kann, ist das Update eine normale Plugin-Wartung. Wenn Ihre Website Registrierungen anderer Personen akzeptiert, behandeln Sie es bitte als Priorität, und beachten Sie, dass Registrierungen mehr Formen annehmen als die offensichtliche: Ein WooCommerce-Shop, ein Mitgliedschafts- oder Forenplugin, ein Blog mit mehreren Autoren und eine benutzerdefinierte Registrierungsseite erzeugen alle Konten, ohne dass jemals das eigene Registrierungsformular von WordPress beteiligt sein muss.
Wenn die Registrierungsseite von WordPress für Besucher geöffnet ist und Sie sie nicht benötigen, ist das Abschalten ein sinnvoller Zwischenschritt, da es einschränkt, wer dies erreichen kann. Bitte verstehen Sie dies jedoch nicht als vollständige Entwarnung. Das Schließen der Registrierung schließt nur eine von mehreren Türen zu einem Konto, und es ändert nichts an den bereits bestehenden Konten. Das Update des Plugins ist das, was das Problem tatsächlich behebt.
Es lohnt sich auch, genau zu sein, was dieses Problem ist und was nicht. Es ermöglicht jemandem mit einem gering privilegierten Konto, Daten aus der Datenbank Ihrer Website zu lesen, die sein Konto eigentlich nicht sehen dürfte. Das ist es wert, behoben zu werden, da eine WordPress-Datenbank Dinge wie Benutzer-E-Mail-Adressen und gehashte Passwörter enthält und auf manchen Websites auch Mitglieder- oder Kundendatensätze. Es ist jedoch keine Übernahme durch einen Administrator, es ist keine Möglichkeit, sich selbst ein Administratorkonto zu verschaffen, und es ist keine Remotecodeausführung. Es ist enger gefasst als die Fälle vollständiger Kompromittierung, über die ich an anderer Stelle schreibe, und ich möchte das Ausmaß lieber ehrlich benennen, als Ihnen einen beängstigenderen Eindruck zu hinterlassen, als die Fakten hergeben.
Dies ist eine Plugin-Schwachstelle, keine Schwachstelle im WordPress-Kern. Ein vollständig auf dem neuesten Stand befindliches WordPress schützt Sie nicht, wenn das Content Views-Plugin selbst eine betroffene Version ausführt.
Ist diese Nachricht echt?
Ja. Dies ist ein Hinweis im guten Glauben im Rahmen der verantwortungsvollen Offenlegung eines unabhängigen Sicherheitsforschers. Ich bitte Sie nicht um Geld, Passwörter oder Zugriff auf Ihre Website, und ich habe nicht versucht, in sie einzubrechen, mich dort zu registrieren oder irgendetwas auszunutzen.
Ich habe lediglich Seiten und Dateien betrachtet, die Ihre Website jedem Besucher bereitstellt (auf die gleiche Weise wie Ihre Startseite öffentlich ist), und die Versionsnummer notiert, die das Plugin veröffentlicht. Eine der Seiten, die ich gelesen habe, war die Standard-WordPress-Registrierungsseite Ihrer Website, um zu sehen, ob sie für Besucher geöffnet ist, und das Lesen war alles, was ich damit gemacht habe. Ich habe bewusst nicht dieses Formular abgeschickt, kein Konto erstellt, mich nicht angemeldet und nichts an die betroffene Funktion gesendet. Nichts an dieser Überprüfung berührt Ihre Daten, Ihren Admin-Bereich oder einen privaten Teil Ihrer Website (weitere Details unter Was ich getan und nicht getan habe unten).
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
Content Views erstellt Beitragsraster, Listen und Scroller auf Ihrer Website, damit Sie eine gefilterte Auswahl von Beiträgen oder Seiten anzeigen können, ohne Code schreiben zu müssen. Ein Teil davon, wie es das tut, ist ein Anfrage-Handler, der eine Vorschau eines Rasters aus den ihm übergebenen Einstellungen rendert.
In betroffenen Versionen prüft dieser Handler ein Sicherheitstoken und hört dort auf. Er prüft nie, ob die Person, die die Anfrage sendet, überhaupt berechtigt ist, es zu verwenden, und das fragliche Token ist kein Geheimnis: Das Plugin veröffentlicht es an jeden Besucher der Website. Der Handler baut dann eine Datenbankabfrage direkt aus den in der Anfrage übergebenen Einstellungen zusammen. Die Folge ist, dass jemand, der nichts weiter als das am geringsten privilegierte Konto auf Ihrer Website besitzt, diese Abfrage lenken und Daten aus Ihrer Datenbank lesen kann, die sein Konto eigentlich nichts angehen.
Die Voraussetzung, um sie zu wiederholen, weil es der Teil ist, der in beide Richtungen am ehesten falsch verstanden wird: ein Konto, keine Konfiguration. Nichts muss aktiviert werden, damit der Handler erreichbar ist, und es gibt keine Einstellung, die eine betroffene Version aus dem betroffenen Bereich herausnimmt. Was zwischen einer betroffenen Installation und diesem Problem steht, ist einfach, ob sich jemand anderes als Sie anmelden kann. Auf einer Website, auf der sich jeder registrieren kann, ist das kaum eine Hürde. Auf einer Website, auf der Sie der einzige Benutzer sind, ist es eine echte.
Und die Kehrseite, die ebenso wichtig ist: Eine Website, deren WordPress-Registrierungsformular geschlossen ist, ist dadurch nicht sicher. Konten entstehen auf vielen Wegen, und jeder davon genügt.
Ich beschreibe dies auf einem Niveau, das ein Website-Betreiber zum Handeln benötigt, und nicht weiter. Ich veröffentliche nicht die Details, die es jemandem ermöglichen würden, dies nachzustellen, und ich bitte Sie, dies nicht gegen Ihre eigene Website oder die einer anderen Person zu versuchen. Das Ablesen Ihrer Versionsnummer, wie unten beschrieben, sagt Ihnen alles, was Sie wissen müssen, um zu entscheiden, was zu tun ist.
Wenn meine E-Mail dieses Problem zitiert, bedeutet dies, dass die Version, die Ihre Website meldet, älter als 4.5 ist. Ich habe nicht getestet, ob Ihre spezifische Website ausnutzbar ist, und ich kann nicht sehen, wer Konten darauf besitzt. Alles, was ich beobachtet habe, ist die Version, und ob Ihre Registrierungsseite an Besucher ausgeliefert wird.
Bin ich betroffen?
Es kommt auf eine Frage an: Welche Version von Content Views führen Sie aus?
Ein kurzes Wort dazu, um welches Plugin es sich handelt, da der Name mehrfach vergeben ist. Dieser Hinweis betrifft das kostenlose, auf WordPress.org veröffentlichte Plugin, dessen Ordner content-views-query-and-display-post-page ist. Derselbe Anbieter verkauft auch eine separate Pro-Reihe. Wenn Ihr Plugin-Ordner dieser ist, lesen Sie weiter.
Aus dem WordPress-Adminbereich (maßgeblich):
- Melden Sie sich in Ihrem WordPress-Dashboard an (normalerweise unter
yourdomain.com/wp-admin). - Gehen Sie zu Plugins und dann Installierte Plugins.
- Finden Sie Content Views – Post Grid & Filter, den Eintrag, dessen Ordner
content-views-query-and-display-post-pageist, und notieren Sie die unter seinem Namen angezeigte Version.
Aus dem öffentlichen Manifest (kein Login erforderlich): Öffnen Sie
yourdomain.com/wp-content/plugins/content-views-query-and-display-post-page/README.txt
in einem Browser und lesen Sie die Zeile Stable tag: nahe dem Anfang. Dies ist eine der beiden öffentlichen Quellen, die ich gelesen habe.
Achten Sie auf die Großbuchstaben in diesem Dateinamen. WordPress-Plugins liefern üblicherweise eine kleingeschriebene readme.txt aus, und das ist die Adresse, die die meisten Leute aus Gewohnheit eingeben. Die 4.x-Pakete dieses Plugins liefern die Datei als README.txt in Großbuchstaben aus, sodass die kleingeschriebene Adresse auf einem Case-sensitiven Host einen 404-Fehler zurückgibt und es so aussieht, als sei die Datei nicht vorhanden. Sie ist vorhanden. Probieren Sie die großgeschriebene Schreibweise, bevor Sie irgendetwas schlussfolgern.
Aus Ihrem Seitenquelltext (kein Login erforderlich): Sehen Sie sich den Quelltext Ihrer Startseite an und suchen Sie nach den eigenen Frontend-Assets des Plugins genau an diesen Pfaden:
/wp-content/plugins/content-views-query-and-display-post-page/public/assets/js/cv.js?ver=...
/wp-content/plugins/content-views-query-and-display-post-page/public/assets/css/cv.css?ver=...
Die an diese Dateien angehängte ?ver=-Nummer ist die eigene Version des Plugins. Bei einer Standardinstallation werden sie auf jeder Frontend-Seite geladen, unabhängig davon, ob darauf ein Beitragsraster erscheint, sodass Ihre Startseite normalerweise ausreicht. Bei sehr alten Installationen tragen dieselben beiden Dateien die Namen public.js und public.css, und dieselbe Regel gilt für sie.
Die Falle, die es hier zu vermeiden gilt, und in die man leicht tappt. Dieses Plugin liefert gebündelte Kopien mehrerer Drittanbieter-Bibliotheken innerhalb seines eigenen Plugin-Ordners aus, und jede davon trägt ihre eigene, völlig unabhängige Versionsnummer. Ihr Seitenquelltext kann Bootstrap in Version 3.3.5 oder 3.3.0, Select2 in 3.4.5, html5shiv in 3.7.0, respond.js in 1.4.2 und bootstrap-paginator in 0.5 anzeigen, alle unter Pfaden, die mit dem Content-Views-Plugin-Ordner beginnen. Ein Betreiber, der den Seitenquelltext nach dem Plugin-Ordner durchsucht und den ersten auftauchenden ?ver=-Wert liest, kann leicht zu der Annahme gelangen, das Plugin sei bei „3.3.5”, und sich dann fragen, wie sich das zu 4.5 verhält. Es verhält sich überhaupt nicht dazu. Eine Zahl wie 3.3.5 oder 0.5 auf einem bootstrap- oder select2-Pfad ist die Version einer anderen Software. Lesen Sie die Version nur von cv.js oder cv.css ab (bzw. public.js / public.css bei einer sehr alten Installation) und ignorieren Sie jedes andere ?ver= auf der Seite.
Wenn Sie aus dem Seitenquelltext überhaupt keine lesbare Zahl erhalten können, ist das üblich und kein Zeichen für irgendetwas: Caching- und Optimierungsplugins entfernen routinemäßig den ?ver=-Wert von Asset-URLs oder bündeln die Dateien zu einem kombinierten Skript. In diesem Fall ist die README.txt die zuverlässige öffentliche Angabe, und der Admin-Bildschirm aus der ersten Überprüfung hat immer die Antwort.
Wenden Sie dann diese Regel an, und beachten Sie, dass Versionen numerisch und nicht alphabetisch verglichen werden, sodass 4.10 neuer wäre als 4.9, obwohl es als Text kleiner aussieht:
- Alles älter als 4.5: betroffen. Aktualisieren. Es gibt keine Untergrenze, unterhalb derer eine ältere Veröffentlichung wieder sicher wird.
- 4.5 oder neuer: in Bezug auf dieses Problem bereits behoben. Die aktuelle Veröffentlichung zum Zeitpunkt der Erstellung ist 4.5.1, und die neueste verfügbare Version zu installieren ist der beste Schritt.
Wie Sie aktualisieren
Das Plugin ist kostenlos, wird weiterhin veröffentlicht und aktiv gewartet, sodass die Korrektur einem normalen Update entspricht. Der sicherste Weg ist die Aktualisierung direkt über WordPress selbst, und zwar nach vorheriger Sicherung:
- Sichern Sie Ihre Website (Dateien und Datenbank), bevor Sie Änderungen vornehmen. Die meisten Hosting-Anbieter bieten Ein-Klick-Sicherungen an, oder Sie verwenden ein WordPress-Sicherungsplugin.
- Gehen Sie im WordPress-Adminbereich zu Dashboard und dann zu Aktualisierungen, oder zu Plugins und dann zu Installierte Plugins. Wenn ein Content-Views-Update aufgelistet ist, installieren Sie es hier.
- Wenn Sie die Befehlszeile bevorzugen, erledigt WP-CLI dasselbe:
wp plugin update content-views-query-and-display-post-page(der Befehl verwendet den Ordnernamen, nicht den Anzeigenamen). - Wenn kein Update angezeigt wird, können Sie die neueste Version direkt von der Plugin-Seite im WordPress.org-Verzeichnis herunterladen, Content Views – Post Grid & Filter, und das Update über Plugins dann Plugin installieren dann Plugin hochladen durchführen.
- Bestätigen Sie nach dem Update die neue Versionsnummer (4.5.1 oder höher) mit den oben genannten Schritten und prüfen Sie, ob Ihre Beitragsraster und alle Filter darauf weiterhin normal angezeigt werden.
Während Sie dort sind, lohnt es sich zu bestätigen, dass WordPress-Kern und Ihre anderen Plugins auf dem neuesten Stand sind, da das gleiche Prinzip für alle gilt.
Nach dem Update
Das Update auf 4.5.1 oder höher schließt das Problem, und für die meisten Websites ist dies die gesamte Aufgabe. Diese Seite ist eine vorbeugende Mitteilung, kein Vorfallbericht: Ich habe keine Einsicht darin, ob auf Ihrer Website etwas passiert ist, und ich habe auch nicht danach gesucht.
Zwei kleine Dinge sind es wert, getan zu werden, solange das Update noch frisch ist:
- Bestätigen Sie, dass sich die Version tatsächlich geändert hat, mit welcher der oben genannten Überprüfungen auch immer am einfachsten war, und laden Sie eine Seite, die eines Ihrer Beitragsraster zeigt, um sicherzustellen, dass es noch normal angezeigt wird.
- Wenn Sie die WordPress-Registrierung geöffnet hatten und sie nicht benötigen, ziehen Sie in Betracht, sie zu schließen. Das ist allgemeine Hygiene und keine Behebung dieses Problems, das das Update bereits erledigt hat, und es lohnt sich, daran zu denken, dass andere Plugins auf Ihrer Website unabhängig davon Konten erzeugen können.
Sie werden bemerken, dass es auf dieser Seite keine Checkliste unter dem Motto „gehen Sie davon aus, dass Sie kompromittiert wurden” gibt, und das ist absichtlich und keine Auslassung. Was dieses Problem ermöglicht, ist ein Datenbank-Lesezugriff, der von einem gering privilegierten Konto aus erreichbar ist. Es verschafft niemandem ein Administratorkonto, und es führt keinen Code auf Ihrem Server aus, sodass die Administrator-Überprüfung und die Passwort-Rotation, die ich nach einer Schwachstelle der Übernahme-Klasse empfehle, hier nicht angemessen wären. Aktualisieren, bestätigen und weitermachen.
Was ich getan und nicht getan habe
Um bezüglich der Überprüfung hinter meiner E-Mail vollständig transparent zu sein, hier ist sie in Gänze. Ich habe Seiten und Dateien gelesen, die Ihre Website bereits jedem Besucher bereitstellt:
- Ihre Startseite und die darin geschriebenen Asset-Adressen;
- die öffentliche
README.txtdes Plugins innerhalb vonwp-content/plugins/content-views-query-and-display-post-page/; - die Standard-WordPress-Registrierungsseite Ihrer Website unter
/wp-login.php?action=register, um zu sehen, ob sie für Besucher geöffnet ist. Das ist eine veröffentlichte Seite, und das Lesen war alles, was ich damit gemacht habe.
Ich habe nicht dieses Registrierungsformular abgeschickt, kein Konto erstellt und mich nicht auf Ihrer Website angemeldet. Ich habe nichts an die betroffene Funktion gesendet. Diesen letzten Punkt möchte ich am klarsten machen: Das Problem ist eine SQL-Injection-Senke, und das Abfeuern einer Payload auf die Datenbank einer anderen Person ist nichts, was dieses Projekt tut, weder im Labor noch in der Produktion. Nichts wurde übermittelt, getestet oder ausgenutzt, und nichts hat Ihren WordPress-Admin-Bereich, Ihre Datenbank oder einen privaten Teil der Website berührt.
Ich veröffentliche auch absichtlich nicht die Details, die jemandem helfen würden, dieses Problem auszunutzen. Die obige Beschreibung bleibt auf dem Niveau, das ein Website-Betreiber benötigt, und ich verlinke keinen Proof-of-Concept-Code.
Dies ist eine versionsbasierte Beobachtung: Ihre Website meldet eine Version älter als 4.5. Es ist keine Aussage, dass Ihre Website zum Zeitpunkt meiner Prüfung ausnutzbar war. Da die Nutzung dieses Problems erfordert, dass jemand angemeldet ist, und ich nicht sehen kann, wer Konten auf Ihrer Website besitzt, kann eine Website im betroffenen Bereich durchaus überhaupt nicht exponiert sein, und eine Website in diesem Bereich kann separat durch andere Mittel wie eine Web Application Firewall oder eine zurückportierte Korrektur geschützt sein.
Ich habe keinen Webmaster / ich komme nicht weiter
Wenn Sie nicht die Person sind, die die Website wartet, leiten Sie diese Seite bitte an diejenige Person weiter, die dies tut (Ihr Webentwickler, Agentur oder Hosting-Anbieter). Sie werden die oben genannten Schritte schnell erkennen.
Wenn Sie die Website selbst warten und feststecken, helfe ich Ihnen gerne kostenlos in die richtige Richtung. Kontaktieren Sie mich über die unten stehenden Kontaktdaten.
Kontakt
Evan Harris, Sicherheitsforscher
- E-Mail: security@mail.mcpsec.dev
- X: @Evan__Harris
- GitHub: eharris128
- LinkedIn: Evan Harris
Ich kontaktiere Sie bezüglich solcher Probleme ausschließlich, um Betreibern bei der Sicherung ihrer Websites zu helfen. Wenn Sie nicht erneut kontaktiert werden möchten, teilen Sie mir dies einfach mit, und ich werde dies respektieren.
Quellen
Offizielle Meldungen und Nachverfolgung
Hersteller / Plugin
</content>