flawopen.com/Incidents/wordpress-stored-xss-admin-session-campaign-october-2026
WordPress-Kampagne mit gespeichertem XSS: zwei Plugins, eine Persistenzkette
Patchstack beobachtete Versuche, dasselbe Post-Exploit-Implantat über zwei gespeicherte XSS-Lücken in WordPress zu nutzen. Aktualisieren Sie beide Plugins und suchen Sie nach Persistenz: Ein Patch bereinigt keine bereits kompromittierte Website.[1], [2], [3], [4], [5]
Stellen Sie sich zwei öffentliche Vorschlagsboxen vor, deren Zettel später von der Website-Administration geöffnet werden. Speichert die Website einen Zettel als ausführbares Markup statt als Text, kann er beim Öffnen mit den Browserrechten der Administration handeln. Laut Kampagnenbericht dienten zwei getrennte Pluginfehler als Einstieg; anschließend wurde versucht, den Zugriff über ein Update hinaus zu erhalten.[1], [8], [9]
Kernkonzepte & Begriffe
Stored XSS- Vom Angreifer kontrollierter Text wird gespeichert und später im Browser als ausführbares Markup ausgegeben. Hier war die WordPress-Administration der entscheidende Anzeigekontext.[2], [3], [8], [9]
Same-Origin-Sitzung- Der Browser sendet die Sitzung der Website automatisch bei Same-Origin-Anfragen mit. Ein Skript, das bereits auf dieser Website läuft, kann über die Seite handeln, ohne ein HttpOnly-Cookie auszulesen.[1], [17], [18]
Persistenz- Zugriff, der nach Behebung des ursprünglichen Fehlers bestehen bleibt, etwa nicht autorisierte Konten oder Dateien. Ein sauberes Update entfernt solche Änderungen nicht.[1]
CVSS-Zuordnung- Die Wordfence-CNA-Datensätze weisen beiden CVEs CVSS 3.1 mit 7,2 zu. Patchstack nennt in seinem WPC-Product-Bundles-Hinweis 7,1; dieser Artikel verwendet den CVE-Datensatzwert und nennt die Quelle.[2], [3], [6]
Quellenhinweise zum Code- Die Wordfence-CNA-Referenzen verweisen auf versionsgebundene Dateien von WPC Product Bundles und Ninja Forms rund um Validierung, Speicherung und Admin-Ausgabe. Das sind Codehinweise, kein verifizierter Patch-Diff. Das PHP-Paar oben veranschaulicht Output-Encoding und ist kein rekonstruiertes Plugin-Listing.[8], [9], [10], [11], [12], [13], [14], [15], [16]
Framework-Zuordnungen
- CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-79
- OWASP Top 10:2025 — A05:2025 Injection
Vorfall-Zeitstrahl
Die Wordfence-CNA-Einträge nennen den 21. September als Veröffentlichungsdatum, während Patchstack angibt, die Schwachstellen seien am 22. September öffentlich bekannt gewesen. Die Quellen weichen um einen Tag ab; die CVE-Datensätze nennen betroffene Plugin-Versionen bis 8.6.6 beziehungsweise 3.15.3.[2], [3], [8], [9], [1]
Patchstack berichtet von Versuchen mit derselben Post-Exploit-Stufe, zuerst über WPC Product Bundles und danach Ninja Forms. Patchstack veröffentlichte die Analyse am 6. Oktober.[1]
Schritt-für-Schritt Angriffsablauf
Gespeicherte Inhalte werden von Admins geöffnet
Übermittelte Daten werden gespeichert und später in einer Admin-Ansicht für Bestellungen oder Einsendungen angezeigt. Bei unsicherer Ausgabe kann die Admin-Ansicht Markup ausführen und stellt damit den Browserkontext bereit.[1], [8], [9], [10], [11], [12], [13], [14]
Folgezugriff kann den Fehler überdauern
Patchstack berichtet von Versuchen, ein Plugin zu installieren und weitere Persistenz anzulegen. Das sind Kampagnenbeobachtungen, kein bestätigtes Ergebnis für jedes Ziel; ein Update sperrt den verwundbaren Einstieg, entfernt aber keine bereits vorgenommenen Änderungen.[1], [4], [5]
Quellcode: Verwundbar vs. Sicher
Dies ist die Quellcodeänderung in Ninja Forms' Textarea::admin_form_element(), kein allgemeines Modell. Version 3.15.3 setzte gespeicherten Formulartext direkt in den HTML-Inhalt eines textarea ein; Version 3.15.4 wendet vor der Ausgabe esc_textarea() an. Dadurch wird der Inhalt in diesem Kontext nicht mehr als Markup interpretiert. Das Beispiel dokumentiert ausschließlich den Ninja-Forms-Pfad für CVE-2026-94504; es zeigt nicht die Korrektur von WPC Product Bundles für CVE-2026-93836. Verwenden Sie in anderen Kontexten jeweils die passende Escaping-Funktion.[13], [15], [16]
public function admin_form_element( $id, $value )
{
return "<textarea class='widefat' name='fields[$id]'>$value</textarea>";
}public function admin_form_element( $id, $value )
{
return "<textarea class='widefat' name='fields[$id]'>" . esc_textarea( $value ) . "</textarea>";
}Checkliste für Engineering & Systemsicherheit
- ✓Aktualisieren Sie WPC Product Bundles für
CVE-2026-93836mindestens auf 8.6.7; bei der Prüfung am 11.10.2026 führte WordPress.org 8.7.4 als aktuell. Das Changelog zu 8.7.3 nennt zusätzlich eine Stored-XSS-Härtung, ordnet sie dieser CVE aber nicht zu; installieren Sie die aktuelle Version. Aktualisieren Sie Ninja Forms fürCVE-2026-94504mindestens auf 3.15.4; bei der Prüfung am 11.10.2026 führte WordPress.org 3.15.5 als aktuell. Das Changelog zu 3.15.5 ergänzt eine Stored-XSS-Härtung für Einsendungen des Felds Paragraph Text (Rich Text), getrennt vom CVE-Fix in 3.15.4. Prüfen Sie die installierten Versionen beider Plugins auf allen Produktionsseiten.[2], [3], [4], [5] - ✓War eine verwundbare Version erreichbar, untersuchen Sie den Vorfall vor der Freigabe: Vergleichen Sie Admin-Konten in der Datenbank mit dem Dashboard und prüfen Sie unerwartete Plugins einschließlich must-use.[1]
- ✓Prüfen Sie Web-, WordPress- und Hosting-Protokolle auf unerwartete Admin-Aktionen, Plugin-Installationen und Änderungen beim Öffnen von Bestellungen oder Formulareinsendungen.[1]
- ✓Operative Empfehlung von FlawOpen: Entfernen Sie unautorisierte Zugriffe nach einem verlässlichen Incident-Response-Verfahren; ändern Sie nach der Eindämmung privilegierte Zugangsdaten und WordPress-Authentifizierungs-Salts und prüfen Sie weitere erreichbare Geheimnisse.
- ✓Operative Empfehlung von FlawOpen: Bewahren Sie ein sauberes Backup auf und validieren Sie Datenbank, Plugin-Dateien sowie Checkout/Formulare vor der Wiederinbetriebnahme; ein Update beweist nicht, dass Persistenz entfernt wurde.
Quellen
- Patchstack — Four ways back in: the WordPress XSS campaign that hides its own admin account (2026-10-06)
- CVE-2026-93836 — CVE record (Wordfence CNA)
- CVE-2026-94504 — CVE record (Wordfence CNA)
- WPC Product Bundles for WooCommerce — WordPress.org changelog
- Ninja Forms — WordPress.org changelog
- Patchstack — WPC Product Bundles advisory
- NCSA Qatar — Cybersecurity advisories (October 7, 2026)
- Wordfence CNA — CVE-2026-93836 vulnerability record
- Wordfence CNA — CVE-2026-94504 vulnerability record
- CVE-2026-93836 — WPC Product Bundles 8.6.5 source pointer: class-woosb.php
- CVE-2026-93836 — WPC Product Bundles 8.6.5 source pointer: class-backend.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: Submission.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: Textarea.php
- CVE-2026-94504 — Ninja Forms 3.15.3 source pointer: admin submission template
- Ninja Forms 3.15.3 to 3.15.4 changeset referenced by CVE-2026-94504
- Quellcodekorrektur in Ninja Forms 3.15.4 — Textarea::admin_form_element()
- MDN — Same-Origin-Policy