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-1581-Analysis-Lab — Reproduziert CVE-2026-1581, eine nicht authentifizierte zeitbasierte SQL-Injection in wpForo Forum <=2.4.14, mit einem Docker-Lab und PoC, um die Schwachstelle zu demonstrieren und den Patch zu verifizieren. | Kitploit
Tools/GitHubGitHub/rootdirective-sec/cve-2026-1581-analysis-lab
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungLabs & Praxis
GitHubrootdirective-sec/cve-2026-1581-analysis-lab

CVE-2026-1581-Analysis-Lab

Reproduziert CVE-2026-1581, eine nicht authentifizierte zeitbasierte SQL-Injection in wpForo Forum <=2.4.14, mit einem Docker-Lab und PoC, um die Schwachstelle zu demonstrieren und den Patch zu verifizieren.

Repository anzeigen
112vor 7 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-1581 — wpForo Forum (<= 2.4.14) Nicht authentifizierte zeitbasierte SQL-Injection (ORDER BY)

ภาษาไทย


Zusammenfassung

FeldDetail
CVE-IDCVE-2026-1581
PluginwpForo Forum
Betroffene Versionen<= 2.4.14
Gepatchte Version2.4.15
SchwachstellentypNicht authentifizierte zeitbasierte SQL-Injection (ORDER BY)
CVSS-Score7.5 (Hoch)
CVSS-VektorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
  • CVE-2026-1581 ist eine nicht authentifizierte zeitbasierte SQL-Injection-Schwachstelle im wpForo Forum Plugin (<= 2.4.14). Der Parameter wpfob wird in einer ORDER BY-Klausel verwendet, wobei nur eine Textbereinigung angewendet wird. Dadurch kann ein nicht authentifizierter Angreifer beliebige SQL-Ausdrücke injizieren und Daten aus der Datenbank auslesen.

  • Der Hersteller hat dies in Version 2.4.15 behoben, indem sanitize_text_field() durch wpforo_sanitize_orderby() ersetzt wurde, das eine kontextbezogene Whitelist erzwingt.


Umfang & Sicherheit

  • Nur in localhost + Docker Compose ausführen.

  • Der PoC ist ein zeitbasierter Timing-Nachweis, um den Unterschied zwischen der verwundbaren und der gepatchten Version zu demonstrieren.

  • Nicht gegen Systeme ohne ausdrückliche Genehmigung verwenden.


Nachweise auf einen Blick

  • Versionsnachweis: Die Seite /community/ lädt /wp-content/plugins/wpforo/assets/js/frontend.js?ver=2.4.14 (verwundbar) vs. 2.4.15 (gepatcht).

  • Code-Nachweis: sanitize_text_field(WPF()->GET['wpfob']) → wpforo_sanitize_orderby(..., context, default)

  • Verhaltensnachweis: wpfob=modified,(SELECT SLEEP(5)) verursacht eine ~5s-Verzögerung auf der verwundbaren Version; die gepatchte Version antwortet nahe der Baseline.


Was ich aus dem CVE-Advisory beobachtet habe

  • Das CVE-Advisory gibt nur an, dass es sich um eine zeitbasierte SQL-Injection über den Parameter wpfob handelt, die in 2.4.15 behoben wurde. Zum Zeitpunkt der Analyse war kein öffentlicher PoC verfügbar.

  • Dieser Bericht wurde daher durch Source-Code-Diffing zwischen 2.4.14 und 2.4.15 erstellt, wobei der Parameter von der HTTP-Eingabe über die Bereinigung bis zu dem Punkt verfolgt wurde, an dem er zur Konstruktion der SQL-Abfrage verwendet wird — um die Ursache zu verstehen und das Problem zu reproduzieren.

vulnx CVE-2026-1581


1) Quellcode-gestützte Analyse

1.1 Lokalisierung von wpfob

