Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-1581-Analysis-Lab — Reproduit CVE-2026-1581, une injection SQL non authentifiée basée sur le temps dans wpForo Forum <=2.4.14, avec un laboratoire Docker et un PoC pour démontrer la vulnérabilité et vérifier le correctif. | Kitploit
Outils/GitHubGitHub/rootdirective-sec/cve-2026-1581-analysis-lab
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubrootdirective-sec/cve-2026-1581-analysis-lab

CVE-2026-1581-Analysis-Lab

Reproduit CVE-2026-1581, une injection SQL non authentifiée basée sur le temps dans wpForo Forum <=2.4.14, avec un laboratoire Docker et un PoC pour démontrer la vulnérabilité et vérifier le correctif.

Voir le dépôt
112il y a 7 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-1581 — wpForo Forum (<= 2.4.14) Injection SQL basée sur le temps non authentifiée (ORDER BY)

ภาษาไทย


Résumé Exécutif

ChampDétail
ID CVECVE-2026-1581
PluginwpForo Forum
Versions affectées<= 2.4.14
Version corrigée2.4.15
Type de vulnérabilitéInjection SQL basée sur le temps non authentifiée (ORDER BY)
Score CVSS7.5 (Élevé)
Vecteur CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
  • CVE-2026-1581 est une vulnérabilité d'injection SQL basée sur le temps non authentifiée dans le plugin wpForo Forum (<= 2.4.14). Le paramètre wpfob est utilisé dans une clause ORDER BY avec uniquement une assainissement de texte appliqué, permettant à un attaquant non authentifié d'injecter des expressions SQL arbitraires et de lire des données depuis la base de données.

  • L'éditeur a corrigé ce problème dans la version 2.4.15 en remplaçant sanitize_text_field() par wpforo_sanitize_orderby(), qui applique une liste blanche contextuelle.


Portée et Sécurité

  • À exécuter uniquement en localhost + Docker Compose.

  • Le PoC est une preuve de temporisation basée sur le temps pour démontrer la différence entre les versions vulnérable et corrigée.

  • Ne pas utiliser contre un système sans autorisation explicite.


Preuves en un Coup d'Œil

  • Preuve de version : La page /community/ charge /wp-content/plugins/wpforo/assets/js/frontend.js?ver=2.4.14 (vulnérable) vs 2.4.15 (corrigée).

  • Preuve de code : sanitize_text_field(WPF()->GET['wpfob']) → wpforo_sanitize_orderby(..., context, default)

  • Preuve de comportement : wpfob=modified,(SELECT SLEEP(5)) provoque un délai d'environ 5 s sur la version vulnérable ; la version corrigée répond presque au niveau de référence.


Ce Que J'ai Observé dans l'Avis CVE

  • L'avis CVE indique uniquement qu'il s'agit d'une injection SQL basée sur le temps via le paramètre wpfob, corrigée dans la version 2.4.15. Au moment de l'analyse, aucun PoC public n'était disponible.

  • Cette analyse a donc été construite par différenciation du code source entre les versions 2.4.14 et 2.4.15, en traçant le paramètre depuis l'entrée HTTP jusqu'à l'assainissement, puis jusqu'au point où il est utilisé pour construire la requête SQL — afin de comprendre la cause racine et de reproduire le problème.

vulnx CVE-2026-1581


1) Analyse Pilotée par le Code Source

1.1 Localisation de wpfob

En commençant par une recherche de wpfob dans le code source, il a été constaté que la page Recent prend la valeur directement d'un paramètre GET et l'assigne comme argument orderby.

find wpfob

Vulnérable (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';

Corrigé (2.4.15) — même fichier, assainisseur remplacé :

  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';

Pourquoi se concentrer sur recent.php ? Parce que c'est une route déclenchable où wpfob est assigné directement à $args['orderby'].


1.2 Flux de données vers SQL : ORDER BY ...

Une fois $args['orderby'] défini, il circule dans le constructeur de requêtes de wpForo pour construire la clause ORDER BY.

Concaténation ORDER BY (vulnérable 2.4.14)

classes/Topics.php :

SQL builder: ORDER BY concatenation in Topics.php

classes/Posts.php :

SQL builder: ORDER BY concatenation in Posts.php

Explication

  • sanitize_text_field() ne fait que supprimer/nettoyer la chaîne — il n'applique pas de liste blanche des noms de colonnes autorisés.
  • Comme orderby est concaténé directement dans ORDER BY <orderby>, un attaquant peut injecter des expressions SQL arbitraires dans la position ORDER BY.

Référence : https://developer.wordpress.org/reference/functions/sanitize_text_field/


1.3 Points Clés du Correctif / Diff (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 Nouvelle fonction de correctif : wpforo_sanitize_orderby()

La version 2.4.15 introduit un assainisseur de liste blanche contextuelle qui renvoie la valeur par défaut si l'entrée n'est pas dans la liste autorisée :

whitelistor


2) Conception du Laboratoire (Vulnérable vs Corrigé)

2.1 Services dans 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 — utilise wp-cli pour installer WordPress, installer le plugin, créer la page /community/ avec le shortcode [wpforo], configurer les permaliens, générer .htaccess, et créer des artefacts de vérification.

2.2 Route de Test

En lisant le code source, wpfob est utilisé explicitement sur la page recent :

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

3) Reproduction : Preuve de Temporisation

Au moins 1 sujet et 1 message doivent exister avant le test.

Télécharger l’outil