Skip to content
Heist/ feed
Back to feed
Medium

OPNsense < 26.1.9 Stored XSS via Firewall Rule Description Field

Type: advisorySources: OSV

OPNsense before 26.1.9 contains a stored cross-site scripting vulnerability that allows authenticated attackers with firewall rule management privileges to inject arbitrary HTML or JavaScript by embedding payloads in the firewall rule description field via the filter API endpoint. The unsanitized description value is persisted and later rendered through the default cell formatter in opnsense_bootgrid.js, which assigns raw cell content to innerHTML, causing injected scripts to execute in the browser of any authenticated user who views the Firewall Rules page, enabling session hijacking or credential theft.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-49131
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 15:28 UTC · Revision 1

Source evidence

OPNsense < 26.1.9 Stored XSS via Firewall Rule Description Field

core-osv · Original source

Published 3 Aug 2026, 20:29 UTC

OPNsense before 26.1.9 contains a stored cross-site scripting vulnerability that allows authenticated attackers with firewall rule management privileges to inject arbitrary HTML or JavaScript by embedding payloads in the firewall rule description field via the filter API endpoint. The unsanitized description value is persisted and later rendered through the default cell formatter in opnsense_bootgrid.js, which assigns raw cell content to innerHTML, causing injected scripts to execute in the browser of any authenticated user who views the Firewall Rules page, enabling session hijacking or credential theft.

osv:CVE-2026-49131
Complete source record
{
  "id": "eec7cf4123f4f688d8f102bd91c231670171d32c46ee3f9327ee8c1a869dc1a8",
  "url": "https://osv.dev/vulnerability/CVE-2026-49131",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "OPNsense < 26.1.9 Stored XSS via Firewall Rule Description Field",
    "summary": "OPNsense before 26.1.9 contains a stored cross-site scripting vulnerability that allows authenticated attackers with firewall rule management privileges to inject arbitrary HTML or JavaScript by embedding payloads in the firewall rule description field via the filter API endpoint. The unsanitized description value is persisted and later rendered through the default cell formatter in opnsense_bootgrid.js, which assigns raw cell content to innerHTML, causing injected scripts to execute in the browser of any authenticated user who views the Firewall Rules page, enabling session hijacking or credential theft.",
    "evidence": "osv:CVE-2026-49131",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-49131",
      "aliases": [
        "CVE-2026-49131"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/opnsense/core",
              "type": "GIT",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "b11d6b340716e240868ab19a369e058a46f0876f"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "26.1.9"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandardRange"
                  },
                  {
                    "range": [
                      {
                        "fixed": "b11d6b340716e240868ab19a369e058a46f0876f"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  },
                  {
                    "range": [
                      {
                        "introduced": "0"
                      },
                      {
                        "fixed": "26.1.9"
                      }
                    ],
                    "source": "DESCRIPTION"
                  }
                ]
              }
            }
          ],
          "versions": [
            "26.1.8",
            "26.1.6",
            "26.1.7",
            "26.1.5",
            "26.1.4",
            "26.1.3",
            "26.1.2",
            "26.1.1",
            "26.1",
            "26.1.r2",
            "26.1.r1",
            "26.1.r",
            "26.1.b",
            "26.1.a",
            "25.7.r",
            "25.7.b",
            "25.7.a",
            "25.1.r",
            "25.1.b",
            "25.1.a",
            "24.7.r",
            "24.7.b",
            "24.7.a",
            "24.1.r",
            "24.1.b",
            "24.1.a",
            "23.7.r",
            "23.7.b",
            "23.7.a",
            "23.1.r",
            "23.1.b",
            "23.1.a",
            "22.7.r",
            "22.7.b",
            "22.7.a",
            "22.1.r",
            "22.1.b",
            "22.1.a",
            "21.7.r",
            "21.7.b",
            "21.7.a",
            "21.1.r",
            "21.1.b",
            "21.1.a",
            "20.7.r",
            "20.7.b",
            "20.7.a",
            "20.1.r",
            "20.1.b",
            "20.1.a",
            "19.7.r",
            "19.7.b",
            "19.7.a",
            "19.1.r",
            "19.1.b",
            "19.1.a",
            "18.7.r",
            "18.7.b",
            "18.7.a",
            "18.1.r",
            "18.1.b",
            "18.1.a",
            "17.7.r",
            "17.7.b",
            "17.7.a",
            "17.1.r",
            "17.1.b",
            "17.1.a",
            "16.7.r",
            "16.7.b",
            "16.7.a",
            "15.7",
            "15.1.12",
            "15.1.11.4",
            "15.1.11.3",
            "15.1.11.2",
            "15.1.11.1",
            "15.1.11",
            "15.1.10.2",
            "15.1.10",
            "15.1.9.2",
            "15.1.9.1",
            "15.1.9",
            "15.1.8.4",
            "15.1.8.3",
            "15.1.8.2",
            "15.1.8.1",
            "15.1.8",
            "15.1.7.2",
            "15.1.7.1",
            "15.1.7",
            "15.1.6.1",
            "15.1.6",
            "15.1.5",
            "15.1.4",
            "15.1.3",
            "15.1.2",
            "15.1.1",
            "15.1"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-49131.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:29.829277675Z",
      "provider": "osv",
      "references": [
        "https://docs.opnsense.org/releases/CE_26.1.html#june-02-2026",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/49xxx/CVE-2026-49131.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-49131",
        "https://www.vulncheck.com/advisories/opnsense-stored-xss-via-firewall-rule-description-field",
        "https://github.com/opnsense/core/commit/b11d6b340716e240868ab19a369e058a46f0876f",
        "https://github.com/opnsense/core"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-79"
        ],
        "cna_assigner": "VulnCheck",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/49xxx/CVE-2026-49131.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-49131",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 496824,
  "published_at": "2026-08-03T20:29:48.071+00:00"
}