Ausgehend von einem grep nach wpfob im Quellcode wurde festgestellt, dass die Seite Recent den Wert direkt aus einem GET-Parameter übernimmt und ihn als orderby-Argument zuweist.

find wpfob

Verwundbar (2.4.14) — themes/classic/recent.php:

  32 | $args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'modified';
  74 | $args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'created';

Gepatcht (2.4.15) — gleiche Datei, Bereiniger ersetzt:

  32 | $args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'topics', 'modified' ) : 'modified';
  74 | $args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'posts', 'created' ) : 'created';

Warum der Fokus auf recent.php? Weil es sich um eine auslösbare Route handelt, bei der wpfob direkt $args['orderby'] zugewiesen wird.


1.2 Datenfluss zur SQL: ORDER BY ...

Sobald $args['orderby'] gesetzt ist, fließt es in den Query-Builder von wpForo, um die ORDER BY-Klausel zu konstruieren.

ORDER BY-Verkettung (verwundbar 2.4.14)

classes/Topics.php:

SQL-Builder: ORDER BY-Verkettung in Topics.php

classes/Posts.php:

SQL-Builder: ORDER BY-Verkettung in Posts.php

Erklärung

  • sanitize_text_field() entfernt/bereinigt nur die Zeichenkette — es erzwingt keine Whitelist der erlaubten Spaltennamen.
  • Da orderby direkt in ORDER BY <orderby> verkettet wird, kann ein Angreifer beliebige SQL-Ausdrücke an der ORDER BY-Position injizieren.

Referenz: https://developer.wordpress.org/reference/functions/sanitize_text_field/


1.3 Patch-/Diff-Highlights (2.4.14 → 2.4.15)

1.3.1 Diff: recent.php

32c32
< 	$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'modified';
---
> 	$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'topics', 'modified' ) : 'modified';
74c74
< 	$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'created';
---
> 	$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'posts', 'created' ) : 'created';

1.3.2 Diff: wpforo.php

1036c1036
< 					$args['orderby'] = sanitize_text_field( $get['wpfob'] );
---
> 					$args['orderby'] = wpforo_sanitize_orderby( $get['wpfob'], 'search', 'relevancy' );
1077c1077
< 					$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'modified';
---
> 					$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'topics', 'modified' ) : 'modified';
1153c1153
< 					$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? sanitize_text_field( WPF()->GET['wpfob'] ) : 'created';
---
> 					$args['orderby']   = ( ! empty( WPF()->GET['wpfob'] ) ) ? wpforo_sanitize_orderby( WPF()->GET['wpfob'], 'posts', 'created' ) : 'created';

1.3.3 Neue Patch-Funktion: wpforo_sanitize_orderby()

Version 2.4.15 führt einen kontextbezogenen Whitelist-Bereiniger ein, der den Standardwert zurückgibt, wenn die Eingabe nicht in der erlaubten Liste enthalten ist:

whitelistor


2) Laboraufbau (Verwundbar vs. Gepatcht)

2.1 Dienste in Docker Compose

  • wp_vuln (WordPress + wpForo 2.4.14) → http://localhost:8081
  • wp_patched (WordPress + wpForo 2.4.15) → http://localhost:8082
  • db_vuln / db_patched (MariaDB)
  • seed_vuln / seed_patched — verwendet wp-cli, um WordPress zu installieren, das Plugin zu installieren, die Seite /community/ mit dem [wpforo]-Shortcode zu erstellen, Permalinks zu konfigurieren, .htaccess zu generieren und Verifikationsartefakte zu erstellen.

2.2 Testroute

Aus der Lektüre des Quellcodes geht hervor, dass wpfob explizit auf der Seite recent verwendet wird:

  • http://localhost:8081/community/recent/?view=opened
  • http://localhost:8082/community/recent/?view=opened

3) Reproduktion: Timing-Nachweis

Vor dem Test müssen mindestens 1 Thema und 1 Beitrag vorhanden sein.

3.1 Warum "Beiträge erforderlich" sind

Tool herunterladen