
pfSense CE 2.9.0-DEVELOPMENT - मध्यम - रिमोट - SQLi - voucher_expire WHERE
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-voucher-expire-sqli
Class: SQLi Reach: Remote
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
voucher.inc captiveportal_read_db("WHERE username = '{$voucher}'") फिर first-row sessionid को captiveportal_remove_entries में। Unauth login INSERT SQLite3::escapeString का उपयोग करता है।
| ID | अभी तक कोई CVE नहीं |
| Class | SQLi |
| Reach | Remote (authenticated WebGUI जब तक अन्यथा न कहा गया हो) |
| CWE | CWE-89 |
| CVSS | Medium: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L |
| Product | pfSense CE |
| Affected | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| Auth | WebGUI session with page-status-captiveportal-expire / page-services-captiveportal-vouchers |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
मैंने public master 9363ac5 को pin किया। Lab pinned sink का PHP gadget है, 127.0.0.1:19280 पर loopback HTTP।
Series write-up: https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Method | Sink | Privilege |
|---|---|---|
| POST voucher expire token | captiveportal_read_db WHERE username = '{$voucher}' | Integrity: Lab-proven: UNION ने दूसरा sessionid चुना और stacked-UPDATE ने उस row को फिर से लिखा। CONTROL expire ने केवल A को delete किया। Unauth login path escaped रहा। |
| same leftover | same sink | Recon: Inferred: UNION captiveportal{zone}.db से अन्य session columns पढ़ सकता है। |
| same leftover | same sink | Availability: Lab-proven: injected first row का disconnect; उस zone DB पर दूसरे session को delete/rewrite कर सकता है। |
Requires: page-status-captiveportal-expire / page-services-captiveportal-vouchers. CSRF-magic on POST जब तक अन्यथा न कहा गया हो। WebGUI PHP-FPM root है।
Requires: page-status-captiveportal-expire / page-services-captiveportal-vouchers. CSRF-magic on POST जब तक अन्यथा न कहा गया हो। WebGUI PHP-FPM root है। CSRF-magic on POST जब तक अन्यथा न कहा गया हो। WebGUI PHP-FPM root है।
Unauth login escape. voucher_auth अभी भी escapeshellarg करता है। कोई shell नहीं। कोई other-zone DB नहीं। कोई GUI cookie नहीं।
कोई Diagnostics: Command नहीं जब तक वह page भी granted न हो।
cd lab
./run.sh
Loopback 127.0.0.1:19280. Compose project pfsense-voucher-expire-sqli. Witness PFSENSE-VOUCHER-EXPIRE-SQLI-WITNESS. केवल loopback: 127.0.0.1:19280. Compose project pfsense-voucher-expire-sqli. Witness PFSENSE-VOUCHER-EXPIRE-SQLI-WITNESS. Pinned lines का PHP gadget. Run के बाद stack tear down हो जाता है।
अंतिम पंक्ति:
SUCCESS PFSENSE-VOUCHER-EXPIRE-SQLI control-expire-only-a=yes control-login-escaped=yes trigger-rewrite-b=yes PFSENSE-VOUCHER-EXPIRE-SQLI-WITNESS
Bind parameters. voucher को SQL में concatenate करना बंद करें।
9363ac5b8651a1c7a333180425ce7719070f95f9