Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-18322 — Root-Cause-Analyse, passiver Versionsprüfer und Lab-PoC für CVE-2026-18322, eine unauthentifizierte Rechteausweitung im WordPress-Plugin Smart Popup von Supsystic. | Kitploit
Tools/GitHubGitHub/i3it/cve-2026-18322
Privilege EscalationSchwachstellenscannerSchwachstellenanalyseExploitationWebanwendungs-ExploitationSicherheitsvirtualisierungWebsicherheitPenetrationstestsPapers & ForschungLabs & Praxis
GitHub
24vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
i3it/cve-2026-18322

CVE-2026-18322

Root-Cause-Analyse, passiver Versionsprüfer und Lab-PoC für CVE-2026-18322, eine unauthentifizierte Rechteausweitung im WordPress-Plugin Smart Popup von Supsystic.

Repository anzeigen

CVE-2026-18322 — Smart Popup von Supsystic Privilegienausweitung

CVE Severity Affected Fixed in CWE Python Tests License

Sicherheitsforschung zu CVE-2026-18322, einer nicht authentifizierten Privilegienausweitungs- Schwachstelle im WordPress-Plugin Smart Popup by Supsystic (popup-by-supsystic). Dieses Repository enthält eine Ursachenanalyse, die aus dem Upstream-Quellcode-Diff abgeleitet wurde, die extrahierten Patches, ein Erkennungswerkzeug (passiver Versions-Fingerprinter) zur Identifizierung betroffener Installationen und ein Labor für den Exploit-PoC.

Die Schwachstelle ist öffentlich und gepatcht. Diese Arbeit wird für den defensiven Einsatz veröffentlicht: um Betreibern zu helfen, betroffene Hosts zu finden und zu beheben.


Betroffene Versionen

VersionsbereichStatus
< 1.13.0Anfällig
>= 1.13.0Behoben

1.13.0 (veröffentlicht am 31.07.2026) ist die erste gepatchte Version; sie repariert alle drei Glieder der unten beschriebenen Kette. Siehe §1 der Analyse.


Zusammenfassung der Schwachstelle

Drei unabhängige Schwächen setzen sich zu einer nicht authentifizierten Administrator-Erstellung zusammen:

1. Eine Berechtigungs-Map-Kollision — havePermissions() kombinierte zwei Berechtigungs-Maps mit array_merge(). Beide verwenden den String-Schlüssel PPS_USERLEVELS ('userlevels'), und array_merge() überschreibt String-Schlüssel, sodass die kurze Standardliste des Basis-Controllers die Liste des Popup-Moduls vollständig ersetzte — wodurch die Administrator- Beschränkung stillschweigend aus save und neun weiteren Methoden entfernt wurde:

$permissions     = $mod->getController()->getPermissions();      // [... 'save' ...]
$permissionsBase = $mod->getController()->getBasePermissions();  // ['getListForTbl','removeGroup','clear']
$permissions     = array_merge($permissions, $permissionsBase);  // base wins — 'save' is gone

Die Prüfung schlägt offen fehl: Eine Aktion, die nicht in der Map enthalten ist, wird niemals verweigert.

2. Ein wiederverwendbarer Nonce, der an Fremde gemailt wird — save erforderte weiterhin einen pps_nonce, aber die Abonnement-Bestätigungs-E-Mail bettete genau diese Nonce-Aktion ein. Für abgemeldete Benutzer ist ein WordPress-Nonce auf uid=0 geschlüsselt, sodass das für einen anonymen Abonnenten erzeugte Token für jeden anonymen Angreifer gültig ist.

3. Keine serverseitige Rollen-Allowlist — createWpSubscriber() übergab die konfigurierte Rolle direkt an WP_User::set_role(). Die sichere Rollenliste des Plugins (die administrator ausschließt) wurde nur beim Rendern des Admin-Dropdowns angewendet — eine reine UI-Kontrolle.

Verkettet: Abonnieren, um einen Nonce zu erhalten → diesen gegen popup::save wiederverwenden, um sub_wp_create_user_role=administrator zu setzen → den Abonnement-Ablauf auslösen → persistentes Admin- Konto.

Vollständige Schritt-für-Schritt-Anleitung mit Datei-/Zeilenangaben: docs/ANALYSIS.md.


Erkennung — der passive Checker

