InvoicePlane Unauthenticated Path Traversal in Guest Controller (CVE-2026-23491)
by Lukasz Rybak (lukasz-rybak) · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-23491
- Category
- web
- Affected product
- InvoicePlane
- Affected versions
- v1.6.3 (fixed by upstream commit add8bb798dde621f886823065ef1841986543c6)
- Disclosed
- 2026-07-05
- Patch status
- patched
Tags
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-04 |
| Author / Researcher | Lukasz Rybak (lukasz-rybak) |
| CVE / Advisory | CVE-2026-23491 |
| Category | web |
| Severity | Critical |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | invoiceplane, path-traversal, directory-traversal, unauthenticated, information-disclosure, php, arbitrary-file-read |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | InvoicePlane |
| Versions Affected | v1.6.3 (fixed by upstream commit add8bb798dde621f886823065ef1841986543c6) |
| Language / Platform | PHP (CodeIgniter-based) |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
InvoicePlane v1.6.3’s Guest module exposes a get_file controller action that serves uploaded customer files. The action urldecode()s the requested filename and concatenates it directly onto a fixed base directory (uploads/customer_files/) before passing the result to readfile(), without stripping directory-traversal sequences. An unauthenticated attacker can therefore supply a URL-encoded ../ sequence to escape the intended upload directory and read arbitrary files on the server, including application configuration containing database credentials and the encryption key.
Vulnerability Details
Root Cause
application/modules/guest/controllers/Get.php::get_file() builds the file path as $this->targetPath . urldecode($filename) and passes it straight to readfile(), with no canonicalization or traversal-sequence filtering.
Attack Vector
- Attacker identifies a reachable InvoicePlane v1.6.3 instance (no authentication needed).
- Attacker sends a GET request to the guest file-serving endpoint with a URL-encoded traversal path in place of a real filename, e.g.
..%2f..%2fipconfig.php. - The server decodes the segment, concatenates it onto
uploads/customer_files/, and resolves outside that directory. readfile()streams back the contents of the targeted file (e.g. the app’sipconfig.php, which containsDB_PASSWORDandENCRYPTION_KEY).
Impact
Unauthenticated disclosure of arbitrary files readable by the web server user — most critically the application configuration, which can expose database credentials and the encryption key and lead to full application compromise.
Environment / Lab Setup
Target: InvoicePlane v1.6.3 (default install layout)
Attacker: curl (or any HTTP client)
Proof of Concept
PoC Script
See
exploit.shin this folder (extracted from the source advisory’s curl reproduction command).poc-screenshot.pngis the original author’s captured proof of a successful leak.
| |
The script URL-encodes the traversal path and issues the GET request against the vulnerable guest/get/get_file endpoint, printing the leaked file contents (in the original report, ipconfig.php containing sensitive environment variables) to stdout.
Detection & Indicators of Compromise
GET /index.php/guest/get/get_file/..%2f..%2fipconfig.php HTTP/1.1
Signs of compromise:
- Requests to
/index.php/guest/get/get_file/containing%2for../sequences. - 200 responses from that endpoint for filenames outside
uploads/customer_files/. - Unexpected outbound access to config-like filenames (
ipconfig.php,.env, etc.) via the guest endpoint.
Remediation
| Action | Detail |
|---|---|
| Primary fix | Upgrade to the patched InvoicePlane release containing commit add8bb798dde621f886823065ef1841986543c6. |
| Interim mitigation | Add a WAF/reverse-proxy rule blocking encoded traversal sequences (%2e%2e, %2f) to the guest/get/get_file path, or disable the endpoint until patched. |
References
Notes
Mirrored from https://github.com/lukasz-rybak/CVE-2026-23491 on 2026-07-05.
| |