poc/cve_2026_18322_check.py ermittelt, ob eine Website eine betroffene Version ausführt. Er versucht niemals eine Ausnutzung: Er sendet einfache HTTP-GET-Anfragen und liest die Version, die die Installation über sich selbst veröffentlicht.

Installation

git clone <this-repo> && cd CVE-2026-18322
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

requests wird empfohlen, ist aber optional — das Tool greift auf die Standardbibliothek zurück.

Verwendung

# Single target
python3 poc/cve_2026_18322_check.py https://example.com

# With supporting evidence
python3 poc/cve_2026_18322_check.py https://example.com -v

# Many targets, concurrently, exporting results
python3 poc/cve_2026_18322_check.py -f targets.txt -t 20 --json results.json
python3 poc/cve_2026_18322_check.py -f targets.txt --csv results.csv --only-vulnerable

# Through a proxy, ignoring TLS errors (lab use)
python3 poc/cve_2026_18322_check.py https://staging.internal -k --proxy http://127.0.0.1:8080

Ziele können als Argumente oder über -f angegeben werden (- liest stdin). Ein bloßer Hostname wird als https:// angenommen.

Beispiel

$ python3 poc/cve_2026_18322_check.py https://example.com -v
[VULNERABLE] https://example.com/  (Smart Popup by Supsystic 1.11.2)  < 1.13.0 affected by CVE-2026-18322; upgrade to 1.13.0+
      - asset-version: plugin asset enqueued with ?ver=1.11.2  (https://example.com/)
      - homepage-reference: references /plugins/popup-by-supsystic/  (https://example.com/)
      - readme: plugin readme.txt is publicly readable  (https://example.com/wp-content/plugins/popup-by-supsystic/readme.txt)
      - readme-stable-tag: Stable tag: 1.11.2  (.../readme.txt)

Status

StatusBedeutung
VULNERABLEPlugin bei < 1.13.0 erkannt
NOT_VULNERABLEPlugin bei >= 1.13.0 erkannt
PLUGIN_DETECTED_VERSION_UNKNOWNPlugin vorhanden, Version nicht bestimmbar — manuell überprüfen
PLUGIN_NOT_DETECTEDKein Hinweis auf das Plugin (kein Beweis für Abwesenheit)
ERRORZiel nicht erreichbar oder fehlerhaft

Exit-Codes: 0 = keine anfälligen Ziele, 1 = mindestens ein anfälliges, 2 = Verwendungsfehler.

Wie es erkennt

Zwei passive Signale, beide einfache HTTP-GET-Anfragen an öffentliche Ressourcen:

  1. Asset-Cache-Buster — das Plugin lädt sein CSS/JS mit ?ver=PPS_VERSION (classes/frame.php:410,473), sodass die Startseite oft die exakte Version preisgibt.
  2. readme.txt — Stable tag: ist maßgeblich und hat Vorrang vor einem möglicherweise veralteten gecachten Asset; das Changelog dient als Fallback.

Der Startseiten-Scan entdeckt auch umbenannte wp-content-Verzeichnisse (z. B. Bedrocks /app/), sodass die readme-Suche dem tatsächlichen Layout der Website folgt.


Sicherheit

Das Erkennungswerkzeug versucht keine Ausnutzung. Hier wird kein weaponisierter Exploit für diese CVE veröffentlicht: Der einzige Code, der die vollständige Kette ausführt, ist fest auf das lokale Labor beschränkt (siehe unten).

Der passive Checker führt nur Versions-Fingerprinting durch. Sein HttpClient bietet kein anderes HTTP-Verb als GET — konstruktiv erzwungen und in der Testsuite zugesichert, sodass er selbst versehentlich keine zustandsändernde Anfrage senden kann. Er ruft niemals popup::save auf, sendet keinen sub_wp_create_user_role-Parameter, übermittelt kein Abonnement-Formular, löst keine Bestätigungs-E-Mail aus und erstellt oder ändert keinen Benutzer, kein Popup und keine Einstellung. Er liest zwei öffentliche Ressourcen — die Startseite und readme.txt — und nichts anderes.

Diese Sicherheit hat ihren Preis, offen gesagt: Das Urteil ist nur so gut wie die Versions- Metadaten, die der Host veröffentlicht. Abwägungen und Fehlermodi: §9.

Der Labor-Exploit läuft nur im Labor

Tool herunterladen