Search

Find a vulnerability

Search criteria Use this form to refine search results.
Full-text search supports keyword queries with ranking and filtering.
You can combine vendor, product, and sources to narrow results.
Enable “Apply ordering” to sort by date instead of relevance.

    181 vulnerabilities

    CVE-2026-94404 (GCVE-0-2026-94404)

    Vulnerability from cvelistv5 – Published: 2026-09-21 13:50 – Updated: 2026-09-21 14:48
    VLAI
    Title
    MISP CSRF vulnerability allows unauthorized attribute modification
    Summary
    MISP has a security issue that could let an attacker change threat-intelligence data through a logged-in user’s browser without that user knowingly approving the change. The affected function did not properly enforce MISP’s usual protection against forged requests. Because of this, an attacker could create a malicious webpage that silently sends a request to MISP when visited by an authenticated user. If successful, the attacker could change details of an attribute, such as its value, type, category, comment, distribution settings, or related timestamps. The attack requires the victim to already be logged in to MISP and to visit an attacker-controlled page. The main impact is unauthorized modification of threat-intelligence data, which could lead to incorrect indicators, wrong classifications, or altered sharing settings and reduce confidence in the accuracy of the information stored in MISP. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 14:34 UTC
    CWE
    • CWE-352 - Cross-Site Request Forgery (CSRF)
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 13:38
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/dfbae33f9.patch beb65b8daaa1…
    Confidence
    high
    Commit Subject Patch SHA-256
    dfbae33f9a93 fix: [security] Keep the CSRF check on the inline attribute beb65b8daaa1…
    Fix summary

    The editField action is removed from the Security component's unlockedActions list and added to the _csrfTokenHeaderOnly array. This enforces CSRF token validation (accepted either in the X-CSRF-Token header or in the request body) while dropping only the field-hash check, which the existing AJAX callers (Overmind index and legacy inline forms) cannot satisfy. Legitimate callers are unaffected because they already transmit a valid CSRF token.

    Patch summary

    In app/Controller/AttributesController.php, the string 'editField' is added to the _csrfTokenHeaderOnly() call in beforeFilter(), enabling header-or-body CSRF token validation for that action. Simultaneously, the line adding 'editField' to $this->Security->unlockedActions[] is removed, so the action is no longer exempt from CSRF checks. A comment block is added explaining that both the Overmind index (token in X-CSRF-Token header) and legacy inline forms (token in body) already carry a valid token, so only the unsatisfiable field-hash check is dropped.

    CVSS rationale

    AV:N: The attack is delivered over the network via a malicious web page. AC:L: Crafting a CSRF form is straightforward and requires no race conditions or special timing. AT:N: The target MISP instance is not under the attacker's control. PR:N: The attacker needs no account on MISP; the victim's existing session is sufficient. UI:P: The victim must passively load the attacker's page (e.g., visit a link), which triggers the auto-submitting form; no explicit click or form submission by the victim is required. VC:N: The attack modifies data but does not disclose confidential information. VI:H: The attacker can alter attribute values, types, categories, distribution, and timestamps, corrupting threat-intelligence data for all users. VA:N: No denial-of-service impact is indicated. SC/SI/SA:N: No secondary impacts on other systems are evidenced.

    Weakness rationale
    • CWE-352 The editField action was placed in unlockedActions, which explicitly bypassed the CSRF token check. This allowed a cross-site form post to modify attribute data using only the victim's session cookie, a textbook CSRF weakness.
    Attack pattern rationale
    • CAPEC-124 The patch description explicitly states that a cross-site form post carrying the victim's session cookie could rewrite attribute fields. This is the canonical CSRF attack pattern: an attacker induces a victim's browser to send an authenticated request to a target application without the victim's knowledge or consent. CAPEC-124 is the most direct and specific match.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary (v2.5.47 with 7 commits after the fix); no explicit 'affected' or 'fixed' version strings are provided in the metadata, so the exact version boundary is approximate.
    • UI:P (Passive) is assumed because the commit message describes a 'cross-site form post' that auto-submits when the victim's browser loads the attacker's page; if the attack requires the victim to explicitly click a link or submit a form, UI:A would be more appropriate.
    • PR:N is assumed because the attacker does not need their own MISP account; the victim's authenticated session cookie is sufficient. If MISP deployments require additional authentication factors (e.g., MFA) that would block a cross-site form post, the effective exploitability may be lower.
    • The CAPEC-124 mapping is the closest standard pattern for CSRF; no more specific CAPEC exists for the CakePHP unlockedActions bypass mechanism.
    • The Co-Authored-By AI tool is included as a 'tool' credit based on explicit commit metadata; it is not a human contributor.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 high 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94404",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T14:34:58.261364Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T14:48:16.245Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "AttributesController"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/AttributesController.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP has a security issue that could let an attacker change threat-intelligence data through a logged-in user\u2019s browser without that user knowingly approving the change.\u003c/p\u003e\u003cp\u003eThe affected function did not properly enforce MISP\u2019s usual protection against forged requests. Because of this, an attacker could create a malicious webpage that silently sends a request to MISP when visited by an authenticated user.\u003c/p\u003e\u003cp\u003eIf successful, the attacker could change details of an attribute, such as its value, type, category, comment, distribution settings, or related timestamps.\u003c/p\u003e\u003cp\u003eThe attack requires the victim to already be logged in to MISP and to visit an attacker-controlled page.\u003c/p\u003e\u003cp\u003eThe main impact is unauthorized modification of threat-intelligence data, which could lead to incorrect indicators, wrong classifications, or altered sharing settings and reduce confidence in the accuracy of the information stored in MISP.\u003c/p\u003eVersion affected: \u0026lt;2.5.47"
                }
              ],
              "value": "MISP has a security issue that could let an attacker change threat-intelligence data through a logged-in user\u2019s browser without that user knowingly approving the change.\n\nThe affected function did not properly enforce MISP\u2019s usual protection against forged requests. Because of this, an attacker could create a malicious webpage that silently sends a request to MISP when visited by an authenticated user.\n\nIf successful, the attacker could change details of an attribute, such as its value, type, category, comment, distribution settings, or related timestamps.\n\nThe attack requires the victim to already be logged in to MISP and to visit an attacker-controlled page.\n\nThe main impact is unauthorized modification of threat-intelligence data, which could lead to incorrect indicators, wrong classifications, or altered sharing settings and reduce confidence in the accuracy of the information stored in MISP.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-124",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-124 Cross-Site Request Forgery"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 7.1,
                "baseSeverity": "HIGH",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-352",
                  "description": "CWE-352 Cross-Site Request Forgery (CSRF)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T13:50:46.410Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/dfbae33f9"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe editField action is removed from the Security component\u0027s unlockedActions list and added to the _csrfTokenHeaderOnly array. This enforces CSRF token validation (accepted either in the X-CSRF-Token header or in the request body) while dropping only the field-hash check, which the existing AJAX callers (Overmind index and legacy inline forms) cannot satisfy. Legitimate callers are unaffected because they already transmit a valid CSRF token.\u003c/p\u003e"
                }
              ],
              "value": "The editField action is removed from the Security component\u0027s unlockedActions list and added to the _csrfTokenHeaderOnly array. This enforces CSRF token validation (accepted either in the X-CSRF-Token header or in the request body) while dropping only the field-hash check, which the existing AJAX callers (Overmind index and legacy inline forms) cannot satisfy. Legitimate callers are unaffected because they already transmit a valid CSRF token."
            }
          ],
          "title": "MISP CSRF vulnerability allows unauthorized attribute modification",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The affected version range is inferred from the tag_version_boundary (v2.5.47 with 7 commits after the fix); no explicit \u0027affected\u0027 or \u0027fixed\u0027 version strings are provided in the metadata, so the exact version boundary is approximate.",
                      "UI:P (Passive) is assumed because the commit message describes a \u0027cross-site form post\u0027 that auto-submits when the victim\u0027s browser loads the attacker\u0027s page; if the attack requires the victim to explicitly click a link or submit a form, UI:A would be more appropriate.",
                      "PR:N is assumed because the attacker does not need their own MISP account; the victim\u0027s authenticated session cookie is sufficient. If MISP deployments require additional authentication factors (e.g., MFA) that would block a cross-site form post, the effective exploitability may be lower.",
                      "The CAPEC-124 mapping is the closest standard pattern for CSRF; no more specific CAPEC exists for the CakePHP unlockedActions bypass mechanism.",
                      "The Co-Authored-By AI tool is included as a \u0027tool\u0027 credit based on explicit commit metadata; it is not a human contributor."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-124",
                        "rationale": "The patch description explicitly states that a cross-site form post carrying the victim\u0027s session cookie could rewrite attribute fields. This is the canonical CSRF attack pattern: an attacker induces a victim\u0027s browser to send an authenticated request to a target application without the victim\u0027s knowledge or consent. CAPEC-124 is the most direct and specific match."
                      }
                    ],
                    "commit": "dfbae33f9a93bf127fae115bc6cd1a9e03d028e9",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: The attack is delivered over the network via a malicious web page. AC:L: Crafting a CSRF form is straightforward and requires no race conditions or special timing. AT:N: The target MISP instance is not under the attacker\u0027s control. PR:N: The attacker needs no account on MISP; the victim\u0027s existing session is sufficient. UI:P: The victim must passively load the attacker\u0027s page (e.g., visit a link), which triggers the auto-submitting form; no explicit click or form submission by the victim is required. VC:N: The attack modifies data but does not disclose confidential information. VI:H: The attacker can alter attribute values, types, categories, distribution, and timestamps, corrupting threat-intelligence data for all users. VA:N: No denial-of-service impact is indicated. SC/SI/SA:N: No secondary impacts on other systems are evidenced.",
                    "fixSummary": "The editField action is removed from the Security component\u0027s unlockedActions list and added to the _csrfTokenHeaderOnly array. This enforces CSRF token validation (accepted either in the X-CSRF-Token header or in the request body) while dropping only the field-hash check, which the existing AJAX callers (Overmind index and legacy inline forms) cannot satisfy. Legitimate callers are unaffected because they already transmit a valid CSRF token.",
                    "generatedAt": "2026-09-21T13:38:54.473662Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "beb65b8daaa1d2e649f1178cc7f2c774f4ba7e75a13cc000524eef566c4545c8",
                    "patchSummary": "In app/Controller/AttributesController.php, the string \u0027editField\u0027 is added to the _csrfTokenHeaderOnly() call in beforeFilter(), enabling header-or-body CSRF token validation for that action. Simultaneously, the line adding \u0027editField\u0027 to $this-\u003eSecurity-\u003eunlockedActions[] is removed, so the action is no longer exempt from CSRF checks. A comment block is added explaining that both the Overmind index (token in X-CSRF-Token header) and legacy inline forms (token in body) already carry a valid token, so only the unsatisfiable field-hash check is dropped.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "dfbae33f9a93bf127fae115bc6cd1a9e03d028e9",
                        "patchSha256": "beb65b8daaa1d2e649f1178cc7f2c774f4ba7e75a13cc000524eef566c4545c8",
                        "source": "https://github.com/MISP/MISP/commit/dfbae33f9.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/dfbae33f9.patch",
                        "subject": "fix: [security] Keep the CSRF check on the inline attribute"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/dfbae33f9.patch",
                    "subject": "fix: [security] Keep the CSRF check on the inline attribute",
                    "tagVersionBoundary": {
                      "commits_after_fix": 7,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-352",
                        "rationale": "The editField action was placed in unlockedActions, which explicitly bypassed the CSRF token check. This allowed a cross-site form post to modify attribute data using only the victim\u0027s session cookie, a textbook CSRF weakness."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20043"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94404",
        "datePublished": "2026-09-21T13:50:46.410Z",
        "dateReserved": "2026-09-21T13:50:44.676Z",
        "dateUpdated": "2026-09-21T14:48:16.245Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94401 (GCVE-0-2026-94401)

    Vulnerability from cvelistv5 – Published: 2026-09-21 13:36 – Updated: 2026-09-21 14:48
    VLAI
    Title
    MISP Arbitrary Local File Read and SSRF via MISP Export Upload
    Summary
    MISP has a file-handling vulnerability that could let certain authenticated users make the server read files or access internal network services. When importing an XML file, MISP did not properly verify that the uploaded content was actually XML. Because of this, a user with permission to modify data could upload a file containing a local file path or a web address instead. If a local file path was supplied, MISP could read that file from the server. If a URL was supplied, MISP could make a request to that address, including systems that may only be reachable from inside the organization’s network. The vulnerability could therefore expose sensitive local files and allow unauthorized requests to internal services. Exploitation required a valid MISP account with modify permissions, but no additional user interaction was needed. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 14:35 UTC
    CWE
    • CWE-918 - Server-Side Request Forgery (SSRF)
    • CWE-73 - External Control of File Name or Path
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 13:28
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/d5f247b91.patch 004f65b4d416…
    Confidence
    high
    Commit Subject Patch SHA-256
    d5f247b91ad3 fix: [security] Refuse a MISP export upload whose content is 004f65b4d416…
    Fix summary

    The fix introduces two defensive measures in addMISPExportFile(): (1) a pre-parse validation that rejects any uploaded content not containing an XML document marker (the '<' character), preventing path or URL strings from reaching the XML parser; and (2) an explicit readFile => false option passed to Xml::build(), which disables the library's ability to interpret the input as a file path or URL to be read or fetched. Together these changes ensure that only genuine XML document content is parsed and that no server-side file access or network request is triggered by user-supplied data.

    Patch summary

    In app/Model/Event.php, the single line calling Xml::toArray(Xml::build($data)) is replaced with a guard clause that throws an Exception if strpos($data, '<') === false, followed by Xml::toArray(Xml::build($data, ['readFile' => false])). Nine lines are added (including a four-line explanatory comment) and one line is removed. No other files are modified.

    CVSS rationale

    AV:N: exploitation occurs over the network via the MISP web interface. AC:L: the attack is deterministic; uploading a file with a path or URL as content reliably triggers the read/fetch. AT:N: no special target-side conditions are required. PR:L: the attacker needs an authenticated account with perm_modify (a non-privileged but authenticated role). UI:N: the attacker performs the upload autonomously; no victim interaction is needed. VC:H: arbitrary local file read exposes sensitive server data (credentials, configs, keys). VI:N: the imported data is stored as an event but does not corrupt application state or logic. VA:N: no denial-of-service impact is indicated. SC:H: the SSRF component allows the attacker to read responses from internal services (metadata endpoints, admin panels, etc.), impacting subsequent-component confidentiality. SI:N and SA:N: no evidence of integrity or availability impact on subsequent components from the patch evidence.

    Weakness rationale
    • CWE-918 The primary and most severe impact is that an attacker-supplied URL in the uploaded file body causes the MISP server to issue an HTTP request to an arbitrary internal or external address and import the response. This is a textbook SSRF: user-controlled input is used as a network request target by the server.
    • CWE-73 The secondary impact is that a user-supplied local file path in the uploaded file body is passed to Xml::build() which reads that file from the server's filesystem. The attacker controls the file path that the server reads, matching CWE-73. CWE-22 (Path Traversal) was considered but the input is not a relative traversal sequence; it is an absolute path chosen by the attacker, making CWE-73 the more precise mapping.
    Attack pattern rationale
    • CAPEC-126 The patch explicitly describes the SSRF vector: an .xml upload containing a URL causes MISP to fetch that URL and import the result. CAPEC-126 describes an attacker manipulating a server-side application to make it issue requests to unintended targets, which is exactly the attack demonstrated here. The local-file-read aspect is a secondary manifestation of the same root cause (unvalidated input passed to a function that resolves locators) and is subsumed by the SSRF pattern in this context.
    • CAPEC-2 The attacker manipulates the content parameter of the MISP export upload to supply a file path or URL instead of a valid XML document. CAPEC-2 covers the general technique of altering application parameters to trigger unintended behavior. This is a secondary mapping; CAPEC-126 is the more specific and primary pattern. The uncertainty is that CAPEC-2 is broader and less precise than CAPEC-126 for this specific vulnerability.
    Assumptions to verify
    • The commit message states the vulnerability was 'found during the internal review, not externally reported,' so no external finder or reporter credit is assigned. The internal reviewer's identity is not specified in the patch metadata.
    • The affected version range is inferred from the tag_version_boundary (v2.5.47 with 40 commits after the fix), but exact affected and fixed version numbers are not stated in the patch. The boundary is recorded as a reference point only.
    • PR:L assumes that perm_modify is a non-administrative, commonly granted role in MISP deployments. If perm_modify is equivalent to full administrative access in some configurations, PR could be elevated to PR:H.
    • The CAPEC-2 mapping is a broader, secondary pattern included for completeness; CAPEC-126 is the primary and most specific match. The uncertainty is noted in the CAPEC-2 rationale.
    • The commit message references an operator-precedence issue in Xml::build()'s readFile guard not covering the https branch. This is taken as evidence from the commit message and patch comments; the actual Xml utility source is not included in the patch, so the exact mechanism of the https bypass is assumed rather than verified.
    • CVSS SC:H assumes the SSRF can reach internal services with sensitive data. If the deployment restricts outbound network access, SC could be reduced.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 high 6
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94401",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T14:35:17.511576Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T14:48:16.804Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Model/Event.php (addMISPExportFile)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Model/Event.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP has a file-handling vulnerability that could let certain authenticated users make the server read files or access internal network services.\u003c/p\u003e\u003cp\u003eWhen importing an XML file, MISP did not properly verify that the uploaded content was actually XML. Because of this, a user with permission to modify data could upload a file containing a local file path or a web address instead.\u003c/p\u003e\u003cp\u003eIf a local file path was supplied, MISP could read that file from the server. If a URL was supplied, MISP could make a request to that address, including systems that may only be reachable from inside the organization\u2019s network.\u003c/p\u003e\u003cp\u003eThe vulnerability could therefore expose sensitive local files and allow unauthorized requests to internal services.\u003c/p\u003e\u003cp\u003eExploitation required a valid MISP account with modify permissions, but no additional user interaction was needed.\u003c/p\u003eVersion affected: \u0026lt;2.5.47"
                }
              ],
              "value": "MISP has a file-handling vulnerability that could let certain authenticated users make the server read files or access internal network services.\n\nWhen importing an XML file, MISP did not properly verify that the uploaded content was actually XML. Because of this, a user with permission to modify data could upload a file containing a local file path or a web address instead.\n\nIf a local file path was supplied, MISP could read that file from the server. If a URL was supplied, MISP could make a request to that address, including systems that may only be reachable from inside the organization\u2019s network.\n\nThe vulnerability could therefore expose sensitive local files and allow unauthorized requests to internal services.\n\nExploitation required a valid MISP account with modify permissions, but no additional user interaction was needed.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-126",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-126 Server Side Request Forgery"
                }
              ]
            },
            {
              "capecId": "CAPEC-2",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-2 Parameter Manipulation"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 8.3,
                "baseSeverity": "HIGH",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "HIGH",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-918",
                  "description": "CWE-918 Server-Side Request Forgery (SSRF)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-73",
                  "description": "CWE-73 External Control of File Name or Path",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T13:36:13.066Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/d5f247b91"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces two defensive measures in addMISPExportFile(): (1) a pre-parse validation that rejects any uploaded content not containing an XML document marker (the \u0027\u0026lt;\u0027 character), preventing path or URL strings from reaching the XML parser; and (2) an explicit readFile =\u0026gt; false option passed to Xml::build(), which disables the library\u0027s ability to interpret the input as a file path or URL to be read or fetched. Together these changes ensure that only genuine XML document content is parsed and that no server-side file access or network request is triggered by user-supplied data.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces two defensive measures in addMISPExportFile(): (1) a pre-parse validation that rejects any uploaded content not containing an XML document marker (the \u0027\u003c\u0027 character), preventing path or URL strings from reaching the XML parser; and (2) an explicit readFile =\u003e false option passed to Xml::build(), which disables the library\u0027s ability to interpret the input as a file path or URL to be read or fetched. Together these changes ensure that only genuine XML document content is parsed and that no server-side file access or network request is triggered by user-supplied data."
            }
          ],
          "title": "MISP Arbitrary Local File Read and SSRF via MISP Export Upload",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The commit message states the vulnerability was \u0027found during the internal review, not externally reported,\u0027 so no external finder or reporter credit is assigned. The internal reviewer\u0027s identity is not specified in the patch metadata.",
                      "The affected version range is inferred from the tag_version_boundary (v2.5.47 with 40 commits after the fix), but exact affected and fixed version numbers are not stated in the patch. The boundary is recorded as a reference point only.",
                      "PR:L assumes that perm_modify is a non-administrative, commonly granted role in MISP deployments. If perm_modify is equivalent to full administrative access in some configurations, PR could be elevated to PR:H.",
                      "The CAPEC-2 mapping is a broader, secondary pattern included for completeness; CAPEC-126 is the primary and most specific match. The uncertainty is noted in the CAPEC-2 rationale.",
                      "The commit message references an operator-precedence issue in Xml::build()\u0027s readFile guard not covering the https branch. This is taken as evidence from the commit message and patch comments; the actual Xml utility source is not included in the patch, so the exact mechanism of the https bypass is assumed rather than verified.",
                      "CVSS SC:H assumes the SSRF can reach internal services with sensitive data. If the deployment restricts outbound network access, SC could be reduced."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-126",
                        "rationale": "The patch explicitly describes the SSRF vector: an .xml upload containing a URL causes MISP to fetch that URL and import the result. CAPEC-126 describes an attacker manipulating a server-side application to make it issue requests to unintended targets, which is exactly the attack demonstrated here. The local-file-read aspect is a secondary manifestation of the same root cause (unvalidated input passed to a function that resolves locators) and is subsumed by the SSRF pattern in this context."
                      },
                      {
                        "capecId": "CAPEC-2",
                        "rationale": "The attacker manipulates the content parameter of the MISP export upload to supply a file path or URL instead of a valid XML document. CAPEC-2 covers the general technique of altering application parameters to trigger unintended behavior. This is a secondary mapping; CAPEC-126 is the more specific and primary pattern. The uncertainty is that CAPEC-2 is broader and less precise than CAPEC-126 for this specific vulnerability."
                      }
                    ],
                    "commit": "d5f247b91ad3e8ea86feaaa587bf0466c95ea996",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: exploitation occurs over the network via the MISP web interface. AC:L: the attack is deterministic; uploading a file with a path or URL as content reliably triggers the read/fetch. AT:N: no special target-side conditions are required. PR:L: the attacker needs an authenticated account with perm_modify (a non-privileged but authenticated role). UI:N: the attacker performs the upload autonomously; no victim interaction is needed. VC:H: arbitrary local file read exposes sensitive server data (credentials, configs, keys). VI:N: the imported data is stored as an event but does not corrupt application state or logic. VA:N: no denial-of-service impact is indicated. SC:H: the SSRF component allows the attacker to read responses from internal services (metadata endpoints, admin panels, etc.), impacting subsequent-component confidentiality. SI:N and SA:N: no evidence of integrity or availability impact on subsequent components from the patch evidence.",
                    "fixSummary": "The fix introduces two defensive measures in addMISPExportFile(): (1) a pre-parse validation that rejects any uploaded content not containing an XML document marker (the \u0027\u003c\u0027 character), preventing path or URL strings from reaching the XML parser; and (2) an explicit readFile =\u003e false option passed to Xml::build(), which disables the library\u0027s ability to interpret the input as a file path or URL to be read or fetched. Together these changes ensure that only genuine XML document content is parsed and that no server-side file access or network request is triggered by user-supplied data.",
                    "generatedAt": "2026-09-21T13:28:43.719596Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 6,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "004f65b4d416b8e01f8b713a982a9b4d808e454c40cd74cc94d36137eb1b2845",
                    "patchSummary": "In app/Model/Event.php, the single line calling Xml::toArray(Xml::build($data)) is replaced with a guard clause that throws an Exception if strpos($data, \u0027\u003c\u0027) === false, followed by Xml::toArray(Xml::build($data, [\u0027readFile\u0027 =\u003e false])). Nine lines are added (including a four-line explanatory comment) and one line is removed. No other files are modified.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "d5f247b91ad3e8ea86feaaa587bf0466c95ea996",
                        "patchSha256": "004f65b4d416b8e01f8b713a982a9b4d808e454c40cd74cc94d36137eb1b2845",
                        "source": "https://github.com/MISP/MISP/commit/d5f247b91.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/d5f247b91.patch",
                        "subject": "fix: [security] Refuse a MISP export upload whose content is"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/d5f247b91.patch",
                    "subject": "fix: [security] Refuse a MISP export upload whose content is",
                    "tagVersionBoundary": {
                      "commits_after_fix": 40,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-918",
                        "rationale": "The primary and most severe impact is that an attacker-supplied URL in the uploaded file body causes the MISP server to issue an HTTP request to an arbitrary internal or external address and import the response. This is a textbook SSRF: user-controlled input is used as a network request target by the server."
                      },
                      {
                        "cweId": "CWE-73",
                        "rationale": "The secondary impact is that a user-supplied local file path in the uploaded file body is passed to Xml::build() which reads that file from the server\u0027s filesystem. The attacker controls the file path that the server reads, matching CWE-73. CWE-22 (Path Traversal) was considered but the input is not a relative traversal sequence; it is an absolute path chosen by the attacker, making CWE-73 the more precise mapping."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20056"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94401",
        "datePublished": "2026-09-21T13:36:13.066Z",
        "dateReserved": "2026-09-21T13:36:11.048Z",
        "dateUpdated": "2026-09-21T14:48:16.804Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94394 (GCVE-0-2026-94394)

    Vulnerability from cvelistv5 – Published: 2026-09-21 13:25 – Updated: 2026-09-21 14:48
    VLAI
    Title
    MISP ObjectReferencesController: Granular Distribution and Sharing Group Restrictions Bypassed When Adding Object References
    Summary
    When a regular user adds a reference between objects or attributes, MISP checks whether the user can access the overall event, but it does not always check whether the individual pieces of data are also allowed for that user. Because of this, someone who can view an event could potentially access attributes or objects inside that event that were meant to be restricted to a specific sharing group or distribution level. The vulnerability affects authenticated users who are not site administrators and who already have access to an event containing more restricted data. The main impact is that users may be able to view sensitive attribute values, object details, or related object data that they should not normally be allowed to see.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 14:35 UTC
    CWE
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 13:15
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/f36634e57.patch 2688fca1334e…
    Confidence
    medium
    Commit Subject Patch SHA-256
    f36634e57b93 fix: [security] Extended event granular restrictions ignored 2688fca1334e…
    Fix summary

    The fix introduces granular authorization checks in the ObjectReferencesController add() method. For non-site-admin users, the query conditions for attributes, objects, and object attributes are now augmented with OR clauses that restrict results to: (1) entities belonging to the user's own event, (2) entities with unrestricted distribution levels (1, 2, 3, 5), or (3) entities with distribution level 4 whose sharing_group_id is in the user's authorized sharing group list. This ensures that only data the user is explicitly authorized to see under MISP's distribution and sharing-group model is included in the object reference operation.

    Patch summary

    In app/Controller/ObjectReferencesController.php, the add() method is modified to build dynamic condition arrays ($attributeConditions, $objectConditions, $objectAttributeConditions) that incorporate the current user's role and authorized sharing group IDs. For non-site-admin users, each condition array gains an OR clause filtering by event ownership, distribution levels (1,2,3,5), or distribution level 4 with a matching sharing_group_id from the user's authorized IDs. These condition arrays replace the previously hardcoded minimal conditions (deleted=0, object_id=0) in the Contain clauses for Attribute, Object, and nested Object.Attribute queries. The user's authorized sharing group IDs are obtained via SharingGroup->authorizedIds($user).

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: The attack requires no special conditions beyond having a valid account with event-level access; no race conditions or complex setup needed. AT:N: No manipulation of a separate attack target is required. PR:L: The attacker needs a low-privilege authenticated account (any non-site-admin user with access to an event containing restricted attributes/objects). UI:N: No victim interaction is required; the attacker simply calls the API endpoint. VC:N/VI:N/VA:N: The MISP server itself (the vulnerable component) is not compromised in its own confidentiality, integrity, or availability. SC:H: The resource impact is high because restricted attribute values, object metadata, and object-attribute data that are explicitly gated by distribution levels and sharing groups are exposed to an unauthorized user. SI:N: No integrity impact on the data. SA:N: No safety impact.

    Weakness rationale
    • CWE-862 The ObjectReferencesController add() method was missing authorization checks for granular distribution-level and sharing-group restrictions on attributes, objects, and object attributes. Only event-level access was verified, while the sub-entity level access controls (distribution levels 1-5, sharing group membership) were entirely absent from the query conditions. This is a classic missing authorization check at a finer granularity than what was enforced.
    Attack pattern rationale
    • CAPEC-109 The closest plausible CAPEC is Parameter Tampering. An authenticated user supplies an objectId parameter to the add() endpoint, and the application fails to enforce proper authorization on the sub-entities (attributes, objects, object attributes) associated with that object. The user effectively 'tampers' with the scope of accessible data by leveraging event-level access to reach restricted sub-entities. This is not a perfect match because the user is not modifying a parameter to an invalid value but rather exploiting the absence of a check on a valid parameter's sub-resources. No CAPEC specifically models 'broken granular access control' or 'insecure direct object reference at sub-entity level,' making CAPEC-109 the best available approximation.
    Assumptions to verify
    • The exact affected and fixed version numbers are not specified in the patch metadata. The tag_version_boundary indicates the fix commit is 140 commits after v2.5.47, but the precise release version containing the fix is unknown.
    • The CAPEC-109 (Parameter Tampering) mapping is the closest available match but is not a perfect fit; the vulnerability is more precisely a missing granular authorization check rather than parameter manipulation. No CAPEC specifically models broken sub-entity access control.
    • The CVSS SC:H rating assumes that the exposed attribute/object data constitutes sensitive information (e.g., IOCs, malware indicators, threat intelligence) whose unauthorized disclosure is a significant confidentiality impact. If the data is considered low-sensitivity, SC:L may be more appropriate.
    • The vulnerability requires the attacker to already have event-level access; it does not grant access to events the user cannot see. The bypass is limited to granular restrictions within an already-accessible event.
    • The patch only addresses the add() method in ObjectReferencesController; other methods or controllers with similar patterns may or may not be affected, but no evidence of additional affected code paths is present in this patch.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94394",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T14:35:25.970564Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T14:48:16.963Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "ObjectReferencesController"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/ObjectReferencesController.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "When a regular user adds a reference between objects or attributes, MISP checks whether the user can access the overall event, but it does not always check whether the individual pieces of data are also allowed for that user.\u003cbr\u003e\u003cbr\u003e\u003cp\u003eBecause of this, someone who can view an event could potentially access attributes or objects inside that event that were meant to be restricted to a specific sharing group or distribution level.\u003c/p\u003eThe vulnerability affects authenticated users who are not site administrators and who already have access to an event containing more restricted data.\u003cbr\u003e\u003cbr\u003eThe main impact is that users may be able to view sensitive attribute values, object details, or related object data that they should not normally be allowed to see.\u003cbr\u003e"
                }
              ],
              "value": "When a regular user adds a reference between objects or attributes, MISP checks whether the user can access the overall event, but it does not always check whether the individual pieces of data are also allowed for that user.\n\nBecause of this, someone who can view an event could potentially access attributes or objects inside that event that were meant to be restricted to a specific sharing group or distribution level.\n\nThe vulnerability affects authenticated users who are not site administrators and who already have access to an event containing more restricted data.\n\nThe main impact is that users may be able to view sensitive attribute values, object details, or related object data that they should not normally be allowed to see."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-109",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-109 Parameter Tampering"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.3,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-862",
                  "description": "CWE-862 Missing Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T13:25:40.360Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/f36634e57"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces granular authorization checks in the ObjectReferencesController add() method. For non-site-admin users, the query conditions for attributes, objects, and object attributes are now augmented with OR clauses that restrict results to: (1) entities belonging to the user\u0027s own event, (2) entities with unrestricted distribution levels (1, 2, 3, 5), or (3) entities with distribution level 4 whose sharing_group_id is in the user\u0027s authorized sharing group list. This ensures that only data the user is explicitly authorized to see under MISP\u0027s distribution and sharing-group model is included in the object reference operation.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces granular authorization checks in the ObjectReferencesController add() method. For non-site-admin users, the query conditions for attributes, objects, and object attributes are now augmented with OR clauses that restrict results to: (1) entities belonging to the user\u0027s own event, (2) entities with unrestricted distribution levels (1, 2, 3, 5), or (3) entities with distribution level 4 whose sharing_group_id is in the user\u0027s authorized sharing group list. This ensures that only data the user is explicitly authorized to see under MISP\u0027s distribution and sharing-group model is included in the object reference operation."
            }
          ],
          "title": "MISP ObjectReferencesController: Granular Distribution and Sharing Group Restrictions Bypassed When Adding Object References",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The exact affected and fixed version numbers are not specified in the patch metadata. The tag_version_boundary indicates the fix commit is 140 commits after v2.5.47, but the precise release version containing the fix is unknown.",
                      "The CAPEC-109 (Parameter Tampering) mapping is the closest available match but is not a perfect fit; the vulnerability is more precisely a missing granular authorization check rather than parameter manipulation. No CAPEC specifically models broken sub-entity access control.",
                      "The CVSS SC:H rating assumes that the exposed attribute/object data constitutes sensitive information (e.g., IOCs, malware indicators, threat intelligence) whose unauthorized disclosure is a significant confidentiality impact. If the data is considered low-sensitivity, SC:L may be more appropriate.",
                      "The vulnerability requires the attacker to already have event-level access; it does not grant access to events the user cannot see. The bypass is limited to granular restrictions within an already-accessible event.",
                      "The patch only addresses the add() method in ObjectReferencesController; other methods or controllers with similar patterns may or may not be affected, but no evidence of additional affected code paths is present in this patch."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-109",
                        "rationale": "The closest plausible CAPEC is Parameter Tampering. An authenticated user supplies an objectId parameter to the add() endpoint, and the application fails to enforce proper authorization on the sub-entities (attributes, objects, object attributes) associated with that object. The user effectively \u0027tampers\u0027 with the scope of accessible data by leveraging event-level access to reach restricted sub-entities. This is not a perfect match because the user is not modifying a parameter to an invalid value but rather exploiting the absence of a check on a valid parameter\u0027s sub-resources. No CAPEC specifically models \u0027broken granular access control\u0027 or \u0027insecure direct object reference at sub-entity level,\u0027 making CAPEC-109 the best available approximation."
                      }
                    ],
                    "commit": "f36634e57b93ad9daa3ab9530b76b9e5cba796e2",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      }
                    ],
                    "cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: The attack requires no special conditions beyond having a valid account with event-level access; no race conditions or complex setup needed. AT:N: No manipulation of a separate attack target is required. PR:L: The attacker needs a low-privilege authenticated account (any non-site-admin user with access to an event containing restricted attributes/objects). UI:N: No victim interaction is required; the attacker simply calls the API endpoint. VC:N/VI:N/VA:N: The MISP server itself (the vulnerable component) is not compromised in its own confidentiality, integrity, or availability. SC:H: The resource impact is high because restricted attribute values, object metadata, and object-attribute data that are explicitly gated by distribution levels and sharing groups are exposed to an unauthorized user. SI:N: No integrity impact on the data. SA:N: No safety impact.",
                    "fixSummary": "The fix introduces granular authorization checks in the ObjectReferencesController add() method. For non-site-admin users, the query conditions for attributes, objects, and object attributes are now augmented with OR clauses that restrict results to: (1) entities belonging to the user\u0027s own event, (2) entities with unrestricted distribution levels (1, 2, 3, 5), or (3) entities with distribution level 4 whose sharing_group_id is in the user\u0027s authorized sharing group list. This ensures that only data the user is explicitly authorized to see under MISP\u0027s distribution and sharing-group model is included in the object reference operation.",
                    "generatedAt": "2026-09-21T13:15:28.001598Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "2688fca1334e3016b8b885ce926749f8d47e49d7b657cf38f7b2edcd6eaf6cf0",
                    "patchSummary": "In app/Controller/ObjectReferencesController.php, the add() method is modified to build dynamic condition arrays ($attributeConditions, $objectConditions, $objectAttributeConditions) that incorporate the current user\u0027s role and authorized sharing group IDs. For non-site-admin users, each condition array gains an OR clause filtering by event ownership, distribution levels (1,2,3,5), or distribution level 4 with a matching sharing_group_id from the user\u0027s authorized IDs. These condition arrays replace the previously hardcoded minimal conditions (deleted=0, object_id=0) in the Contain clauses for Attribute, Object, and nested Object.Attribute queries. The user\u0027s authorized sharing group IDs are obtained via SharingGroup-\u003eauthorizedIds($user).",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "f36634e57b93ad9daa3ab9530b76b9e5cba796e2",
                        "patchSha256": "2688fca1334e3016b8b885ce926749f8d47e49d7b657cf38f7b2edcd6eaf6cf0",
                        "source": "https://github.com/MISP/MISP/commit/f36634e57.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/f36634e57.patch",
                        "subject": "fix: [security] Extended event granular restrictions ignored"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/f36634e57.patch",
                    "subject": "fix: [security] Extended event granular restrictions ignored",
                    "tagVersionBoundary": {
                      "commits_after_fix": 140,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-862",
                        "rationale": "The ObjectReferencesController add() method was missing authorization checks for granular distribution-level and sharing-group restrictions on attributes, objects, and object attributes. Only event-level access was verified, while the sub-entity level access controls (distribution levels 1-5, sharing group membership) were entirely absent from the query conditions. This is a classic missing authorization check at a finer granularity than what was enforced."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20106"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94394",
        "datePublished": "2026-09-21T13:25:40.360Z",
        "dateReserved": "2026-09-21T13:25:38.483Z",
        "dateUpdated": "2026-09-21T14:48:16.963Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94393 (GCVE-0-2026-94393)

    Vulnerability from cvelistv5 – Published: 2026-09-21 13:14 – Updated: 2026-09-21 15:18
    VLAI
    Title
    MISP Event Report Cross-Event Reparenting via Unscoped UUID Resolution in editReport
    Summary
    When a user creates or edits a report inside an event, MISP can identify an existing report using its UUID without properly checking whether that report actually belongs to the same event. As a result, a user who has editing rights on one event could potentially move a report from another event into their own event, as long as they know or can guess the report’s UUID. Once moved, they could view and change information that they were not originally allowed to access. The vulnerability requires the attacker to have editor access to at least one event and to know or discover a valid report UUID. The main impact is that private event reports could be exposed or modified across event boundaries, bypassing MISP’s normal access restrictions. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 15:18 UTC
    CWE
    • CWE-639 - Authorization Bypass Through User-Controlled Key
    • CWE-284 - Improper Access Control
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 13:01
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/43665b9bb.patch 2306bd95d16b…
    Confidence
    medium
    Commit Subject Patch SHA-256
    43665b9bb6bd fix: [security] Refuse to adopt an event report that belongs 2306bd95d16b…
    Fix summary

    The fix adds an ownership check in editReport: before adopting an existing report found by UUID, the code now verifies that the report's event_id matches the event being edited. If the UUID resolves to a report belonging to a different event, the operation is rejected with an error message, preventing cross-event reparenting, unauthorized read, and unauthorized overwrite of reports.

    Patch summary

    In app/Model/EventReport.php, the editReport method's else-branch (handling an existing report found by UUID) now includes an 11-line guard: it compares (string)$existingReport['EventReport']['event_id'] against (string)$eventId and, on mismatch, appends an error string and returns early, preventing the subsequent assignment of the foreign report's ID to the current event's report record.

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: the attacker only needs to supply a known/guessed UUID in a standard edit request; no race or complex condition. AT:N: no manipulation of the target environment is required. PR:L: the attacker must be an authenticated user with editor role on at least one event. UI:N: no victim interaction is needed. VC:N/VI:N/VA:N: the MISP application itself (its configuration, credentials, availability) is not directly impacted. SC:H: the attacker gains read access to private report data in events they cannot otherwise see. SI:H: the attacker can overwrite and modify report data belonging to other events. SA:N: no safety-system impact.

    Weakness rationale
    • CWE-639 The report UUID is a user-controlled key resolved globally without scoping to the caller's event context. The system failed to verify that the referenced object (report) belongs to the event the caller is authorized to edit, allowing cross-event access.
    • CWE-284 The broader category applies: MISP's per-event access control model was bypassed because the editReport path did not enforce that a report UUID maps to the same event the caller is operating on.
    Attack pattern rationale
    • CAPEC-174 The edge case of a UUID belonging to a different event was not handled: the code assumed any UUID found in the global table belonged to the current event. The attacker exploits this unhandled edge case to reparent a foreign report. This is the closest CAPEC; a more specific 'IDOR' or 'broken object reference' CAPEC does not exist in the CAPEC catalog, so CAPEC-174 is the best available match.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary (v2.5.47, 56 commits after fix); the exact first affected and first fixed release versions are not stated in the patch and are marked unspecified.
    • PR:L assumes the attacker needs at minimum editor-level access to one event; the patch does not specify whether viewer-level access could also trigger the code path, but the commit message explicitly references 'an event editor'.
    • CAPEC-174 is selected as the closest available attack pattern; no CAPEC entry specifically covers IDOR or broken object reference resolution, so the mapping is approximate.
    • The CVSS sub-component impact (SC:H, SI:H) assumes the event report data constitutes a distinct data asset whose confidentiality and integrity are the primary impact, rather than the MISP application's own state.
    • The commit date (2026-09-16) and tag boundary are taken at face value from the supplied metadata; no independent verification of release timing was performed.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94393",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T15:18:01.147790Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T15:18:17.855Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Model/EventReport.php"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Model/EventReport.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 4.8"
            },
            {
              "lang": "en",
              "type": "reporter",
              "value": "David Andr\u00e9"
            },
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cdiv\u003e\u003c/div\u003e\u003cp\u003eWhen a user creates or edits a report inside an event, MISP can identify an existing report using its UUID without properly checking whether that report actually belongs to the same event.\u003c/p\u003e\u003cp\u003eAs a result, a user who has editing rights on one event could potentially move a report from another event into their own event, as long as they know or can guess the report\u2019s UUID. Once moved, they could view and change information that they were not originally allowed to access.\u003c/p\u003e\u003cp\u003eThe vulnerability requires the attacker to have editor access to at least one event and to know or discover a valid report UUID.\u003c/p\u003e\u003cp\u003eThe main impact is that private event reports could be exposed or modified across event boundaries, bypassing MISP\u2019s normal access restrictions.\u003c/p\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e\u003cdiv\u003e\u003c/div\u003e"
                }
              ],
              "value": "When a user creates or edits a report inside an event, MISP can identify an existing report using its UUID without properly checking whether that report actually belongs to the same event.\n\nAs a result, a user who has editing rights on one event could potentially move a report from another event into their own event, as long as they know or can guess the report\u2019s UUID. Once moved, they could view and change information that they were not originally allowed to access.\n\nThe vulnerability requires the attacker to have editor access to at least one event and to know or discover a valid report UUID.\n\nThe main impact is that private event reports could be exposed or modified across event boundaries, bypassing MISP\u2019s normal access restrictions.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-174",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-174 Exploiting Incorrectly Handled Edge Cases"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.4,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-639",
                  "description": "CWE-639 Authorization Bypass Through User-Controlled Key",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-284",
                  "description": "CWE-284 Improper Access Control",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T13:14:00.619Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/43665b9bb"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix adds an ownership check in editReport: before adopting an existing report found by UUID, the code now verifies that the report\u0027s event_id matches the event being edited. If the UUID resolves to a report belonging to a different event, the operation is rejected with an error message, preventing cross-event reparenting, unauthorized read, and unauthorized overwrite of reports.\u003c/p\u003e"
                }
              ],
              "value": "The fix adds an ownership check in editReport: before adopting an existing report found by UUID, the code now verifies that the report\u0027s event_id matches the event being edited. If the UUID resolves to a report belonging to a different event, the operation is rejected with an error message, preventing cross-event reparenting, unauthorized read, and unauthorized overwrite of reports."
            }
          ],
          "title": "MISP Event Report Cross-Event Reparenting via Unscoped UUID Resolution in editReport",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The affected version range is inferred from the tag_version_boundary (v2.5.47, 56 commits after fix); the exact first affected and first fixed release versions are not stated in the patch and are marked unspecified.",
                      "PR:L assumes the attacker needs at minimum editor-level access to one event; the patch does not specify whether viewer-level access could also trigger the code path, but the commit message explicitly references \u0027an event editor\u0027.",
                      "CAPEC-174 is selected as the closest available attack pattern; no CAPEC entry specifically covers IDOR or broken object reference resolution, so the mapping is approximate.",
                      "The CVSS sub-component impact (SC:H, SI:H) assumes the event report data constitutes a distinct data asset whose confidentiality and integrity are the primary impact, rather than the MISP application\u0027s own state.",
                      "The commit date (2026-09-16) and tag boundary are taken at face value from the supplied metadata; no independent verification of release timing was performed."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-174",
                        "rationale": "The edge case of a UUID belonging to a different event was not handled: the code assumed any UUID found in the global table belonged to the current event. The attacker exploits this unhandled edge case to reparent a foreign report. This is the closest CAPEC; a more specific \u0027IDOR\u0027 or \u0027broken object reference\u0027 CAPEC does not exist in the CAPEC catalog, so CAPEC-174 is the best available match."
                      }
                    ],
                    "commit": "43665b9bb6bd39af0db1f38e608bdf2cb84b9dec",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 4.8"
                      },
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "David Andr\u00e9"
                      },
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      }
                    ],
                    "cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: the attacker only needs to supply a known/guessed UUID in a standard edit request; no race or complex condition. AT:N: no manipulation of the target environment is required. PR:L: the attacker must be an authenticated user with editor role on at least one event. UI:N: no victim interaction is needed. VC:N/VI:N/VA:N: the MISP application itself (its configuration, credentials, availability) is not directly impacted. SC:H: the attacker gains read access to private report data in events they cannot otherwise see. SI:H: the attacker can overwrite and modify report data belonging to other events. SA:N: no safety-system impact.",
                    "fixSummary": "The fix adds an ownership check in editReport: before adopting an existing report found by UUID, the code now verifies that the report\u0027s event_id matches the event being edited. If the UUID resolves to a report belonging to a different event, the operation is rejected with an error message, preventing cross-event reparenting, unauthorized read, and unauthorized overwrite of reports.",
                    "generatedAt": "2026-09-21T13:01:16.364280Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "2306bd95d16b9c00582997897aa9181253364082a09589640fce576a03beafb4",
                    "patchSummary": "In app/Model/EventReport.php, the editReport method\u0027s else-branch (handling an existing report found by UUID) now includes an 11-line guard: it compares (string)$existingReport[\u0027EventReport\u0027][\u0027event_id\u0027] against (string)$eventId and, on mismatch, appends an error string and returns early, preventing the subsequent assignment of the foreign report\u0027s ID to the current event\u0027s report record.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "43665b9bb6bd39af0db1f38e608bdf2cb84b9dec",
                        "patchSha256": "2306bd95d16b9c00582997897aa9181253364082a09589640fce576a03beafb4",
                        "source": "https://github.com/MISP/MISP/commit/43665b9bb.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/43665b9bb.patch",
                        "subject": "fix: [security] Refuse to adopt an event report that belongs"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/43665b9bb.patch",
                    "subject": "fix: [security] Refuse to adopt an event report that belongs",
                    "tagVersionBoundary": {
                      "commits_after_fix": 56,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-639",
                        "rationale": "The report UUID is a user-controlled key resolved globally without scoping to the caller\u0027s event context. The system failed to verify that the referenced object (report) belongs to the event the caller is authorized to edit, allowing cross-event access."
                      },
                      {
                        "cweId": "CWE-284",
                        "rationale": "The broader category applies: MISP\u0027s per-event access control model was bypassed because the editReport path did not enforce that a report UUID maps to the same event the caller is operating on."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20057"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94393",
        "datePublished": "2026-09-21T13:14:00.619Z",
        "dateReserved": "2026-09-21T13:13:54.299Z",
        "dateUpdated": "2026-09-21T15:18:17.855Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94383 (GCVE-0-2026-94383)

    Vulnerability from cvelistv5 – Published: 2026-09-21 12:52 – Updated: 2026-09-21 14:48
    VLAI
    Title
    MISP Blocklist Workflow Module: Arbitrary Script Execution via Unrestricted File Extension
    Summary
    The MISP blocklist workflow module accepted a user-supplied blocklist filename parameter without validating the file extension. The only sanitization applied was basename() to strip path components and a check for empty or dot values. A site administrator could specify a filename with an arbitrary extension that would be placed in the MISP export directory. If the underlying web server is configured to interpret and execute scripts from that directory, the resulting file could be invoked, leading to arbitrary code execution in the context of the web server process. The vulnerability requires the attacker to hold site-administrator privileges within MISP, as the blocklist workflow module is restricted to that role. No additional user interaction is required beyond triggering the workflow action with a crafted filename parameter. The impact is full compromise of the MISP server's confidentiality, integrity, and availability, as arbitrary script execution grants the attacker the same privileges as the web server user. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 14:37 UTC
    CWE
    • CWE-434 - Unrestricted Upload of File with Dangerous Type
    • CWE-20 - Improper Input Validation
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 12:44
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/e5a943178.patch 9b7cc757cbbc…
    Confidence
    medium
    Commit Subject Patch SHA-256
    e5a9431784b4 fix: [security] arbitrary script execution via insufficient 9b7cc757cbbc…
    Fix summary

    The vulnerability is remediated by enforcing a strict whitelist of allowed file extensions (txt, list, blocklist, csv) on the blocklist filename parameter before the file is processed. Any filename with an extension outside this whitelist is rejected with an error, preventing an attacker from placing files with executable or dangerous extensions (e.g., .php, .phtml) into the MISP export directory where they could be interpreted by the web server.

    Patch summary

    In app/Model/WorkflowModules/action/Module_blocklist_action.php, five lines are inserted after the existing basename() call. The added code defines an $allowedExtensions array containing 'txt', 'list', 'blocklist', and 'csv', extracts the file extension via pathinfo() with PATHINFO_EXTENSION, and performs a strict (===) in_array() check. If the extension is not in the whitelist, the method returns early with a failure message 'Blocklist filename has an invalid extension.' This check is placed before the existing empty/dot filename validation.

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: The attack requires only specifying a filename with a dangerous extension in a workflow parameter; no race conditions or complex timing are needed. AT:N: No manipulation of the target system is required beyond the normal API call. PR:H: The commit message explicitly states 'site admin only', requiring high-privilege MISP access. UI:N: No victim interaction is needed; the workflow action is triggered by the admin themselves. VC:H, VI:H, VA:H: Arbitrary script execution on the MISP server compromises all three local security properties. SC:N, SI:N, SA:N: The impact is confined to the MISP server; no evidence of lateral impact on other systems is present in the patch.

    Weakness rationale
    • CWE-434 The blocklist filename parameter accepted arbitrary file extensions without restriction. A site admin could supply a filename with a dangerous extension (e.g., .php) that would be placed in a web-accessible export directory, enabling script execution. The fix restricts extensions to a safe whitelist, which is the canonical remediation for CWE-434.
    • CWE-20 The filename parameter was not validated against a set of acceptable values (extensions). Only path stripping and empty-string checks were performed, leaving the extension entirely unvalidated. This is a general improper input validation weakness that enabled the more specific dangerous-file-type issue.
    Attack pattern rationale
    • CAPEC-170 CAPEC-170 describes an attacker uploading or placing a file with a dangerous extension into a target directory where it can be executed. In this case, a site admin specifies a blocklist filename with a dangerous extension (e.g., .php) that is placed in the MISP export directory. The mechanism is not a traditional multipart upload but rather a workflow parameter that results in a file being written to a web-accessible location. CAPEC-170 is the closest available pattern; the uncertainty is that the file is not uploaded via a standard upload endpoint but is instead referenced by name in a workflow action, making the mapping approximate.
    Assumptions to verify
    • The commit message states 'site admin only', which is taken as evidence that the vulnerable workflow module requires MISP site-administrator privileges. The exact privilege model and whether lower-privilege roles could reach this code path is not confirmed by the patch alone.
    • The assumption that the MISP export directory is web-accessible and that the web server is configured to execute scripts (e.g., PHP) from that directory is inferred from the commit subject 'arbitrary script execution'. The patch does not include web server configuration evidence.
    • The affected version boundary (prior to v2.5.47) is inferred from the tag_version_boundary metadata showing v2.5.47 as the nearest tag with 142 commits after the fix. The exact first affected version is not stated in the patch.
    • CAPEC-170 (File Upload) is the closest available attack pattern, but the actual mechanism is a workflow parameter specifying a filename rather than a traditional file upload. This mapping is approximate.
    • The CVSS PR:H rating assumes that 'site admin' in MISP corresponds to a high-privilege role requiring authentication and elevated permissions, consistent with MISP's role model.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94383",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "total"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T14:37:12.233579Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T14:48:17.369Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "WorkflowModules/action/Module_blocklist_action"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Model/WorkflowModules/action/Module_blocklist_action.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe MISP blocklist workflow module accepted a user-supplied blocklist filename parameter without validating the file extension. The only sanitization applied was basename() to strip path components and a check for empty or dot values. A site administrator could specify a filename with an arbitrary extension that would be placed in the MISP export directory. If the underlying web server is configured to interpret and execute scripts from that directory, the resulting file could be invoked, leading to arbitrary code execution in the context of the web server process.\u003c/p\u003e\u003cp\u003eThe vulnerability requires the attacker to hold site-administrator privileges within MISP, as the blocklist workflow module is restricted to that role. No additional user interaction is required beyond triggering the workflow action with a crafted filename parameter. The impact is full compromise of the MISP server\u0027s confidentiality, integrity, and availability, as arbitrary script execution grants the attacker the same privileges as the web server user.\u003c/p\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e"
                }
              ],
              "value": "The MISP blocklist workflow module accepted a user-supplied blocklist filename parameter without validating the file extension. The only sanitization applied was basename() to strip path components and a check for empty or dot values. A site administrator could specify a filename with an arbitrary extension that would be placed in the MISP export directory. If the underlying web server is configured to interpret and execute scripts from that directory, the resulting file could be invoked, leading to arbitrary code execution in the context of the web server process.\n\nThe vulnerability requires the attacker to hold site-administrator privileges within MISP, as the blocklist workflow module is restricted to that role. No additional user interaction is required beyond triggering the workflow action with a crafted filename parameter. The impact is full compromise of the MISP server\u0027s confidentiality, integrity, and availability, as arbitrary script execution grants the attacker the same privileges as the web server user.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-170",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-170 File Upload"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 8.6,
                "baseSeverity": "HIGH",
                "privilegesRequired": "HIGH",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "HIGH",
                "vulnConfidentialityImpact": "HIGH",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-434",
                  "description": "CWE-434 Unrestricted Upload of File with Dangerous Type",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T12:52:03.355Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/e5a943178"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe vulnerability is remediated by enforcing a strict whitelist of allowed file extensions (txt, list, blocklist, csv) on the blocklist filename parameter before the file is processed. Any filename with an extension outside this whitelist is rejected with an error, preventing an attacker from placing files with executable or dangerous extensions (e.g., .php, .phtml) into the MISP export directory where they could be interpreted by the web server.\u003c/p\u003e"
                }
              ],
              "value": "The vulnerability is remediated by enforcing a strict whitelist of allowed file extensions (txt, list, blocklist, csv) on the blocklist filename parameter before the file is processed. Any filename with an extension outside this whitelist is rejected with an error, preventing an attacker from placing files with executable or dangerous extensions (e.g., .php, .phtml) into the MISP export directory where they could be interpreted by the web server."
            }
          ],
          "title": "MISP Blocklist Workflow Module: Arbitrary Script Execution via Unrestricted File Extension",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The commit message states \u0027site admin only\u0027, which is taken as evidence that the vulnerable workflow module requires MISP site-administrator privileges. The exact privilege model and whether lower-privilege roles could reach this code path is not confirmed by the patch alone.",
                      "The assumption that the MISP export directory is web-accessible and that the web server is configured to execute scripts (e.g., PHP) from that directory is inferred from the commit subject \u0027arbitrary script execution\u0027. The patch does not include web server configuration evidence.",
                      "The affected version boundary (prior to v2.5.47) is inferred from the tag_version_boundary metadata showing v2.5.47 as the nearest tag with 142 commits after the fix. The exact first affected version is not stated in the patch.",
                      "CAPEC-170 (File Upload) is the closest available attack pattern, but the actual mechanism is a workflow parameter specifying a filename rather than a traditional file upload. This mapping is approximate.",
                      "The CVSS PR:H rating assumes that \u0027site admin\u0027 in MISP corresponds to a high-privilege role requiring authentication and elevated permissions, consistent with MISP\u0027s role model."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-170",
                        "rationale": "CAPEC-170 describes an attacker uploading or placing a file with a dangerous extension into a target directory where it can be executed. In this case, a site admin specifies a blocklist filename with a dangerous extension (e.g., .php) that is placed in the MISP export directory. The mechanism is not a traditional multipart upload but rather a workflow parameter that results in a file being written to a web-accessible location. CAPEC-170 is the closest available pattern; the uncertainty is that the file is not uploaded via a standard upload endpoint but is instead referenced by name in a workflow action, making the mapping approximate."
                      }
                    ],
                    "commit": "e5a9431784b4a78faddc0cc6efc2a287f2fd3d08",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      }
                    ],
                    "cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: The attack requires only specifying a filename with a dangerous extension in a workflow parameter; no race conditions or complex timing are needed. AT:N: No manipulation of the target system is required beyond the normal API call. PR:H: The commit message explicitly states \u0027site admin only\u0027, requiring high-privilege MISP access. UI:N: No victim interaction is needed; the workflow action is triggered by the admin themselves. VC:H, VI:H, VA:H: Arbitrary script execution on the MISP server compromises all three local security properties. SC:N, SI:N, SA:N: The impact is confined to the MISP server; no evidence of lateral impact on other systems is present in the patch.",
                    "fixSummary": "The vulnerability is remediated by enforcing a strict whitelist of allowed file extensions (txt, list, blocklist, csv) on the blocklist filename parameter before the file is processed. Any filename with an extension outside this whitelist is rejected with an error, preventing an attacker from placing files with executable or dangerous extensions (e.g., .php, .phtml) into the MISP export directory where they could be interpreted by the web server.",
                    "generatedAt": "2026-09-21T12:44:28.234229Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "9b7cc757cbbc8a4dd7491c6388e0ee12057c790bb6ca21e10b1d78209bbb7748",
                    "patchSummary": "In app/Model/WorkflowModules/action/Module_blocklist_action.php, five lines are inserted after the existing basename() call. The added code defines an $allowedExtensions array containing \u0027txt\u0027, \u0027list\u0027, \u0027blocklist\u0027, and \u0027csv\u0027, extracts the file extension via pathinfo() with PATHINFO_EXTENSION, and performs a strict (===) in_array() check. If the extension is not in the whitelist, the method returns early with a failure message \u0027Blocklist filename has an invalid extension.\u0027 This check is placed before the existing empty/dot filename validation.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "e5a9431784b4a78faddc0cc6efc2a287f2fd3d08",
                        "patchSha256": "9b7cc757cbbc8a4dd7491c6388e0ee12057c790bb6ca21e10b1d78209bbb7748",
                        "source": "https://github.com/MISP/MISP/commit/e5a943178.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/e5a943178.patch",
                        "subject": "fix: [security] arbitrary script execution via insufficient"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/e5a943178.patch",
                    "subject": "fix: [security] arbitrary script execution via insufficient",
                    "tagVersionBoundary": {
                      "commits_after_fix": 142,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-434",
                        "rationale": "The blocklist filename parameter accepted arbitrary file extensions without restriction. A site admin could supply a filename with a dangerous extension (e.g., .php) that would be placed in a web-accessible export directory, enabling script execution. The fix restricts extensions to a safe whitelist, which is the canonical remediation for CWE-434."
                      },
                      {
                        "cweId": "CWE-20",
                        "rationale": "The filename parameter was not validated against a set of acceptable values (extensions). Only path stripping and empty-string checks were performed, leaving the extension entirely unvalidated. This is a general improper input validation weakness that enabled the more specific dangerous-file-type issue."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20009"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94383",
        "datePublished": "2026-09-21T12:52:03.355Z",
        "dateReserved": "2026-09-21T12:52:01.101Z",
        "dateUpdated": "2026-09-21T14:48:17.369Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94381 (GCVE-0-2026-94381)

    Vulnerability from cvelistv5 – Published: 2026-09-21 12:42 – Updated: 2026-09-21 14:48
    VLAI
    Title
    MISP Privilege Escalation: Read-Only API Key User Can Regain Full Role via updateLoginTime
    Summary
    MISP has a security issue that can let a user gain more access than their API key is supposed to allow. A read-only API key should only let someone view information. However, after logging in with such a key, a specific MISP function could accidentally restore the user’s normal account permissions. This means someone with a read-only API key could potentially gain write, delete, or even administrator access if their underlying account has those permissions. Exploiting the issue requires a valid read-only API key and a single request to the affected function. The main impact is that MISP’s API key restrictions can be bypassed, allowing actions that the API key was specifically meant to prevent. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 14:37 UTC
    CWE
    • CWE-269 - Improper Privilege Management
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 12:37
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/fd27e592a.patch d4143841f5f0…
    Confidence
    medium
    Commit Subject Patch SHA-256
    fd27e592a617 fix: [security] read only api keys can regain full role d4143841f5f0…
    Fix summary

    The fix removes the call to User::getAuthUser() and Auth::login() from the updateLoginTime() method, which was re-authenticating the user with their full role permissions. It replaces this with a call to _refreshAuth(), which refreshes the authentication state while preserving the current (restricted) permission level associated with the API key, preventing privilege escalation.

    Patch summary

    In app/Controller/UsersController.php, the updateLoginTime() method is modified: the lines that fetched the user record via User::find(), called User::getAuthUser() to retrieve the full auth user, and called Auth::login() to re-establish the session are removed. These are replaced with a single call to $this->_refreshAuth(), which updates the authentication context without upgrading the permission scope. Net change: 1 insertion, 6 deletions.

    CVSS rationale

    AV:N - the endpoint is accessible over the network via HTTP POST. AC:L - the attack requires only a single POST request to a known endpoint; no race conditions or complex timing. AT:N - no manipulation of the target system is needed beyond the API call. PR:L - the attacker must possess a valid read-only API key (authenticated user). UI:N - no user interaction is required. VC:H - the escalated user can read all data in the MISP instance that their full role permits. VI:H - the escalated user can create, modify, and delete threat intelligence data. VA:H - the escalated user can delete data, modify configurations, or disrupt the MISP service. SC/SI/SA:N - the impact is confined to the MISP instance itself; no cascading impact on other systems is evidenced.

    Weakness rationale
    • CWE-269 The system fails to maintain the restricted privilege level (read-only) associated with the API key authentication. The updateLoginTime endpoint re-establishes the session with the user's full role permissions, effectively granting higher privileges than the authentication credential intended. This is a failure to properly manage and enforce the privilege boundary during session refresh.
    Attack pattern rationale
    • CAPEC-114 The vulnerability arises because the updateLoginTime endpoint incorrectly reconfigures the user's privilege level during session refresh, upgrading from the API-key-scoped read-only permissions to the user's full role. The attacker exploits this misconfiguration by simply calling the endpoint. CAPEC-114 is the closest match as it covers scenarios where an application incorrectly assigns or maintains privilege levels. Uncertainty: no CAPEC specifically covers 'session privilege escalation via auth refresh,' so this is the best available approximation.
    Assumptions to verify
    • The tag_version_boundary indicates the fix commit is 141 commits before v2.5.47, implying v2.5.47 contains the fix; versions prior to v2.5.47 are assumed affected. No explicit version range is stated in the patch.
    • The _refreshAuth() method is assumed to preserve the current API-key-scoped permission level rather than re-fetching full role permissions; this is inferred from the commit subject and the removal of getAuthUser()/Auth::login().
    • The 'full role' referenced in the commit subject is assumed to be a higher-privilege role (e.g., admin or site admin) compared to the read-only API key scope.
    • CAPEC-114 is the closest available attack pattern; no CAPEC specifically models session privilege escalation via authentication refresh, so this mapping carries some uncertainty.
    • CVSS impact metrics (VC/VI/VA) assume the user's full role grants broad administrative access to the MISP instance; actual impact depends on the specific role assigned to the user.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94381",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "total"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T14:37:33.435781Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T14:48:17.524Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "UsersController"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/UsersController.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eMISP has a security issue that can let a user gain more access than their API key is supposed to allow.\u003c/p\u003e\u003cp\u003eA read-only API key should only let someone view information. However, after logging in with such a key, a specific MISP function could accidentally restore the user\u2019s normal account permissions. This means someone with a read-only API key could potentially gain write, delete, or even administrator access if their underlying account has those permissions.\u003c/p\u003e\u003cp\u003eExploiting the issue requires a valid read-only API key and a single request to the affected function.\u003c/p\u003e\u003cp\u003eThe main impact is that MISP\u2019s API key restrictions can be bypassed, allowing actions that the API key was specifically meant to prevent.\u003c/p\u003e\u003cbr\u003e\u003cp\u003e\u003c/p\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e"
                }
              ],
              "value": "MISP has a security issue that can let a user gain more access than their API key is supposed to allow.\n\nA read-only API key should only let someone view information. However, after logging in with such a key, a specific MISP function could accidentally restore the user\u2019s normal account permissions. This means someone with a read-only API key could potentially gain write, delete, or even administrator access if their underlying account has those permissions.\n\nExploiting the issue requires a valid read-only API key and a single request to the affected function.\n\nThe main impact is that MISP\u2019s API key restrictions can be bypassed, allowing actions that the API key was specifically meant to prevent.\n\n\n\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-114",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-114 Exploiting Incorrectly Configured Privileges"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 8.7,
                "baseSeverity": "HIGH",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "HIGH",
                "vulnConfidentialityImpact": "HIGH",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-269",
                  "description": "CWE-269 Improper Privilege Management",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T12:42:53.242Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/fd27e592a"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix removes the call to User::getAuthUser() and Auth::login() from the updateLoginTime() method, which was re-authenticating the user with their full role permissions. It replaces this with a call to _refreshAuth(), which refreshes the authentication state while preserving the current (restricted) permission level associated with the API key, preventing privilege escalation.\u003c/p\u003e"
                }
              ],
              "value": "The fix removes the call to User::getAuthUser() and Auth::login() from the updateLoginTime() method, which was re-authenticating the user with their full role permissions. It replaces this with a call to _refreshAuth(), which refreshes the authentication state while preserving the current (restricted) permission level associated with the API key, preventing privilege escalation."
            }
          ],
          "title": "MISP Privilege Escalation: Read-Only API Key User Can Regain Full Role via updateLoginTime",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The tag_version_boundary indicates the fix commit is 141 commits before v2.5.47, implying v2.5.47 contains the fix; versions prior to v2.5.47 are assumed affected. No explicit version range is stated in the patch.",
                      "The _refreshAuth() method is assumed to preserve the current API-key-scoped permission level rather than re-fetching full role permissions; this is inferred from the commit subject and the removal of getAuthUser()/Auth::login().",
                      "The \u0027full role\u0027 referenced in the commit subject is assumed to be a higher-privilege role (e.g., admin or site admin) compared to the read-only API key scope.",
                      "CAPEC-114 is the closest available attack pattern; no CAPEC specifically models session privilege escalation via authentication refresh, so this mapping carries some uncertainty.",
                      "CVSS impact metrics (VC/VI/VA) assume the user\u0027s full role grants broad administrative access to the MISP instance; actual impact depends on the specific role assigned to the user."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-114",
                        "rationale": "The vulnerability arises because the updateLoginTime endpoint incorrectly reconfigures the user\u0027s privilege level during session refresh, upgrading from the API-key-scoped read-only permissions to the user\u0027s full role. The attacker exploits this misconfiguration by simply calling the endpoint. CAPEC-114 is the closest match as it covers scenarios where an application incorrectly assigns or maintains privilege levels. Uncertainty: no CAPEC specifically covers \u0027session privilege escalation via auth refresh,\u0027 so this is the best available approximation."
                      }
                    ],
                    "commit": "fd27e592a617f21934f4a2c424e0578287affb36",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      }
                    ],
                    "cvssRationale": "AV:N - the endpoint is accessible over the network via HTTP POST. AC:L - the attack requires only a single POST request to a known endpoint; no race conditions or complex timing. AT:N - no manipulation of the target system is needed beyond the API call. PR:L - the attacker must possess a valid read-only API key (authenticated user). UI:N - no user interaction is required. VC:H - the escalated user can read all data in the MISP instance that their full role permits. VI:H - the escalated user can create, modify, and delete threat intelligence data. VA:H - the escalated user can delete data, modify configurations, or disrupt the MISP service. SC/SI/SA:N - the impact is confined to the MISP instance itself; no cascading impact on other systems is evidenced.",
                    "fixSummary": "The fix removes the call to User::getAuthUser() and Auth::login() from the updateLoginTime() method, which was re-authenticating the user with their full role permissions. It replaces this with a call to _refreshAuth(), which refreshes the authentication state while preserving the current (restricted) permission level associated with the API key, preventing privilege escalation.",
                    "generatedAt": "2026-09-21T12:37:21.609779Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "d4143841f5f0d52a14d8538760872a7d91f78ba110384eafa3eedcad8e6480d3",
                    "patchSummary": "In app/Controller/UsersController.php, the updateLoginTime() method is modified: the lines that fetched the user record via User::find(), called User::getAuthUser() to retrieve the full auth user, and called Auth::login() to re-establish the session are removed. These are replaced with a single call to $this-\u003e_refreshAuth(), which updates the authentication context without upgrading the permission scope. Net change: 1 insertion, 6 deletions.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "fd27e592a617f21934f4a2c424e0578287affb36",
                        "patchSha256": "d4143841f5f0d52a14d8538760872a7d91f78ba110384eafa3eedcad8e6480d3",
                        "source": "https://github.com/MISP/MISP/commit/fd27e592a.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/fd27e592a.patch",
                        "subject": "fix: [security] read only api keys can regain full role"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/fd27e592a.patch",
                    "subject": "fix: [security] read only api keys can regain full role",
                    "tagVersionBoundary": {
                      "commits_after_fix": 141,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-269",
                        "rationale": "The system fails to maintain the restricted privilege level (read-only) associated with the API key authentication. The updateLoginTime endpoint re-establishes the session with the user\u0027s full role permissions, effectively granting higher privileges than the authentication credential intended. This is a failure to properly manage and enforce the privilege boundary during session refresh."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20048"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94381",
        "datePublished": "2026-09-21T12:42:53.242Z",
        "dateReserved": "2026-09-21T12:42:51.237Z",
        "dateUpdated": "2026-09-21T14:48:17.524Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94379 (GCVE-0-2026-94379)

    Vulnerability from cvelistv5 – Published: 2026-09-21 12:35 – Updated: 2026-09-21 15:21
    VLAI
    Title
    MISP: HTTP Method Bypass of Login Security Controls (Bruteforce Protection and Email OTP)
    Summary
    The login() function in MISP's UsersController.php contained insufficient HTTP method validation for several security-critical code paths. The original code used an allowlist approach, checking only for specific HTTP methods (POST and PUT) before enforcing bruteforce protection, email one-time-password (OTP) verification, and login-failure logging. Because the checks were not exhaustive, an unauthenticated attacker could issue login requests using other HTTP methods and bypass all three security controls simultaneously. Specifically:   - the bruteforce blocklisting check and attempt counter were skipped, allowing unlimited credential-guessing attempts without being rate-limited or blocked  -  the email OTP two-factor authentication step was skipped, defeating the second factor of authentication  - login-failure events were neither logged nor counted, removing the audit trail and the mechanism that would normally trigger a blocklist entry. The security impact is the effective disabling of brute-force protection and multi-factor authentication for any attacker who can craft an HTTP request with a non-POST/PUT method to the login endpoint, potentially leading to credential compromise and unauthorized access to the MISP instance. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: yes Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 15:20 UTC
    CWE
    • CWE-20 - Improper Input Validation
    • CWE-285 - Improper Authorization
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: unspecified , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 12:30
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/ef4dc19c6.patch ff6f133b194f…
    Confidence
    medium
    Commit Subject Patch SHA-256
    ef4dc19c6d4f fix: [security] insufficient check on http methods for the ff6f133b194f…
    Fix summary

    The fix replaces the allowlist-style HTTP method checks (is POST or PUT) with a denylist approach (is NOT GET) in all three security-critical branches of the login() function. This ensures that every non-GET HTTP method—regardless of whether it is POST, PUT, PATCH, DELETE, HEAD, OPTIONS, or any other—triggers the bruteforce protection, email OTP verification, and login-failure logging code paths, closing the method-based bypass.

    Patch summary

    Three conditional expressions in UsersController::login() were changed. (1) The bruteforce-protection guard changed from $this->request->is(['post','put']) to !$this->request->is(['get']). (2) The email-OTP guard changed from $this->request->is('post') to !$this->request->is(['get']). (3) The login-failure handling guard changed from $this->request->is('post') || $this->request->is('put') to !$this->request->is('get'). All three changes invert the logic from an explicit allowlist of methods to a denylist that excludes only GET, so that any other HTTP method is treated as a state-changing login attempt subject to all security controls.

    CVSS rationale

    AV:N – the login endpoint is network-accessible. AC:L – the attack requires only changing the HTTP method in a request; no race conditions or complex setup. AT:N – no manipulation of the target system is needed. PR:N – the login endpoint is accessible without prior authentication. UI:N – no user interaction required. VC:L – bypass of bruteforce protection enables credential brute-forcing, potentially exposing user credentials. VI:L – bypass of email OTP (2FA) and failure logging compromises the integrity of the authentication process and audit trail. VA:N – no direct denial-of-service impact. SC/SI/SA:N – no secondary system impact is evidenced.

    Weakness rationale
    • CWE-20 The root cause is that the application validated the HTTP method using an incomplete allowlist (POST, PUT) rather than rejecting all non-safe methods. This is a classic improper input validation flaw where the set of accepted values was not exhaustive, allowing unexpected methods to bypass security logic.
    • CWE-285 The security controls (bruteforce protection, OTP enforcement, failure logging) are authorization/authentication enforcement mechanisms that were improperly applied only to a subset of HTTP methods, effectively allowing unauthorized bypass of these controls.
    Attack pattern rationale
    • CAPEC-1 The attacker modifies a parameter of the authentication request (the HTTP method) to alter which security checks are executed, effectively modifying the authentication logic at runtime. This is the closest CAPEC to the observed bypass. Uncertainty: CAPEC-1 typically refers to modifying authentication logic in a more direct sense (e.g., altering credential checks), whereas here the modification is via the HTTP method header. However, no other CAPEC more precisely captures the act of altering a request attribute to skip authentication security controls.
    Assumptions to verify
    • The exact affected version range is not explicitly stated in the patch; the tag_version_boundary metadata indicates v2.5.47 with 143 commits after the fix, suggesting the fix landed shortly after 2.5.47, but the precise last-affected and first-fixed versions are not confirmed.
    • The CAPEC-1 mapping is the closest available pattern; the actual attack vector (HTTP method substitution) is a form of request parameter manipulation that does not have a dedicated CAPEC entry, so CAPEC-1 is used as the best approximation.
    • The CVSS vector assumes the MISP instance is exposed over a network and that the login endpoint is reachable without prior authentication, which is the standard deployment model for MISP.
    • The patch does not include a test case demonstrating the bypass; the analysis is based solely on the code diff and commit message.
    • It is assumed that the MISP framework (CakePHP) does not independently enforce HTTP method restrictions at a middleware layer that would have already blocked non-POST/PUT methods to this endpoint; the patch implies such enforcement was absent.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94379",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T15:20:43.610267Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T15:21:01.092Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "UsersController (login endpoint)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/UsersController.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "unspecified",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe login() function in MISP\u0027s UsersController.php contained insufficient HTTP method validation for several security-critical code paths. The original code used an allowlist approach, checking only for specific HTTP methods (POST and PUT) before enforcing bruteforce protection, email one-time-password (OTP) verification, and login-failure logging. Because the checks were not exhaustive, an unauthenticated attacker could issue login requests using other HTTP methods and bypass all three security controls simultaneously. Specifically:\u0026nbsp;\u003c/p\u003e\u2003-\u0026nbsp;the bruteforce blocklisting check and attempt counter were skipped, allowing unlimited credential-guessing attempts without being rate-limited or blocked\u003cbr\u003e\u2003-\u0026nbsp; the email OTP two-factor authentication step was skipped, defeating the second factor of authentication\u003cbr\u003e\u003cdiv\u003e\u2003- login-failure events were neither logged nor counted, removing the audit trail and the mechanism that would normally trigger a blocklist entry.\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cp\u003eThe security impact is the effective disabling of brute-force protection and multi-factor authentication for any attacker who can craft an HTTP request with a non-POST/PUT method to the login endpoint, potentially leading to credential compromise and unauthorized access to the MISP instance.\u003cbr\u003e\u003c/p\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e"
                }
              ],
              "value": "The login() function in MISP\u0027s UsersController.php contained insufficient HTTP method validation for several security-critical code paths. The original code used an allowlist approach, checking only for specific HTTP methods (POST and PUT) before enforcing bruteforce protection, email one-time-password (OTP) verification, and login-failure logging. Because the checks were not exhaustive, an unauthenticated attacker could issue login requests using other HTTP methods and bypass all three security controls simultaneously. Specifically:\u00a0\n\n\u2003-\u00a0the bruteforce blocklisting check and attempt counter were skipped, allowing unlimited credential-guessing attempts without being rate-limited or blocked\n\u2003-\u00a0 the email OTP two-factor authentication step was skipped, defeating the second factor of authentication\n\u2003- login-failure events were neither logged nor counted, removing the audit trail and the mechanism that would normally trigger a blocklist entry.\n\n\n\n\nThe security impact is the effective disabling of brute-force protection and multi-factor authentication for any attacker who can craft an HTTP request with a non-POST/PUT method to the login endpoint, potentially leading to credential compromise and unauthorized access to the MISP instance.\n\n\n\n\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Improperly Controlled Modification of Authentication Logic"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.9,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-285",
                  "description": "CWE-285 Improper Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T12:35:26.533Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/ef4dc19c6"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix replaces the allowlist-style HTTP method checks (is POST or PUT) with a denylist approach (is NOT GET) in all three security-critical branches of the login() function. This ensures that every non-GET HTTP method\u2014regardless of whether it is POST, PUT, PATCH, DELETE, HEAD, OPTIONS, or any other\u2014triggers the bruteforce protection, email OTP verification, and login-failure logging code paths, closing the method-based bypass.\u003c/p\u003e"
                }
              ],
              "value": "The fix replaces the allowlist-style HTTP method checks (is POST or PUT) with a denylist approach (is NOT GET) in all three security-critical branches of the login() function. This ensures that every non-GET HTTP method\u2014regardless of whether it is POST, PUT, PATCH, DELETE, HEAD, OPTIONS, or any other\u2014triggers the bruteforce protection, email OTP verification, and login-failure logging code paths, closing the method-based bypass."
            }
          ],
          "title": "MISP: HTTP Method Bypass of Login Security Controls (Bruteforce Protection and Email OTP)",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The exact affected version range is not explicitly stated in the patch; the tag_version_boundary metadata indicates v2.5.47 with 143 commits after the fix, suggesting the fix landed shortly after 2.5.47, but the precise last-affected and first-fixed versions are not confirmed.",
                      "The CAPEC-1 mapping is the closest available pattern; the actual attack vector (HTTP method substitution) is a form of request parameter manipulation that does not have a dedicated CAPEC entry, so CAPEC-1 is used as the best approximation.",
                      "The CVSS vector assumes the MISP instance is exposed over a network and that the login endpoint is reachable without prior authentication, which is the standard deployment model for MISP.",
                      "The patch does not include a test case demonstrating the bypass; the analysis is based solely on the code diff and commit message.",
                      "It is assumed that the MISP framework (CakePHP) does not independently enforce HTTP method restrictions at a middleware layer that would have already blocked non-POST/PUT methods to this endpoint; the patch implies such enforcement was absent."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "The attacker modifies a parameter of the authentication request (the HTTP method) to alter which security checks are executed, effectively modifying the authentication logic at runtime. This is the closest CAPEC to the observed bypass. Uncertainty: CAPEC-1 typically refers to modifying authentication logic in a more direct sense (e.g., altering credential checks), whereas here the modification is via the HTTP method header. However, no other CAPEC more precisely captures the act of altering a request attribute to skip authentication security controls."
                      }
                    ],
                    "commit": "ef4dc19c6d4f029c3173e5fafea75a94c127f8b5",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      }
                    ],
                    "cvssRationale": "AV:N \u2013 the login endpoint is network-accessible. AC:L \u2013 the attack requires only changing the HTTP method in a request; no race conditions or complex setup. AT:N \u2013 no manipulation of the target system is needed. PR:N \u2013 the login endpoint is accessible without prior authentication. UI:N \u2013 no user interaction required. VC:L \u2013 bypass of bruteforce protection enables credential brute-forcing, potentially exposing user credentials. VI:L \u2013 bypass of email OTP (2FA) and failure logging compromises the integrity of the authentication process and audit trail. VA:N \u2013 no direct denial-of-service impact. SC/SI/SA:N \u2013 no secondary system impact is evidenced.",
                    "fixSummary": "The fix replaces the allowlist-style HTTP method checks (is POST or PUT) with a denylist approach (is NOT GET) in all three security-critical branches of the login() function. This ensures that every non-GET HTTP method\u2014regardless of whether it is POST, PUT, PATCH, DELETE, HEAD, OPTIONS, or any other\u2014triggers the bruteforce protection, email OTP verification, and login-failure logging code paths, closing the method-based bypass.",
                    "generatedAt": "2026-09-21T12:30:02.387878Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "ff6f133b194fcd5c913990fce421bd56de7a12e488291a2ec7422d92284e71d8",
                    "patchSummary": "Three conditional expressions in UsersController::login() were changed. (1) The bruteforce-protection guard changed from $this-\u003erequest-\u003eis([\u0027post\u0027,\u0027put\u0027]) to !$this-\u003erequest-\u003eis([\u0027get\u0027]). (2) The email-OTP guard changed from $this-\u003erequest-\u003eis(\u0027post\u0027) to !$this-\u003erequest-\u003eis([\u0027get\u0027]). (3) The login-failure handling guard changed from $this-\u003erequest-\u003eis(\u0027post\u0027) || $this-\u003erequest-\u003eis(\u0027put\u0027) to !$this-\u003erequest-\u003eis(\u0027get\u0027). All three changes invert the logic from an explicit allowlist of methods to a denylist that excludes only GET, so that any other HTTP method is treated as a state-changing login attempt subject to all security controls.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "ef4dc19c6d4f029c3173e5fafea75a94c127f8b5",
                        "patchSha256": "ff6f133b194fcd5c913990fce421bd56de7a12e488291a2ec7422d92284e71d8",
                        "source": "https://github.com/MISP/MISP/commit/ef4dc19c6.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/ef4dc19c6.patch",
                        "subject": "fix: [security] insufficient check on http methods for the"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/ef4dc19c6.patch",
                    "subject": "fix: [security] insufficient check on http methods for the",
                    "tagVersionBoundary": {
                      "commits_after_fix": 143,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-20",
                        "rationale": "The root cause is that the application validated the HTTP method using an incomplete allowlist (POST, PUT) rather than rejecting all non-safe methods. This is a classic improper input validation flaw where the set of accepted values was not exhaustive, allowing unexpected methods to bypass security logic."
                      },
                      {
                        "cweId": "CWE-285",
                        "rationale": "The security controls (bruteforce protection, OTP enforcement, failure logging) are authorization/authentication enforcement mechanisms that were improperly applied only to a subset of HTTP methods, effectively allowing unauthorized bypass of these controls."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20013"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94379",
        "datePublished": "2026-09-21T12:35:26.533Z",
        "dateReserved": "2026-09-21T12:35:24.635Z",
        "dateUpdated": "2026-09-21T15:21:01.092Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94374 (GCVE-0-2026-94374)

    Vulnerability from cvelistv5 – Published: 2026-09-21 12:25 – Updated: 2026-09-21 15:21
    VLAI
    Title
    MISP: IDOR via Client-Supplied Report ID in Module Results Processing Allows Reparenting and Overwriting of Other Events' Reports
    Summary
    MISP contains an insecure direct object reference vulnerability in the processModuleResultsData method of the Event model. When processing module results, the code iterates over EventReport entries supplied in the resolved data and saves each one. Unlike the adjacent attribute and object processing loops, the report loop did not unset the client-supplied 'id' field before calling save(). Because the MISP EventReport model's create() method does not strip the id field, an authenticated user with permission to submit module results could include an 'id' value referencing an existing report belonging to a different event. Upon save(), the ORM would update that existing row rather than insert a new one, allowing the attacker to   - read the content of another event's report by reparenting it into their own event  - overwrite the report's fields with attacker-controlled data  - change the report's event_id to redirect ownership.  This constitutes an authorization bypass through a user-controlled key, enabling cross-event data disclosure and integrity compromise. The vulnerability requires an authenticated session with the ability to invoke module result processing on an event. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 15:21 UTC
    CWE
    • CWE-639 - Authorization Bypass Through User-Controlled Key
    • CWE-472 - External Control of Assumed-Immutable Web Parameter
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 12:19
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/4c1a03b20.patch 1079aff9d4e4…
    Confidence
    medium
    Commit Subject Patch SHA-256
    4c1a03b200fc fix: [security] Strip the client id from module-result event 1079aff9d4e4…
    Fix summary

    The fix adds an unset($report['id']) call in the EventReport processing loop within processModuleResultsData, immediately before the event_id assignment and save() call. This ensures that any client-supplied id field is stripped from the report data, forcing the ORM to perform an insert (new report) rather than an update (existing report), consistent with the existing behavior of the attribute and object loops in the same method.

    Patch summary

    In app/Model/Event.php, within the foreach loop over $resolved_data['EventReport'] in processModuleResultsData, a single line unset($report['id']); is inserted after $this->EventReport->create() and before $report['event_id'] = $id. A four-line comment is added explaining that module-result import only creates reports and that stripping the client id prevents redirecting save() onto another event's report row. No other files or logic are modified.

    CVSS rationale

    AV:N – MISP is a network-accessible web application. AC:L – the attack requires only including an 'id' field in a normal module-results submission; no race condition or complex bypass is needed. AT:N – no prior user interaction or attack preparation beyond crafting the payload. PR:L – requires an authenticated user with permission to submit module results on an event (a common MISP role). UI:N – no victim interaction required. VC:L – the attacker can read the content of one specific report they target by id. VI:H – the attacker can overwrite all fields of the targeted report and change its event_id, fully compromising its integrity. VA:N – no availability impact. SC/SI/SA – no impact on adjacent systems; SI:H reflects the integrity compromise of the shared report data store.

    Weakness rationale
    • CWE-639 The attacker supplies an 'id' value in the module-results payload that the application uses as the primary key for the save() operation, redirecting the write to an object (report row) belonging to a different event. The user-controlled key bypasses the intended create-only semantics and grants unauthorized read/write access to another event's report.
    • CWE-472 The 'id' field is assumed to be server-generated and immutable for new records, but the application accepts a client-supplied value and passes it directly to the ORM save() call, allowing the attacker to control which database row is affected.
    Attack pattern rationale
    • CAPEC-126 The attacker tampers with the module-results payload by injecting an 'id' parameter that the application does not expect or sanitize, redirecting the save operation to an arbitrary existing report row. This is the closest CAPEC to the observed attack: manipulating a request parameter to alter application behavior and access an unauthorized object. The mapping is approximate because CAPEC-126 typically describes in-transit tampering, whereas here the parameter is included in the initial request body; however, no more specific CAPEC for mass-assignment IDOR exists in the CAPEC catalog.
    Assumptions to verify
    • The exact affected and fixed MISP version numbers are not stated in the patch metadata; the tag boundary (v2.5.47, 53 commits after fix) suggests the fix landed after v2.5.47 but the precise fixed release is unspecified.
    • PR:L assumes that submitting module results is available to any authenticated user with write access to an event; if MISP requires a more restrictive role (e.g., admin or org admin), PR should be raised to H.
    • VC:L assumes the attacker can read only the specific report they target by id; if the reparenting exposes additional data (e.g., related attributes), the confidentiality impact could be higher.
    • CAPEC-126 (Parameter Tampering) is the closest available CAPEC; the actual technique is more precisely a mass-assignment / IDOR via unsanitized primary key, for which no dedicated CAPEC entry exists.
    • The Co-Authored-By line references an AI assistant (Claude Opus 4.8); it is credited as a tool rather than a human remediation developer.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94374",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T15:21:38.785106Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T15:21:57.870Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Model/Event.php (processModuleResultsData / handleModuleResults)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Model/Event.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 4.8"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP contains an insecure direct object reference vulnerability in the processModuleResultsData method of the Event model. When processing module results, the code iterates over EventReport entries supplied in the resolved data and saves each one. Unlike the adjacent attribute and object processing loops, the report loop did not unset the client-supplied \u0027id\u0027 field before calling save(). Because the MISP EventReport model\u0027s create() method does not strip the id field, an authenticated user with permission to submit module results could include an \u0027id\u0027 value referencing an existing report belonging to a different event. Upon save(), the ORM would update that existing row rather than insert a new one, allowing the attacker to\u0026nbsp;\u003c/p\u003e\u2003-\u0026nbsp;read the content of another event\u0027s report by reparenting it into their own event\u003cbr\u003e\u2003-\u0026nbsp;overwrite the report\u0027s fields with attacker-controlled data\u003cbr\u003e\u003cdiv\u003e\u2003-\u0026nbsp;change the report\u0027s event_id to redirect ownership.\u0026nbsp;\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cp\u003eThis constitutes an authorization bypass through a user-controlled key, enabling cross-event data disclosure and integrity compromise. The vulnerability requires an authenticated session with the ability to invoke module result processing on an event.\u003c/p\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e"
                }
              ],
              "value": "MISP contains an insecure direct object reference vulnerability in the processModuleResultsData method of the Event model. When processing module results, the code iterates over EventReport entries supplied in the resolved data and saves each one. Unlike the adjacent attribute and object processing loops, the report loop did not unset the client-supplied \u0027id\u0027 field before calling save(). Because the MISP EventReport model\u0027s create() method does not strip the id field, an authenticated user with permission to submit module results could include an \u0027id\u0027 value referencing an existing report belonging to a different event. Upon save(), the ORM would update that existing row rather than insert a new one, allowing the attacker to\u00a0\n\n\u2003-\u00a0read the content of another event\u0027s report by reparenting it into their own event\n\u2003-\u00a0overwrite the report\u0027s fields with attacker-controlled data\n\u2003-\u00a0change the report\u0027s event_id to redirect ownership.\u00a0\n\n\n\n\nThis constitutes an authorization bypass through a user-controlled key, enabling cross-event data disclosure and integrity compromise. The vulnerability requires an authenticated session with the ability to invoke module result processing on an event.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-126",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-126 Parameter Tampering"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 8.3,
                "baseSeverity": "HIGH",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:H/VA:N/SC:N/SI:H/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-639",
                  "description": "CWE-639 Authorization Bypass Through User-Controlled Key",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-472",
                  "description": "CWE-472 External Control of Assumed-Immutable Web Parameter",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T12:25:02.628Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/4c1a03b20"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix adds an unset($report[\u0027id\u0027]) call in the EventReport processing loop within processModuleResultsData, immediately before the event_id assignment and save() call. This ensures that any client-supplied id field is stripped from the report data, forcing the ORM to perform an insert (new report) rather than an update (existing report), consistent with the existing behavior of the attribute and object loops in the same method.\u003c/p\u003e"
                }
              ],
              "value": "The fix adds an unset($report[\u0027id\u0027]) call in the EventReport processing loop within processModuleResultsData, immediately before the event_id assignment and save() call. This ensures that any client-supplied id field is stripped from the report data, forcing the ORM to perform an insert (new report) rather than an update (existing report), consistent with the existing behavior of the attribute and object loops in the same method."
            }
          ],
          "title": "MISP: IDOR via Client-Supplied Report ID in Module Results Processing Allows Reparenting and Overwriting of Other Events\u0027 Reports",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The exact affected and fixed MISP version numbers are not stated in the patch metadata; the tag boundary (v2.5.47, 53 commits after fix) suggests the fix landed after v2.5.47 but the precise fixed release is unspecified.",
                      "PR:L assumes that submitting module results is available to any authenticated user with write access to an event; if MISP requires a more restrictive role (e.g., admin or org admin), PR should be raised to H.",
                      "VC:L assumes the attacker can read only the specific report they target by id; if the reparenting exposes additional data (e.g., related attributes), the confidentiality impact could be higher.",
                      "CAPEC-126 (Parameter Tampering) is the closest available CAPEC; the actual technique is more precisely a mass-assignment / IDOR via unsanitized primary key, for which no dedicated CAPEC entry exists.",
                      "The Co-Authored-By line references an AI assistant (Claude Opus 4.8); it is credited as a tool rather than a human remediation developer."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-126",
                        "rationale": "The attacker tampers with the module-results payload by injecting an \u0027id\u0027 parameter that the application does not expect or sanitize, redirecting the save operation to an arbitrary existing report row. This is the closest CAPEC to the observed attack: manipulating a request parameter to alter application behavior and access an unauthorized object. The mapping is approximate because CAPEC-126 typically describes in-transit tampering, whereas here the parameter is included in the initial request body; however, no more specific CAPEC for mass-assignment IDOR exists in the CAPEC catalog."
                      }
                    ],
                    "commit": "4c1a03b200fc75854879897c9cfc33a86b965d11",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 4.8"
                      }
                    ],
                    "cvssRationale": "AV:N \u2013 MISP is a network-accessible web application. AC:L \u2013 the attack requires only including an \u0027id\u0027 field in a normal module-results submission; no race condition or complex bypass is needed. AT:N \u2013 no prior user interaction or attack preparation beyond crafting the payload. PR:L \u2013 requires an authenticated user with permission to submit module results on an event (a common MISP role). UI:N \u2013 no victim interaction required. VC:L \u2013 the attacker can read the content of one specific report they target by id. VI:H \u2013 the attacker can overwrite all fields of the targeted report and change its event_id, fully compromising its integrity. VA:N \u2013 no availability impact. SC/SI/SA \u2013 no impact on adjacent systems; SI:H reflects the integrity compromise of the shared report data store.",
                    "fixSummary": "The fix adds an unset($report[\u0027id\u0027]) call in the EventReport processing loop within processModuleResultsData, immediately before the event_id assignment and save() call. This ensures that any client-supplied id field is stripped from the report data, forcing the ORM to perform an insert (new report) rather than an update (existing report), consistent with the existing behavior of the attribute and object loops in the same method.",
                    "generatedAt": "2026-09-21T12:19:38.677403Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "1079aff9d4e4710ba6c4ea950bcbbe2597411bfe7065efbc1bc9a5587f87a6c9",
                    "patchSummary": "In app/Model/Event.php, within the foreach loop over $resolved_data[\u0027EventReport\u0027] in processModuleResultsData, a single line unset($report[\u0027id\u0027]); is inserted after $this-\u003eEventReport-\u003ecreate() and before $report[\u0027event_id\u0027] = $id. A four-line comment is added explaining that module-result import only creates reports and that stripping the client id prevents redirecting save() onto another event\u0027s report row. No other files or logic are modified.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "4c1a03b200fc75854879897c9cfc33a86b965d11",
                        "patchSha256": "1079aff9d4e4710ba6c4ea950bcbbe2597411bfe7065efbc1bc9a5587f87a6c9",
                        "source": "https://github.com/MISP/MISP/commit/4c1a03b20.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/4c1a03b20.patch",
                        "subject": "fix: [security] Strip the client id from module-result event"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/4c1a03b20.patch",
                    "subject": "fix: [security] Strip the client id from module-result event",
                    "tagVersionBoundary": {
                      "commits_after_fix": 53,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-639",
                        "rationale": "The attacker supplies an \u0027id\u0027 value in the module-results payload that the application uses as the primary key for the save() operation, redirecting the write to an object (report row) belonging to a different event. The user-controlled key bypasses the intended create-only semantics and grants unauthorized read/write access to another event\u0027s report."
                      },
                      {
                        "cweId": "CWE-472",
                        "rationale": "The \u0027id\u0027 field is assumed to be server-generated and immutable for new records, but the application accepts a client-supplied value and passes it directly to the ORM save() call, allowing the attacker to control which database row is affected."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20022"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94374",
        "datePublished": "2026-09-21T12:25:02.628Z",
        "dateReserved": "2026-09-21T12:25:00.527Z",
        "dateUpdated": "2026-09-21T15:21:57.870Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94373 (GCVE-0-2026-94373)

    Vulnerability from cvelistv5 – Published: 2026-09-21 12:16 – Updated: 2026-09-21 15:22
    VLAI
    Title
    MISP DOM-based Cross-Site Scripting via innerHTML in Contextual Menu
    Summary
    MISP contains a DOM-based cross-site scripting (XSS) vulnerability in the contextual menu JavaScript component. The ContextualMenu class populates HTML <option> elements by assigning user-controllable values to the innerHTML property. Because innerHTML parses and renders HTML markup, any untrusted string supplied as the option text (value.text or value) is interpreted as live DOM content rather than plain text. An attacker who can influence the data rendered in the contextual menu can inject arbitrary HTML or JavaScript that executes in the victim's browser within the MISP application origin. This may allow session hijacking, data exfiltration, or unauthorized actions performed on behalf of the authenticated user. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 15:22 UTC
    CWE
    • CWE-79 - Cross-site Scripting (XSS)
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 12:08
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/b062698f2.patch 843bc32d5dc3…
    Confidence
    medium
    Commit Subject Patch SHA-256
    b062698f2699 fix: [xss] via JS innerHTML - as reported by David Andre and 843bc32d5dc3…
    Fix summary

    The vulnerability is remediated by replacing the unsafe innerHTML property assignments with the safe textContent property when setting the display text of dynamically created <option> elements. textContent inserts the value as plain text without parsing HTML, thereby neutralizing any injected markup or script.

    Patch summary

    In app/webroot/js/contextual_menu.js, within the ContextualMenu class, two lines that set option.innerHTML (one for object-valued entries using value.text and one for scalar entries using value) are changed to option.textContent. No other logic, event handlers, or surrounding code is modified. The change is limited to the two assignment statements in the option-population loop.

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: The injection is straightforward once attacker-controlled data reaches the menu options. AT:N: No special targeting of a specific session state is required beyond the data being rendered. PR:L: The attacker must be authenticated to MISP to inject data that will be rendered in the contextual menu. UI:P: The victim must interact with the contextual menu (e.g., open it) for the injected content to execute. VC/VI/VA:N: The MISP server itself is not directly compromised. SC:H/SI:H: The victim's browser (subsequent component) suffers high confidentiality and integrity impact via script execution in the MISP origin. SA:N: Availability of the browser is not impacted.

    Weakness rationale
    • CWE-79 The patch replaces innerHTML with textContent to prevent HTML/JS injection into the DOM, which is the canonical remediation for DOM-based XSS (CWE-79). The specific sub-type is DOM-based XSS via unsafe DOM API usage (innerHTML), but CWE-79 is the narrowest standard identifier that covers this.
    Attack pattern rationale
    • CAPEC-12 The vulnerability is a textbook DOM-based XSS: attacker-controlled data is written into the DOM via the innerHTML property, causing the browser to parse and execute injected markup/script. CAPEC-12 (DOM-based XSS) is the most precise CAPEC pattern. The mapping is high-confidence because the patch explicitly targets innerHTML-to-textContent in a client-side JS file, which is the defining characteristic of DOM-based XSS.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary (v2.5.47 with 137 commits after the fix), suggesting the fix landed shortly after v2.5.47; no explicit affected/fixed version strings are provided in the metadata.
    • PR:L assumes the attacker must be an authenticated MISP user to inject data that reaches the contextual menu; if an unauthenticated injection path exists, PR could be N.
    • UI:P assumes the victim must actively open or interact with the contextual menu for the XSS to trigger; if the menu renders automatically on page load, UI could be N.
    • The CAPEC-12 mapping is high-confidence based on the innerHTML-to-textContent pattern, but the exact data flow (which upstream field feeds value.text) is not visible in the patch.
    • AT:N assumes the attacker does not need to target a specific user's session; if the payload must be tailored to a particular user's view, AT could be P.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94373",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T15:22:19.064596Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T15:22:31.730Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/webroot/js/contextual_menu.js"
              ],
              "product": "MISP",
              "programFiles": [
                "app/webroot/js/contextual_menu.js"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "David Andre"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP contains a DOM-based cross-site scripting (XSS) vulnerability in the contextual menu JavaScript component. The ContextualMenu class populates HTML \u0026lt;option\u0026gt; elements by assigning user-controllable values to the innerHTML property. Because innerHTML parses and renders HTML markup, any untrusted string supplied as the option text (value.text or value) is interpreted as live DOM content rather than plain text. An attacker who can influence the data rendered in the contextual menu can inject arbitrary HTML or JavaScript that executes in the victim\u0027s browser within the MISP application origin. This may allow session hijacking, data exfiltration, or unauthorized actions performed on behalf of the authenticated user.\u003c/p\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e"
                }
              ],
              "value": "MISP contains a DOM-based cross-site scripting (XSS) vulnerability in the contextual menu JavaScript component. The ContextualMenu class populates HTML \u003coption\u003e elements by assigning user-controllable values to the innerHTML property. Because innerHTML parses and renders HTML markup, any untrusted string supplied as the option text (value.text or value) is interpreted as live DOM content rather than plain text. An attacker who can influence the data rendered in the contextual menu can inject arbitrary HTML or JavaScript that executes in the victim\u0027s browser within the MISP application origin. This may allow session hijacking, data exfiltration, or unauthorized actions performed on behalf of the authenticated user.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-12",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-12 DOM-based XSS"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.3,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-79",
                  "description": "CWE-79 Cross-site Scripting (XSS)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T12:16:47.877Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/b062698f2"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe vulnerability is remediated by replacing the unsafe innerHTML property assignments with the safe textContent property when setting the display text of dynamically created \u0026lt;option\u0026gt; elements. textContent inserts the value as plain text without parsing HTML, thereby neutralizing any injected markup or script.\u003c/p\u003e"
                }
              ],
              "value": "The vulnerability is remediated by replacing the unsafe innerHTML property assignments with the safe textContent property when setting the display text of dynamically created \u003coption\u003e elements. textContent inserts the value as plain text without parsing HTML, thereby neutralizing any injected markup or script."
            }
          ],
          "title": "MISP DOM-based Cross-Site Scripting via innerHTML in Contextual Menu",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The affected version range is inferred from the tag_version_boundary (v2.5.47 with 137 commits after the fix), suggesting the fix landed shortly after v2.5.47; no explicit affected/fixed version strings are provided in the metadata.",
                      "PR:L assumes the attacker must be an authenticated MISP user to inject data that reaches the contextual menu; if an unauthenticated injection path exists, PR could be N.",
                      "UI:P assumes the victim must actively open or interact with the contextual menu for the XSS to trigger; if the menu renders automatically on page load, UI could be N.",
                      "The CAPEC-12 mapping is high-confidence based on the innerHTML-to-textContent pattern, but the exact data flow (which upstream field feeds value.text) is not visible in the patch.",
                      "AT:N assumes the attacker does not need to target a specific user\u0027s session; if the payload must be tailored to a particular user\u0027s view, AT could be P."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-12",
                        "rationale": "The vulnerability is a textbook DOM-based XSS: attacker-controlled data is written into the DOM via the innerHTML property, causing the browser to parse and execute injected markup/script. CAPEC-12 (DOM-based XSS) is the most precise CAPEC pattern. The mapping is high-confidence because the patch explicitly targets innerHTML-to-textContent in a client-side JS file, which is the defining characteristic of DOM-based XSS."
                      }
                    ],
                    "commit": "b062698f269996ffe3ceb23de78612d768a3bfe2",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      }
                    ],
                    "cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: The injection is straightforward once attacker-controlled data reaches the menu options. AT:N: No special targeting of a specific session state is required beyond the data being rendered. PR:L: The attacker must be authenticated to MISP to inject data that will be rendered in the contextual menu. UI:P: The victim must interact with the contextual menu (e.g., open it) for the injected content to execute. VC/VI/VA:N: The MISP server itself is not directly compromised. SC:H/SI:H: The victim\u0027s browser (subsequent component) suffers high confidentiality and integrity impact via script execution in the MISP origin. SA:N: Availability of the browser is not impacted.",
                    "draft": false,
                    "fixSummary": "The vulnerability is remediated by replacing the unsafe innerHTML property assignments with the safe textContent property when setting the display text of dynamically created \u003coption\u003e elements. textContent inserts the value as plain text without parsing HTML, thereby neutralizing any injected markup or script.",
                    "generatedAt": "2026-09-21T12:08:13.810140Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "843bc32d5dc337c115c79558f499550f4659a063b250fca808e32725cd586c9f",
                    "patchSummary": "In app/webroot/js/contextual_menu.js, within the ContextualMenu class, two lines that set option.innerHTML (one for object-valued entries using value.text and one for scalar entries using value) are changed to option.textContent. No other logic, event handlers, or surrounding code is modified. The change is limited to the two assignment statements in the option-population loop.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "b062698f269996ffe3ceb23de78612d768a3bfe2",
                        "patchSha256": "843bc32d5dc337c115c79558f499550f4659a063b250fca808e32725cd586c9f",
                        "source": "https://github.com/MISP/MISP/commit/b062698f2.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/b062698f2.patch",
                        "subject": "fix: [xss] via JS innerHTML - as reported by David Andre and"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/b062698f2.patch",
                    "subject": "fix: [xss] via JS innerHTML - as reported by David Andre and",
                    "tagVersionBoundary": {
                      "commits_after_fix": 137,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "The patch replaces innerHTML with textContent to prevent HTML/JS injection into the DOM, which is the canonical remediation for DOM-based XSS (CWE-79). The specific sub-type is DOM-based XSS via unsafe DOM API usage (innerHTML), but CWE-79 is the narrowest standard identifier that covers this."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20033"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94373",
        "datePublished": "2026-09-21T12:16:47.877Z",
        "dateReserved": "2026-09-21T12:16:44.364Z",
        "dateUpdated": "2026-09-21T15:22:31.730Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94372 (GCVE-0-2026-94372)

    Vulnerability from cvelistv5 – Published: 2026-09-21 12:02 – Updated: 2026-09-21 15:23
    VLAI
    Title
    Stored Cross-Site Scripting via Unescaped Galaxy Cluster Tag Names in MISP Default Theme Galaxies Index
    Summary
    MISP contains a stored cross-site scripting (XSS) vulnerability in the default theme's Galaxies index page. When a MISP instance detects unknown custom or default galaxy clusters during synchronization, it renders sample tag names in an informational notice directed at site administrators. In the default theme, these sample tag names were inserted into the HTML output without HTML-entity encoding. A user with tag-editor privileges could craft a malicious misp-galaxy tag containing arbitrary script. When a site administrator subsequently viewed the Galaxies index page, the crafted tag content was interpreted as executable markup in the administrator's browser session, enabling the attacker to read session data, perform actions on behalf of the administrator, or otherwise compromise the administrator's browser context. The Overmind theme already applied HTML escaping to the same values and was not affected. The vulnerability requires the attacker to possess tag-editor-level access to create the crafted tag and requires the victim (a site administrator) to view the Galaxies index page in the default theme. The impact is limited to the administrator's browser session and does not directly compromise the MISP server process. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 15:22 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 11:56
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/ce10436ae.patch c629d71fb493…
    Confidence
    medium
    Commit Subject Patch SHA-256
    ce10436ae989 fix: [security] Escape unknown-cluster samples in the c629d71fb493…
    Fix summary

    The fix applies CakePHP's h() HTML-encoding function to each sample tag name before it is interpolated into the HTML notice. This ensures that any angle brackets, quotes, or ampersands contained in user-supplied tag names are rendered as inert HTML entities, preventing script execution in the administrator's browser.

    Patch summary

    In app/View/Galaxies/index.ctp, two lines that built $tagSampleHTML via sprintf and implode over the unknownCustomClustersSamples and unknownDefaultClustersSamples arrays were modified to wrap each array with array_map('h', ...) before the implode. This causes every element to pass through CakePHP's h() helper (HTML entity encoding) prior to concatenation into the <li> list markup. No other logic, routing, or authorization changes were made.

    CVSS rationale

    AV:N: exploited over the network via the web UI. AC:L: the attacker simply creates a tag with a script payload; no race or complex condition. AT:N: no attack-target manipulation required. PR:L: the attacker needs tag-editor privileges (lower than admin) to create the crafted misp-galaxy tag. UI:P: the victim (site admin) must passively view the Galaxies index page for the script to execute. VC/VI/VA:N: the MISP application process itself is not directly compromised; the impact is on the victim's browser session. SC:H: the attacker can read the admin's session cookies, tokens, and data visible in the browser. SI:H: the attacker can perform authenticated actions as the admin via the compromised session. SA:N: no meaningful availability impact on the scope component.

    Weakness rationale
    • CWE-79 User-controlled tag names (misp-galaxy tags created by a tag editor) are inserted into an HTML page without output encoding, allowing script injection. This is a classic stored XSS (CWE-79) where the dangerous data is persisted in the database and rendered unsafely in a server-side template.
    Attack pattern rationale
    • CAPEC-1 CAPEC-1 is the closest available pattern describing an attacker supplying malicious input that is not properly neutralized before being used in a context where it is interpreted (here, HTML). No dedicated CAPEC for stored XSS exists in the catalog; CAPEC-1 is the narrowest defensible match for an output-encoding failure. Uncertainty: the pattern is broad and does not specifically name XSS, but it is the best available mapping for an input-escaping deficiency.
    Assumptions to verify
    • The tag_version_boundary (v2.5.47, 45 commits after fix) is interpreted as the fix landing after v2.5.47; exact affected version range is not explicitly stated in the patch and is marked as less_than 2.5.47 with status affected, but this is an inference.
    • The 'tag editor' role is assumed to be a lower-privilege role than site admin in MISP's RBAC model, justifying PR:L.
    • UI:P (Passive) is used because the victim only needs to load the Galaxies index page; no click or explicit interaction with the malicious content is required. The previous UI:R value was invalid in CVSS v4.0 (valid values: N, P, A).
    • CAPEC-1 is the closest available pattern; no CAPEC specifically names stored XSS, so the mapping is approximate.
    • The Overmind theme is stated in the commit message as already escaping these values; it is assumed unaffected but no patch evidence for it is provided.
    • The Co-Authored-By line for Claude Opus 4.8 is treated as a remediation developer credit per the supplied metadata; it is unclear whether this represents an AI-assisted contribution or a human developer using AI tooling.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 4 9 medium 6
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94372",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T15:22:49.873477Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T15:23:04.003Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "Galaxies index (default theme)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/View/Galaxies/index.ctp"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 4.8"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP contains a stored cross-site scripting (XSS) vulnerability in the default theme\u0027s Galaxies index page. When a MISP instance detects unknown custom or default galaxy clusters during synchronization, it renders sample tag names in an informational notice directed at site administrators. In the default theme, these sample tag names were inserted into the HTML output without HTML-entity encoding. A user with tag-editor privileges could craft a malicious misp-galaxy tag containing arbitrary script. When a site administrator subsequently viewed the Galaxies index page, the crafted tag content was interpreted as executable markup in the administrator\u0027s browser session, enabling the attacker to read session data, perform actions on behalf of the administrator, or otherwise compromise the administrator\u0027s browser context. The Overmind theme already applied HTML escaping to the same values and was not affected. The vulnerability requires the attacker to possess tag-editor-level access to create the crafted tag and requires the victim (a site administrator) to view the Galaxies index page in the default theme. The impact is limited to the administrator\u0027s browser session and does not directly compromise the MISP server process.\u003c/p\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e"
                }
              ],
              "value": "MISP contains a stored cross-site scripting (XSS) vulnerability in the default theme\u0027s Galaxies index page. When a MISP instance detects unknown custom or default galaxy clusters during synchronization, it renders sample tag names in an informational notice directed at site administrators. In the default theme, these sample tag names were inserted into the HTML output without HTML-entity encoding. A user with tag-editor privileges could craft a malicious misp-galaxy tag containing arbitrary script. When a site administrator subsequently viewed the Galaxies index page, the crafted tag content was interpreted as executable markup in the administrator\u0027s browser session, enabling the attacker to read session data, perform actions on behalf of the administrator, or otherwise compromise the administrator\u0027s browser context. The Overmind theme already applied HTML escaping to the same values and was not affected. The vulnerability requires the attacker to possess tag-editor-level access to create the crafted tag and requires the victim (a site administrator) to view the Galaxies index page in the default theme. The impact is limited to the administrator\u0027s browser session and does not directly compromise the MISP server process.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Improper Neutralization of Input"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.3,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-79",
                  "description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T12:02:17.104Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/ce10436ae"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix applies CakePHP\u0027s h() HTML-encoding function to each sample tag name before it is interpolated into the HTML notice. This ensures that any angle brackets, quotes, or ampersands contained in user-supplied tag names are rendered as inert HTML entities, preventing script execution in the administrator\u0027s browser.\u003c/p\u003e"
                }
              ],
              "value": "The fix applies CakePHP\u0027s h() HTML-encoding function to each sample tag name before it is interpolated into the HTML notice. This ensures that any angle brackets, quotes, or ampersands contained in user-supplied tag names are rendered as inert HTML entities, preventing script execution in the administrator\u0027s browser."
            }
          ],
          "title": "Stored Cross-Site Scripting via Unescaped Galaxy Cluster Tag Names in MISP Default Theme Galaxies Index",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The tag_version_boundary (v2.5.47, 45 commits after fix) is interpreted as the fix landing after v2.5.47; exact affected version range is not explicitly stated in the patch and is marked as less_than 2.5.47 with status affected, but this is an inference.",
                      "The \u0027tag editor\u0027 role is assumed to be a lower-privilege role than site admin in MISP\u0027s RBAC model, justifying PR:L.",
                      "UI:P (Passive) is used because the victim only needs to load the Galaxies index page; no click or explicit interaction with the malicious content is required. The previous UI:R value was invalid in CVSS v4.0 (valid values: N, P, A).",
                      "CAPEC-1 is the closest available pattern; no CAPEC specifically names stored XSS, so the mapping is approximate.",
                      "The Overmind theme is stated in the commit message as already escaping these values; it is assumed unaffected but no patch evidence for it is provided.",
                      "The Co-Authored-By line for Claude Opus 4.8 is treated as a remediation developer credit per the supplied metadata; it is unclear whether this represents an AI-assisted contribution or a human developer using AI tooling."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "CAPEC-1 is the closest available pattern describing an attacker supplying malicious input that is not properly neutralized before being used in a context where it is interpreted (here, HTML). No dedicated CAPEC for stored XSS exists in the catalog; CAPEC-1 is the narrowest defensible match for an output-encoding failure. Uncertainty: the pattern is broad and does not specifically name XSS, but it is the best available mapping for an input-escaping deficiency."
                      }
                    ],
                    "commit": "ce10436ae989a4580a35ada1557ff9d9107f43ed",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 4.8"
                      }
                    ],
                    "cvssRationale": "AV:N: exploited over the network via the web UI. AC:L: the attacker simply creates a tag with a script payload; no race or complex condition. AT:N: no attack-target manipulation required. PR:L: the attacker needs tag-editor privileges (lower than admin) to create the crafted misp-galaxy tag. UI:P: the victim (site admin) must passively view the Galaxies index page for the script to execute. VC/VI/VA:N: the MISP application process itself is not directly compromised; the impact is on the victim\u0027s browser session. SC:H: the attacker can read the admin\u0027s session cookies, tokens, and data visible in the browser. SI:H: the attacker can perform authenticated actions as the admin via the compromised session. SA:N: no meaningful availability impact on the scope component.",
                    "draft": false,
                    "fixSummary": "The fix applies CakePHP\u0027s h() HTML-encoding function to each sample tag name before it is interpolated into the HTML notice. This ensures that any angle brackets, quotes, or ampersands contained in user-supplied tag names are rendered as inert HTML entities, preventing script execution in the administrator\u0027s browser.",
                    "generatedAt": "2026-09-21T11:56:43.983892Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 6,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 4
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "c629d71fb493dcf9ae82dd54bd424cd4335e7638f3db46ec4c0ae90695abb535",
                    "patchSummary": "In app/View/Galaxies/index.ctp, two lines that built $tagSampleHTML via sprintf and implode over the unknownCustomClustersSamples and unknownDefaultClustersSamples arrays were modified to wrap each array with array_map(\u0027h\u0027, ...) before the implode. This causes every element to pass through CakePHP\u0027s h() helper (HTML entity encoding) prior to concatenation into the \u003cli\u003e list markup. No other logic, routing, or authorization changes were made.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "ce10436ae989a4580a35ada1557ff9d9107f43ed",
                        "patchSha256": "c629d71fb493dcf9ae82dd54bd424cd4335e7638f3db46ec4c0ae90695abb535",
                        "source": "https://github.com/MISP/MISP/commit/ce10436ae.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/ce10436ae.patch",
                        "subject": "fix: [security] Escape unknown-cluster samples in the"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/ce10436ae.patch",
                    "subject": "fix: [security] Escape unknown-cluster samples in the",
                    "tagVersionBoundary": {
                      "commits_after_fix": 45,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "User-controlled tag names (misp-galaxy tags created by a tag editor) are inserted into an HTML page without output encoding, allowing script injection. This is a classic stored XSS (CWE-79) where the dangerous data is persisted in the database and rendered unsafely in a server-side template."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20002"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94372",
        "datePublished": "2026-09-21T12:02:17.104Z",
        "dateReserved": "2026-09-21T12:02:13.614Z",
        "dateUpdated": "2026-09-21T15:23:04.003Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-94277 (GCVE-0-2026-94277)

    Vulnerability from cvelistv5 – Published: 2026-09-21 09:25 – Updated: 2026-09-21 11:16
    VLAI
    Title
    Stored Cross-Site Scripting in MISP Galaxy Matrix Statistics via Unescaped Galaxy Name
    Summary
    MISP's galaxy matrix statistics view (app/View/Users/statistics_galaxymatrix.ctp) renders the galaxy name directly into HTML output via sprintf() without any HTML encoding. An authenticated user holding the perm_galaxy_editor permission can create or modify a galaxy whose name contains arbitrary HTML or JavaScript markup. Because the value is interpolated verbatim into the page, any user who subsequently opens the galaxy matrix statistics page will have the embedded script executed in their browser context. This enables session hijacking, credential theft, data exfiltration, or the performance of arbitrary actions on behalf of the victim within the MISP application. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-21 11:15 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-21 08:45
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/6b7637bf4.patch c87b2f367c3c…
    Confidence
    high
    Commit Subject Patch SHA-256
    6b7637bf4663 fix: [security] Escape the galaxy name in the statistics c87b2f367c3c…
    Fix summary

    The fix applies CakePHP's h() HTML-encoding function to the $galaxyName variable before it is passed to sprintf() for HTML output, ensuring that any special characters (angle brackets, quotes, etc.) in the galaxy name are percent-encoded and rendered as inert text rather than executable markup.

    Patch summary

    In app/View/Users/statistics_galaxymatrix.ctp, the single line echo sprintf(__('A heatmap showing the usage of %s.'), $galaxyName) was changed to echo sprintf(__('A heatmap showing the usage of %s.'), h($galaxyName)), wrapping the user-controlled variable with CakePHP's HTML-encoding helper before interpolation into the HTML document.

    CVSS rationale

    AV:N: The attack is delivered over the network via the MISP web interface. AC:L: Creating a galaxy with a script-bearing name requires no special timing or race condition. AT:N: No additional attack complexity beyond normal application use. PR:L: The attacker needs an authenticated account with perm_galaxy_editor, a low-privilege role. UI:P: The victim must visit the galaxy matrix statistics page, a legitimate page they may open during normal work; no specific tricked action (click, download) is required. VC/VI/VA:N: The MISP server itself suffers no direct confidentiality, integrity, or availability loss; the payload executes client-side. SC:H: The victim's browser session is fully compromised (cookies, tokens, in-page data). SI:H: The attacker can perform arbitrary actions in the victim's authenticated session. SA:N: No denial-of-service impact on the victim's browser. Assumption: perm_galaxy_editor is a low-privilege role (PR:L); if it requires higher clearance, PR could be H.

    Weakness rationale
    • CWE-79 The root cause is the direct interpolation of a user-controlled string (galaxy name) into an HTML context without output encoding, allowing script injection. This is a textbook stored XSS (CWE-79).
    Assumptions to verify
    • perm_galaxy_editor is treated as a low-privilege role (PR:L); if it requires elevated clearance the PR metric should be raised to H.
    • The affected version boundary is inferred from the tag v2.5.47 (47 commits after the fix commit); no explicit 'fixed in' version is stated in the patch.
    • UI:P assumes the victim voluntarily navigates to the statistics page as part of normal workflow rather than being lured by a crafted link (which would be UI:A).
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 8 9 high 3
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-94277",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-21T11:15:58.920644Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-21T11:16:10.434Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/View/Users/statistics_galaxymatrix.ctp"
              ],
              "product": "MISP",
              "programFiles": [
                "app/View/Users/statistics_galaxymatrix.ctp"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 4.8"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP\u0027s galaxy matrix statistics view (app/View/Users/statistics_galaxymatrix.ctp) renders the galaxy name directly into HTML output via sprintf() without any HTML encoding. An authenticated user holding the perm_galaxy_editor permission can create or modify a galaxy whose name contains arbitrary HTML or JavaScript markup. Because the value is interpolated verbatim into the page, any user who subsequently opens the galaxy matrix statistics page will have the embedded script executed in their browser context. This enables session hijacking, credential theft, data exfiltration, or the performance of arbitrary actions on behalf of the victim within the MISP application.\u003c/p\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e"
                }
              ],
              "value": "MISP\u0027s galaxy matrix statistics view (app/View/Users/statistics_galaxymatrix.ctp) renders the galaxy name directly into HTML output via sprintf() without any HTML encoding. An authenticated user holding the perm_galaxy_editor permission can create or modify a galaxy whose name contains arbitrary HTML or JavaScript markup. Because the value is interpolated verbatim into the page, any user who subsequently opens the galaxy matrix statistics page will have the embedded script executed in their browser context. This enables session hijacking, credential theft, data exfiltration, or the performance of arbitrary actions on behalf of the victim within the MISP application.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-63",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-63 Cross-Site Scripting (XSS)"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.3,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:H/SI:H/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-79",
                  "description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-21T09:25:04.966Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/6b7637bf4"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix applies CakePHP\u0027s h() HTML-encoding function to the $galaxyName variable before it is passed to sprintf() for HTML output, ensuring that any special characters (angle brackets, quotes, etc.) in the galaxy name are percent-encoded and rendered as inert text rather than executable markup.\u003c/p\u003e"
                }
              ],
              "value": "The fix applies CakePHP\u0027s h() HTML-encoding function to the $galaxyName variable before it is passed to sprintf() for HTML output, ensuring that any special characters (angle brackets, quotes, etc.) in the galaxy name are percent-encoded and rendered as inert text rather than executable markup."
            }
          ],
          "title": "Stored Cross-Site Scripting in MISP Galaxy Matrix Statistics via Unescaped Galaxy Name",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "perm_galaxy_editor is treated as a low-privilege role (PR:L); if it requires elevated clearance the PR metric should be raised to H.",
                      "The affected version boundary is inferred from the tag v2.5.47 (47 commits after the fix commit); no explicit \u0027fixed in\u0027 version is stated in the patch.",
                      "UI:P assumes the victim voluntarily navigates to the statistics page as part of normal workflow rather than being lured by a crafted link (which would be UI:A)."
                    ],
                    "commit": "6b7637bf46633e880d8fb9900fa69986eabfc82e",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 4.8"
                      }
                    ],
                    "cvssRationale": "AV:N: The attack is delivered over the network via the MISP web interface. AC:L: Creating a galaxy with a script-bearing name requires no special timing or race condition. AT:N: No additional attack complexity beyond normal application use. PR:L: The attacker needs an authenticated account with perm_galaxy_editor, a low-privilege role. UI:P: The victim must visit the galaxy matrix statistics page, a legitimate page they may open during normal work; no specific tricked action (click, download) is required. VC/VI/VA:N: The MISP server itself suffers no direct confidentiality, integrity, or availability loss; the payload executes client-side. SC:H: The victim\u0027s browser session is fully compromised (cookies, tokens, in-page data). SI:H: The attacker can perform arbitrary actions in the victim\u0027s authenticated session. SA:N: No denial-of-service impact on the victim\u0027s browser. Assumption: perm_galaxy_editor is a low-privilege role (PR:L); if it requires higher clearance, PR could be H.",
                    "draft": false,
                    "fixSummary": "The fix applies CakePHP\u0027s h() HTML-encoding function to the $galaxyName variable before it is passed to sprintf() for HTML output, ensuring that any special characters (angle brackets, quotes, etc.) in the galaxy name are percent-encoded and rendered as inert text rather than executable markup.",
                    "generatedAt": "2026-09-21T08:45:23.903680Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 3,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 8
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "c87b2f367c3cb449d92ad781865f48beeed01298a6c2a91d9f5234e67ab2930d",
                    "patchSummary": "In app/View/Users/statistics_galaxymatrix.ctp, the single line echo sprintf(__(\u0027A heatmap showing the usage of %s.\u0027), $galaxyName) was changed to echo sprintf(__(\u0027A heatmap showing the usage of %s.\u0027), h($galaxyName)), wrapping the user-controlled variable with CakePHP\u0027s HTML-encoding helper before interpolation into the HTML document.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "6b7637bf46633e880d8fb9900fa69986eabfc82e",
                        "patchSha256": "c87b2f367c3cb449d92ad781865f48beeed01298a6c2a91d9f5234e67ab2930d",
                        "source": "https://github.com/MISP/MISP/commit/6b7637bf4.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/6b7637bf4.patch",
                        "subject": "fix: [security] Escape the galaxy name in the statistics"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/6b7637bf4.patch",
                    "subject": "fix: [security] Escape the galaxy name in the statistics",
                    "tagVersionBoundary": {
                      "commits_after_fix": 47,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "The root cause is the direct interpolation of a user-controlled string (galaxy name) into an HTML context without output encoding, allowing script injection. This is a textbook stored XSS (CWE-79)."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20155"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-94277",
        "datePublished": "2026-09-21T09:25:04.966Z",
        "dateReserved": "2026-09-21T09:25:02.306Z",
        "dateUpdated": "2026-09-21T11:16:10.434Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-93296 (GCVE-0-2026-93296)

    Vulnerability from cvelistv5 – Published: 2026-09-17 16:29 – Updated: 2026-09-22 07:36
    VLAI
    Title
    MISP Overmind: Stored Cross-Site Scripting via Unescaped Object Names in Statistics Legends
    Summary
    MISP contains a stored cross-site scripting (XSS) vulnerability in the Overmind theme's statistics views. The event General card and the server/feed preview card constructed donut chart legend labels by directly concatenating object name or category keys into an innerHTML string without HTML-encoding. Because MISP object names are user-controllable by any authenticated user with sufficient permissions to create or modify such objects, an attacker could craft a name containing malicious markup. When any other user viewed the affected Overmind dashboard, the injected markup would be interpreted as live HTML/JavaScript in the victim's browser, executing in the context of the MISP application origin. This could allow session hijacking, data exfiltration, or arbitrary actions performed on behalf of the victim.  The vulnerability requires the attacker to have low-level authenticated access to create or rename an object whose name is rendered in the legend, and the victim to view the Overmind event or server preview page. No special browser conditions or race conditions are required.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-17 18:06 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    References
    Impacted products
    Vendor Product Version
    misp misp Affected: unspecified , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Human-reviewed GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-17 16:28
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/misp/commit/382188d2f.patch 3c6f0376c712…
    Confidence
    high
    Commit Subject Patch SHA-256
    382188d2f270 fix: [security] Escape object names in the Overmind 3c6f0376c712…
    Fix summary

    The fix applies HTML output encoding to the user-controlled label variable (lbl) before it is interpolated into the innerHTML string in both affected view templates. By wrapping the label with escapeHtml(), any HTML metacharacters in object names are neutralized, preventing injected markup from being interpreted as executable HTML or JavaScript in the viewer's browser.

    Patch summary

    Two one-line changes in the Overmind theme view templates. In app/View/Themed/Overmind/Elements/Events/View/event_general.ctp (line 607) and app/View/Themed/Overmind/Elements/Servers/View/preview_general.ctp (line 323), the raw lbl variable used in the title attribute and inner text of the legend span element is replaced with escapeHtml(lbl). No other logic, routing, or configuration changes are made.

    CVSS rationale

    AV:N: The vulnerability is exploitable over the network via a web browser. AC:L: Exploitation requires only creating an object with a crafted name; no race or special conditions. AT:N: The attack targets the same MISP instance. PR:L: The attacker needs low-level authenticated access to create or rename an MISP object. UI:P: The victim passively interacts by viewing the Overmind dashboard page; no click or explicit action is needed beyond normal page rendering. VC/VI/VA:N: No direct impact on the MISP server's confidentiality, integrity, or availability. SC:H/SI:H: The injected script executes in the victim's browser within the MISP origin, enabling full session compromise (cookie theft, data exfiltration, arbitrary actions). SA:N: No availability impact on the victim's browser.

    Weakness rationale
    • CWE-79 User-controlled object names are concatenated directly into an innerHTML string without HTML encoding, allowing injected markup to execute in the victim's browser. This is a textbook stored XSS via missing output encoding at an HTML sink.
    Attack pattern rationale
    • CAPEC-1 The attack pattern involves injecting client-side script into a web application via user-controllable data (object names) that is rendered without encoding in an HTML context. CAPEC-1 is the canonical XSS attack pattern and directly matches the mechanism: attacker-controlled data flows into an innerHTML sink. No uncertainty in this mapping; the patch explicitly describes the innerHTML concatenation of unescaped labels.
    Assumptions to verify
    • The exact affected version range is not explicitly stated in the patch; the tag_version_boundary indicates the fix commit is 55 commits after v2.5.47, suggesting versions up to (but not including) the release containing this commit are affected. The precise fixed version is unspecified.
    • PR:L assumes the attacker needs at least low-level authenticated access to create or rename a MISP object whose name appears in the Overmind legend. If unauthenticated object creation is possible in some deployment, PR could be N.
    • UI:P assumes the victim simply views the Overmind dashboard page (passive interaction). If the page requires a specific navigation action beyond normal browsing, UI could be A.
    • SC:H and SI:H assume the XSS grants full access to the victim's MISP session (cookies, API tokens, in-page data). A more conservative assessment could rate these L if the Overmind view exposes limited data.
    • The CAPEC-1 mapping is direct and unambiguous for this stored XSS; no uncertainty is noted beyond the standard CAPEC granularity.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 high 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-93296",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-17T18:06:22.658218Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-17T18:06:37.608Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "modules": [
                "Overmind theme - Events View (event_general.ctp)",
                "Overmind theme - Servers View (preview_general.ctp)"
              ],
              "product": "misp",
              "programFiles": [
                "app/View/Themed/Overmind/Elements/Events/View/event_general.ctp",
                "app/View/Themed/Overmind/Elements/Servers/View/preview_general.ctp"
              ],
              "repo": "https://github.com/MISP/misp",
              "vendor": "misp",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "unspecified",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Jeroen Pinoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 4.8"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP contains a stored cross-site scripting (XSS) vulnerability in the Overmind theme\u0027s statistics views. The event General card and the server/feed preview card constructed donut chart legend labels by directly concatenating object name or category keys into an innerHTML string without HTML-encoding. Because MISP object names are user-controllable by any authenticated user with sufficient permissions to create or modify such objects, an attacker could craft a name containing malicious markup. When any other user viewed the affected Overmind dashboard, the injected markup would be interpreted as live HTML/JavaScript in the victim\u0027s browser, executing in the context of the MISP application origin. This could allow session hijacking, data exfiltration, or arbitrary actions performed on behalf of the victim.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe vulnerability requires the attacker to have low-level authenticated access to create or rename an object whose name is rendered in the legend, and the victim to view the Overmind event or server preview page. No special browser conditions or race conditions are required.\u003c/p\u003e"
                }
              ],
              "value": "MISP contains a stored cross-site scripting (XSS) vulnerability in the Overmind theme\u0027s statistics views. The event General card and the server/feed preview card constructed donut chart legend labels by directly concatenating object name or category keys into an innerHTML string without HTML-encoding. Because MISP object names are user-controllable by any authenticated user with sufficient permissions to create or modify such objects, an attacker could craft a name containing malicious markup. When any other user viewed the affected Overmind dashboard, the injected markup would be interpreted as live HTML/JavaScript in the victim\u0027s browser, executing in the context of the MISP application origin. This could allow session hijacking, data exfiltration, or arbitrary actions performed on behalf of the victim.\u00a0\n\nThe vulnerability requires the attacker to have low-level authenticated access to create or rename an object whose name is rendered in the legend, and the victim to view the Overmind event or server preview page. No special browser conditions or race conditions are required."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Cross Site Scripting"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 8.5,
                "baseSeverity": "HIGH",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "LOW",
                "subIntegrityImpact": "LOW",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:N/SC:L/SI:L/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "HIGH",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-79",
                  "description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T07:36:53.603Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/misp/commit/382188d2f"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix applies HTML output encoding to the user-controlled label variable (lbl) before it is interpolated into the innerHTML string in both affected view templates. By wrapping the label with escapeHtml(), any HTML metacharacters in object names are neutralized, preventing injected markup from being interpreted as executable HTML or JavaScript in the viewer\u0027s browser.\u003c/p\u003e"
                }
              ],
              "value": "The fix applies HTML output encoding to the user-controlled label variable (lbl) before it is interpolated into the innerHTML string in both affected view templates. By wrapping the label with escapeHtml(), any HTML metacharacters in object names are neutralized, preventing injected markup from being interpreted as executable HTML or JavaScript in the viewer\u0027s browser."
            }
          ],
          "source": {
            "discovery": "UNKNOWN"
          },
          "title": "MISP Overmind: Stored Cross-Site Scripting via Unescaped Object Names in Statistics Legends",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "full",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The exact affected version range is not explicitly stated in the patch; the tag_version_boundary indicates the fix commit is 55 commits after v2.5.47, suggesting versions up to (but not including) the release containing this commit are affected. The precise fixed version is unspecified.",
                      "PR:L assumes the attacker needs at least low-level authenticated access to create or rename a MISP object whose name appears in the Overmind legend. If unauthenticated object creation is possible in some deployment, PR could be N.",
                      "UI:P assumes the victim simply views the Overmind dashboard page (passive interaction). If the page requires a specific navigation action beyond normal browsing, UI could be A.",
                      "SC:H and SI:H assume the XSS grants full access to the victim\u0027s MISP session (cookies, API tokens, in-page data). A more conservative assessment could rate these L if the Overmind view exposes limited data.",
                      "The CAPEC-1 mapping is direct and unambiguous for this stored XSS; no uncertainty is noted beyond the standard CAPEC granularity."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "The attack pattern involves injecting client-side script into a web application via user-controllable data (object names) that is rendered without encoding in an HTML context. CAPEC-1 is the canonical XSS attack pattern and directly matches the mechanism: attacker-controlled data flows into an innerHTML sink. No uncertainty in this mapping; the patch explicitly describes the innerHTML concatenation of unescaped labels."
                      }
                    ],
                    "commit": "382188d2f27004118592cf32f970313b31abcb52",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 4.8"
                      }
                    ],
                    "cvssRationale": "AV:N: The vulnerability is exploitable over the network via a web browser. AC:L: Exploitation requires only creating an object with a crafted name; no race or special conditions. AT:N: The attack targets the same MISP instance. PR:L: The attacker needs low-level authenticated access to create or rename an MISP object. UI:P: The victim passively interacts by viewing the Overmind dashboard page; no click or explicit action is needed beyond normal page rendering. VC/VI/VA:N: No direct impact on the MISP server\u0027s confidentiality, integrity, or availability. SC:H/SI:H: The injected script executes in the victim\u0027s browser within the MISP origin, enabling full session compromise (cookie theft, data exfiltration, arbitrary actions). SA:N: No availability impact on the victim\u0027s browser.",
                    "fixSummary": "The fix applies HTML output encoding to the user-controlled label variable (lbl) before it is interpolated into the innerHTML string in both affected view templates. By wrapping the label with escapeHtml(), any HTML metacharacters in object names are neutralized, preventing injected markup from being interpreted as executable HTML or JavaScript in the viewer\u0027s browser.",
                    "generatedAt": "2026-09-17T16:28:27.480704Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "3c6f0376c712f90fde19eba1ca80cd16433ad02587b8237862fd64b60607d8bf",
                    "patchSummary": "Two one-line changes in the Overmind theme view templates. In app/View/Themed/Overmind/Elements/Events/View/event_general.ctp (line 607) and app/View/Themed/Overmind/Elements/Servers/View/preview_general.ctp (line 323), the raw lbl variable used in the title attribute and inner text of the legend span element is replaced with escapeHtml(lbl). No other logic, routing, or configuration changes are made.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "382188d2f27004118592cf32f970313b31abcb52",
                        "patchSha256": "3c6f0376c712f90fde19eba1ca80cd16433ad02587b8237862fd64b60607d8bf",
                        "source": "https://github.com/MISP/misp/commit/382188d2f.patch",
                        "sourceUrl": "https://github.com/MISP/misp/commit/382188d2f.patch",
                        "subject": "fix: [security] Escape object names in the Overmind"
                      }
                    ],
                    "source": "https://github.com/MISP/misp/commit/382188d2f.patch",
                    "subject": "fix: [security] Escape object names in the Overmind",
                    "tagVersionBoundary": {
                      "commits_after_fix": 55,
                      "repository": "https://github.com/MISP/misp",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "User-controlled object names are concatenated directly into an innerHTML string without HTML encoding, allowing injected markup to execute in the victim\u0027s browser. This is a textbook stored XSS via missing output encoding at an HTML sink."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "gcve-1-2026-20206"
            }
          ],
          "x_generator": {
            "engine": "Vulnogram 0.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-93296",
        "datePublished": "2026-09-17T16:29:19.457Z",
        "dateReserved": "2026-09-17T16:29:16.587Z",
        "dateUpdated": "2026-09-22T07:36:53.603Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-93295 (GCVE-0-2026-93295)

    Vulnerability from cvelistv5 – Published: 2026-09-17 16:25 – Updated: 2026-09-22 07:42
    VLAI
    Title
    MISP Background Job Argument Injection via Console Path Switches Enables Remote Code Execution
    Summary
    MISP contains a vulnerability in its background job dispatch mechanism that allows remote code execution as the web user. Background job arguments are passed directly as the argv of the CakePHP console process. CakePHP's ShellDispatcher::_parsePaths() scans the entire argv for path switches (-app, --app, -working, --working, -root, --root, -webroot, --webroot) and uses the following element as the application root. The events/contact endpoint passes user-controlled fields (message and person) into job arguments without validation. An attacker who can submit the contact form can set the person field to a reserved switch and the message field to a phar:// URI pointing to a malicious archive. The CakePHP bootstrap then includes Config/core.php from within that archive, executing attacker-controlled PHP code with the privileges of the web user.  The vulnerability requires the ability to submit the events/contact form (or any other endpoint that forwards user input into background job arguments). No special timing or race condition is required; the attack is deterministic once the crafted parameters are accepted. The impact is full remote code execution in the context of the MISP web server process, allowing data exfiltration, persistence, and lateral movement within the host.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-17 18:09 UTC
    CWE
    • CWE-74 - Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection')
    • CWE-20 - Improper Input Validation
    References
    Impacted products
    Vendor Product Version
    misp misp Affected: < 2.5.47 , < 2.5.47 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Human-reviewed GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-17 16:22
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/misp/commit/120813344.patch 8e176aa69e4b…
    Confidence
    high
    Commit Subject Patch SHA-256
    120813344f36 fix: [security] Refuse console path switches in background 8e176aa69e4b…
    Fix summary

    The fix introduces a validation layer in BackgroundJobsTool::enqueue() that rejects any job argument matching a reserved CakePHP console path switch (-app, --app, -working, --working, -root, --root, -webroot, --webroot), throwing an InvalidArgumentException before the job is queued. Additionally, the EventsController::contact() method now casts the person field to a boolean, preventing it from ever forming a switch/value pair with the adjacent message field. Together, these changes ensure that user-supplied data can never be interpreted as a console path directive by the worker process.

    Patch summary

    Three files are modified. In BackgroundJobsTool.php, a new RESERVED_ARGUMENTS constant lists the eight console path switches, and a new private validateArgs() method iterates over job arguments and throws InvalidArgumentException if any string argument exactly matches a reserved switch. The enqueue() method calls validateArgs() before dispatching. In EventsController.php, the person field assignment in contact() is changed from a raw value to (bool) cast. A new test file BackgroundJobsToolArgumentsTest.php verifies that ordinary arguments pass, free text merely containing a switch substring passes, every reserved switch is refused, and non-string arguments are unaffected.

    CVSS rationale

    AV:N: The contact endpoint is reachable over the network via HTTP. AC:L: The attack requires only crafting two form fields with a known switch string and a phar:// path; no race conditions or special timing. AT:N: No specific target configuration or state is required beyond a standard MISP installation. PR:L: The attacker needs a low-privilege authenticated MISP account with access to the event contact action. UI:N: No victim interaction is needed beyond the attacker's own form submission. VC:H, VI:H, VA:H: Successful exploitation results in arbitrary PHP code execution as the web user, giving full control over the MISP server's data, processes, and availability. SC:N, SI:N, SA:N: The impact is confined to the MISP server itself; no evidence of lateral impact on other systems.

    Weakness rationale
    • CWE-74 User-controlled form fields (person, message) are passed as arguments to a downstream component (the CakePHP console dispatcher) where special elements (path switches like -app, -root) are interpreted as directives rather than data. The lack of neutralization of these special elements in the job argument vector is the root cause.
    • CWE-20 The background job enqueue path accepted arbitrary string arguments without validating them against the set of values that the downstream console dispatcher interprets as control switches. The fix adds explicit validation to reject reserved argument values.
    Attack pattern rationale
    • CAPEC-14 The attacker manipulates the person and message parameters of the events/contact form to inject CakePHP console path switches into the background job argv. The parameters are modified so that the downstream console dispatcher interprets them as directives (setting the application root) rather than as data. This is the closest CAPEC pattern; the attack does not involve classic OS command injection (CAPEC-88) but rather argument injection into a framework-level dispatcher, making CAPEC-14 the best available match.
    Assumptions to verify
    • The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.47, 43 commits after fix); the exact first fixed release is not explicitly stated in the patch and may differ.
    • PR:L assumes the events/contact endpoint requires at least a low-privilege authenticated session; if the endpoint is accessible without authentication in some MISP configurations, PR should be U (Unprivileged).
    • The CAPEC-14 mapping is the closest available pattern; the attack is more specifically an argument injection into a framework dispatcher rather than generic parameter manipulation, but no CAPEC entry precisely describes this mechanism.
    • The phar:// exploitation path assumes the target PHP process has the phar stream wrapper enabled and that the attacker can place or reference a crafted archive accessible via the phar:// URI; the patch does not explicitly confirm the phar wrapper is enabled by default.
    • The commit date (17 Sep 2026) is in the future relative to typical CVE timelines; this is taken at face value from the patch metadata.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 high 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-93295",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-17T18:09:12.355251Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-17T18:09:27.142Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "modules": [
                "app/Controller/EventsController.php",
                "app/Lib/Tools/BackgroundJobsTool.php"
              ],
              "product": "misp",
              "repo": "https://github.com/MISP/misp",
              "vendor": "misp",
              "versions": [
                {
                  "lessThan": "2.5.47",
                  "status": "affected",
                  "version": "\u003c 2.5.47",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Niels Teusink of Eye Security"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP contains a vulnerability in its background job dispatch mechanism that allows remote code execution as the web user. Background job arguments are passed directly as the argv of the CakePHP console process. CakePHP\u0027s ShellDispatcher::_parsePaths() scans the entire argv for path switches (-app, --app, -working, --working, -root, --root, -webroot, --webroot) and uses the following element as the application root. The events/contact endpoint passes user-controlled fields (message and person) into job arguments without validation. An attacker who can submit the contact form can set the person field to a reserved switch and the message field to a phar:// URI pointing to a malicious archive. The CakePHP bootstrap then includes Config/core.php from within that archive, executing attacker-controlled PHP code with the privileges of the web user.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe vulnerability requires the ability to submit the events/contact form (or any other endpoint that forwards user input into background job arguments). No special timing or race condition is required; the attack is deterministic once the crafted parameters are accepted. The impact is full remote code execution in the context of the MISP web server process, allowing data exfiltration, persistence, and lateral movement within the host.\u003c/p\u003e"
                }
              ],
              "value": "MISP contains a vulnerability in its background job dispatch mechanism that allows remote code execution as the web user. Background job arguments are passed directly as the argv of the CakePHP console process. CakePHP\u0027s ShellDispatcher::_parsePaths() scans the entire argv for path switches (-app, --app, -working, --working, -root, --root, -webroot, --webroot) and uses the following element as the application root. The events/contact endpoint passes user-controlled fields (message and person) into job arguments without validation. An attacker who can submit the contact form can set the person field to a reserved switch and the message field to a phar:// URI pointing to a malicious archive. The CakePHP bootstrap then includes Config/core.php from within that archive, executing attacker-controlled PHP code with the privileges of the web user.\u00a0\n\nThe vulnerability requires the ability to submit the events/contact form (or any other endpoint that forwards user input into background job arguments). No special timing or race condition is required; the attack is deterministic once the crafted parameters are accepted. The impact is full remote code execution in the context of the MISP web server process, allowing data exfiltration, persistence, and lateral movement within the host."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-14",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-14 Parameter Manipulation"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 8.7,
                "baseSeverity": "HIGH",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "HIGH",
                "vulnConfidentialityImpact": "HIGH",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-74",
                  "description": "CWE-74 Improper Neutralization of Special Elements in Output Used by a Downstream Component (\u0027Injection\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T07:42:13.496Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/misp/commit/120813344"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces a validation layer in BackgroundJobsTool::enqueue() that rejects any job argument matching a reserved CakePHP console path switch (-app, --app, -working, --working, -root, --root, -webroot, --webroot), throwing an InvalidArgumentException before the job is queued. Additionally, the EventsController::contact() method now casts the person field to a boolean, preventing it from ever forming a switch/value pair with the adjacent message field. Together, these changes ensure that user-supplied data can never be interpreted as a console path directive by the worker process.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces a validation layer in BackgroundJobsTool::enqueue() that rejects any job argument matching a reserved CakePHP console path switch (-app, --app, -working, --working, -root, --root, -webroot, --webroot), throwing an InvalidArgumentException before the job is queued. Additionally, the EventsController::contact() method now casts the person field to a boolean, preventing it from ever forming a switch/value pair with the adjacent message field. Together, these changes ensure that user-supplied data can never be interpreted as a console path directive by the worker process."
            }
          ],
          "source": {
            "discovery": "UNKNOWN"
          },
          "title": "MISP Background Job Argument Injection via Console Path Switches Enables Remote Code Execution",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "full",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.47, 43 commits after fix); the exact first fixed release is not explicitly stated in the patch and may differ.",
                      "PR:L assumes the events/contact endpoint requires at least a low-privilege authenticated session; if the endpoint is accessible without authentication in some MISP configurations, PR should be U (Unprivileged).",
                      "The CAPEC-14 mapping is the closest available pattern; the attack is more specifically an argument injection into a framework dispatcher rather than generic parameter manipulation, but no CAPEC entry precisely describes this mechanism.",
                      "The phar:// exploitation path assumes the target PHP process has the phar stream wrapper enabled and that the attacker can place or reference a crafted archive accessible via the phar:// URI; the patch does not explicitly confirm the phar wrapper is enabled by default.",
                      "The commit date (17 Sep 2026) is in the future relative to typical CVE timelines; this is taken at face value from the patch metadata."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-14",
                        "rationale": "The attacker manipulates the person and message parameters of the events/contact form to inject CakePHP console path switches into the background job argv. The parameters are modified so that the downstream console dispatcher interprets them as directives (setting the application root) rather than as data. This is the closest CAPEC pattern; the attack does not involve classic OS command injection (CAPEC-88) but rather argument injection into a framework-level dispatcher, making CAPEC-14 the best available match."
                      }
                    ],
                    "commit": "120813344f36b8fad15cd917e97b09fa3497156b",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Niels Teusink of Eye Security"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: The contact endpoint is reachable over the network via HTTP. AC:L: The attack requires only crafting two form fields with a known switch string and a phar:// path; no race conditions or special timing. AT:N: No specific target configuration or state is required beyond a standard MISP installation. PR:L: The attacker needs a low-privilege authenticated MISP account with access to the event contact action. UI:N: No victim interaction is needed beyond the attacker\u0027s own form submission. VC:H, VI:H, VA:H: Successful exploitation results in arbitrary PHP code execution as the web user, giving full control over the MISP server\u0027s data, processes, and availability. SC:N, SI:N, SA:N: The impact is confined to the MISP server itself; no evidence of lateral impact on other systems.",
                    "fixSummary": "The fix introduces a validation layer in BackgroundJobsTool::enqueue() that rejects any job argument matching a reserved CakePHP console path switch (-app, --app, -working, --working, -root, --root, -webroot, --webroot), throwing an InvalidArgumentException before the job is queued. Additionally, the EventsController::contact() method now casts the person field to a boolean, preventing it from ever forming a switch/value pair with the adjacent message field. Together, these changes ensure that user-supplied data can never be interpreted as a console path directive by the worker process.",
                    "generatedAt": "2026-09-17T16:22:44.930762Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "8e176aa69e4b6c13f3909225292a96c127076f333a6a49c1824599a79533de77",
                    "patchSummary": "Three files are modified. In BackgroundJobsTool.php, a new RESERVED_ARGUMENTS constant lists the eight console path switches, and a new private validateArgs() method iterates over job arguments and throws InvalidArgumentException if any string argument exactly matches a reserved switch. The enqueue() method calls validateArgs() before dispatching. In EventsController.php, the person field assignment in contact() is changed from a raw value to (bool) cast. A new test file BackgroundJobsToolArgumentsTest.php verifies that ordinary arguments pass, free text merely containing a switch substring passes, every reserved switch is refused, and non-string arguments are unaffected.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "120813344f36b8fad15cd917e97b09fa3497156b",
                        "patchSha256": "8e176aa69e4b6c13f3909225292a96c127076f333a6a49c1824599a79533de77",
                        "source": "https://github.com/MISP/misp/commit/120813344.patch",
                        "sourceUrl": "https://github.com/MISP/misp/commit/120813344.patch",
                        "subject": "fix: [security] Refuse console path switches in background"
                      }
                    ],
                    "source": "https://github.com/MISP/misp/commit/120813344.patch",
                    "subject": "fix: [security] Refuse console path switches in background",
                    "tagVersionBoundary": {
                      "commits_after_fix": 43,
                      "repository": "https://github.com/MISP/misp",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-74",
                        "rationale": "User-controlled form fields (person, message) are passed as arguments to a downstream component (the CakePHP console dispatcher) where special elements (path switches like -app, -root) are interpreted as directives rather than data. The lack of neutralization of these special elements in the job argument vector is the root cause."
                      },
                      {
                        "cweId": "CWE-20",
                        "rationale": "The background job enqueue path accepted arbitrary string arguments without validating them against the set of values that the downstream console dispatcher interprets as control switches. The fix adds explicit validation to reject reserved argument values."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "gcve-1-2026-20153"
            }
          ],
          "x_generator": {
            "engine": "Vulnogram 0.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-93295",
        "datePublished": "2026-09-17T16:25:40.730Z",
        "dateReserved": "2026-09-17T16:25:37.686Z",
        "dateUpdated": "2026-09-22T07:42:13.496Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-92932 (GCVE-0-2026-92932)

    Vulnerability from cvelistv5 – Published: 2026-09-17 12:33 – Updated: 2026-09-17 18:30
    VLAI
    Title
    MISP sachertortephp Xml::build() Operator Precedence Bypass Allows Unintended HTTPS SSRF When readFile Is Disabled
    Summary
    In the MISP sachertortephp library, the Xml::build() static method in lib/Cake/Utility/Xml.php contains a logic error in the conditional that gates network-based XML fetching. The original condition was written as: $options['readFile'] && strpos($input, 'http://') === 0 || strpos($input, 'https://') === 0. Because PHP's && operator has higher precedence than ||, the expression is evaluated as ($options['readFile'] && strpos($input, 'http://') === 0) || strpos($input, 'https://') === 0. As a result, when a caller explicitly sets the readFile option to false to disable file and URL reading, an input string beginning with https:// still satisfies the condition and triggers a network fetch via HttpSocket (configured to follow up to 10 redirects). The http:// branch is correctly gated by the readFile flag, but the https:// branch is not. An attacker who can influence the $input parameter passed to Xml::build() can therefore force the application to issue an outbound HTTPS request to an attacker-controlled or internal URL, even though the caller intended to suppress all remote reads. The fetched response is parsed as XML and may be returned to the caller, enabling information disclosure from internal services or external targets. This constitutes a Server-Side Request Forgery (SSRF) weakness with an information-disclosure impact. The vulnerability requires that the code path in Xml::build() be reachable with attacker-controlled input and that the readFile option be set to false (or the caller expects it to be false).
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-17 18:29 UTC
    CWE
    • CWE-918 - Server-Side Request Forgery (SSRF)
    • CWE-670 - Always-Incorrect Control Flow Implementation
    References
    Impacted products
    Vendor Product Version
    misp sachertortephp Affected: 0 , < 1c2da20cbe3f1e2a91458fe9a017823b7273fdac (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Human-reviewed GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-17 12:27
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/sachertortephp/commit/1c2da20cbe3f1e2a91458fe9a017823b7273fdac.patch a5f13eb5fbce…
    Confidence
    medium
    Commit Subject Patch SHA-256
    1c2da20cbe3f fix: [security] Gate the https branch of Xml::build() on a5f13eb5fbce…
    Fix summary

    The fix corrects the operator-precedence error by adding parentheses around the scheme check so that both the http:// and https:// branches are gated by the $options['readFile'] flag. After the fix, when readFile is false, neither scheme triggers a network fetch, restoring the caller's intended control over remote reads and eliminating the SSRF vector.

    Patch summary

    In lib/Cake/Utility/Xml.php, line 110, the condition $options['readFile'] && strpos($input, 'http://') === 0 || strpos($input, 'https://') === 0 is changed to $options['readFile'] && (strpos($input, 'http://') === 0 || strpos($input, 'https://') === 0). A single pair of parentheses is added around the two strpos comparisons so that the || is evaluated before the &&, ensuring the readFile flag gates both URL schemes. One line changed: 1 insertion, 1 deletion.

    CVSS rationale

    AV:N: the vulnerable function is a library utility reachable through network-facing application code. AC:L: the attacker only needs to supply an input string starting with https://; no race or complex condition is required. AT:N: no need to bypass security controls. PR:N: assumed no authentication is required to reach the code path (assumption; if the calling application requires auth, PR should be raised). UI:N: no user interaction needed. VC/VI/VA:N: the local application's own confidentiality, integrity, and availability are not directly compromised. SC:L: the attacker can read the HTTP response body from the fetched URL (information disclosure from the SSRF target), which is a limited impact on the target system's confidentiality. SI/SA:N: no integrity or availability impact on the target. The vector reflects a low-complexity SSRF with limited confidentiality impact on the remote target.

    Weakness rationale
    • CWE-918 The primary security impact is that the application issues an outbound HTTPS request to an attacker-influenced URL when the caller intended to disable remote reads. The HttpSocket follows up to 10 redirects, amplifying the SSRF surface. The response is parsed and potentially returned, enabling information disclosure from internal or external targets.
    • CWE-670 The root cause is a logic error: the conditional expression does not implement the intended control flow because of PHP operator precedence. The readFile gate is bypassed for the https:// branch, making the guard ineffective for that scheme. This is the underlying defect that produces the SSRF.
    Attack pattern rationale
    • CAPEC-66 The closest CAPEC is SSRF: an attacker supplies a URL (https://...) as input to a server-side function, and the server fetches it over the network. The patch confirms the code path performs an HttpSocket GET with redirect-following. The uncertainty is that the exact attack vector depends on how the calling application exposes Xml::build() input; the CAPEC mapping is based on the confirmed code behavior of fetching a caller-supplied URL.
    Assumptions to verify
    • PR:N is assumed; if the calling application requires authentication to reach Xml::build() with attacker-controlled input, the PR metric should be raised to PR:L or higher.
    • The affected version range is unspecified because the patch metadata does not include version tags or release boundaries.
    • The CAPEC-66 mapping is the closest available pattern; the exact exploitation context (which MISP endpoint or API exposes Xml::build() input) is not specified in the patch.
    • The HttpSocket redirect-following (up to 10 redirects) amplifies the SSRF surface but is not separately scored; it is subsumed under the SC:L impact.
    • The vulnerability requires the readFile option to be set to false; if all callers use the default (presumably true), the practical exploitability may be reduced, but the code still contains the logic defect.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-92932",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-17T18:29:40.334689Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-17T18:30:42.720Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "modules": [
                "lib/Cake/Utility/Xml.php"
              ],
              "product": "sachertortephp",
              "programFiles": [
                "lib/Cake/Utility/Xml.php"
              ],
              "repo": "https://github.com/MISP/sachertortephp",
              "vendor": "misp",
              "versions": [
                {
                  "lessThan": "1c2da20cbe3f1e2a91458fe9a017823b7273fdac",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "iglocska"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eIn the MISP sachertortephp library, the Xml::build() static method in lib/Cake/Utility/Xml.php contains a logic error in the conditional that gates network-based XML fetching. The original condition was written as: $options[\u0027readFile\u0027] \u0026amp;\u0026amp; strpos($input, \u0027http://\u0027) === 0 || strpos($input, \u0027https://\u0027) === 0. Because PHP\u0027s \u0026amp;\u0026amp; operator has higher precedence than ||, the expression is evaluated as ($options[\u0027readFile\u0027] \u0026amp;\u0026amp; strpos($input, \u0027http://\u0027) === 0) || strpos($input, \u0027https://\u0027) === 0. As a result, when a caller explicitly sets the readFile option to false to disable file and URL reading, an input string beginning with https:// still satisfies the condition and triggers a network fetch via HttpSocket (configured to follow up to 10 redirects). The http:// branch is correctly gated by the readFile flag, but the https:// branch is not. An attacker who can influence the $input parameter passed to Xml::build() can therefore force the application to issue an outbound HTTPS request to an attacker-controlled or internal URL, even though the caller intended to suppress all remote reads. The fetched response is parsed as XML and may be returned to the caller, enabling information disclosure from internal services or external targets. This constitutes a Server-Side Request Forgery (SSRF) weakness with an information-disclosure impact. The vulnerability requires that the code path in Xml::build() be reachable with attacker-controlled input and that the readFile option be set to false (or the caller expects it to be false).\u003c/p\u003e"
                }
              ],
              "value": "In the MISP sachertortephp library, the Xml::build() static method in lib/Cake/Utility/Xml.php contains a logic error in the conditional that gates network-based XML fetching. The original condition was written as: $options[\u0027readFile\u0027] \u0026\u0026 strpos($input, \u0027http://\u0027) === 0 || strpos($input, \u0027https://\u0027) === 0. Because PHP\u0027s \u0026\u0026 operator has higher precedence than ||, the expression is evaluated as ($options[\u0027readFile\u0027] \u0026\u0026 strpos($input, \u0027http://\u0027) === 0) || strpos($input, \u0027https://\u0027) === 0. As a result, when a caller explicitly sets the readFile option to false to disable file and URL reading, an input string beginning with https:// still satisfies the condition and triggers a network fetch via HttpSocket (configured to follow up to 10 redirects). The http:// branch is correctly gated by the readFile flag, but the https:// branch is not. An attacker who can influence the $input parameter passed to Xml::build() can therefore force the application to issue an outbound HTTPS request to an attacker-controlled or internal URL, even though the caller intended to suppress all remote reads. The fetched response is parsed as XML and may be returned to the caller, enabling information disclosure from internal services or external targets. This constitutes a Server-Side Request Forgery (SSRF) weakness with an information-disclosure impact. The vulnerability requires that the code path in Xml::build() be reachable with attacker-controlled input and that the readFile option be set to false (or the caller expects it to be false)."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-66",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-66 Server Side Request Forgery"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-918",
                  "description": "CWE-918 Server-Side Request Forgery (SSRF)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-670",
                  "description": "CWE-670 Always-Incorrect Control Flow Implementation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-17T12:42:02.501Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/sachertortephp/commit/1c2da20cbe3f1e2a91458fe9a017823b7273fdac"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix corrects the operator-precedence error by adding parentheses around the scheme check so that both the http:// and https:// branches are gated by the $options[\u0027readFile\u0027] flag. After the fix, when readFile is false, neither scheme triggers a network fetch, restoring the caller\u0027s intended control over remote reads and eliminating the SSRF vector.\u003c/p\u003e"
                }
              ],
              "value": "The fix corrects the operator-precedence error by adding parentheses around the scheme check so that both the http:// and https:// branches are gated by the $options[\u0027readFile\u0027] flag. After the fix, when readFile is false, neither scheme triggers a network fetch, restoring the caller\u0027s intended control over remote reads and eliminating the SSRF vector."
            }
          ],
          "source": {
            "discovery": "UNKNOWN"
          },
          "title": "MISP sachertortephp Xml::build() Operator Precedence Bypass Allows Unintended HTTPS SSRF When readFile Is Disabled",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "full",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "PR:N is assumed; if the calling application requires authentication to reach Xml::build() with attacker-controlled input, the PR metric should be raised to PR:L or higher.",
                      "The affected version range is unspecified because the patch metadata does not include version tags or release boundaries.",
                      "The CAPEC-66 mapping is the closest available pattern; the exact exploitation context (which MISP endpoint or API exposes Xml::build() input) is not specified in the patch.",
                      "The HttpSocket redirect-following (up to 10 redirects) amplifies the SSRF surface but is not separately scored; it is subsumed under the SC:L impact.",
                      "The vulnerability requires the readFile option to be set to false; if all callers use the default (presumably true), the practical exploitability may be reduced, but the code still contains the logic defect."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-66",
                        "rationale": "The closest CAPEC is SSRF: an attacker supplies a URL (https://...) as input to a server-side function, and the server fetches it over the network. The patch confirms the code path performs an HttpSocket GET with redirect-following. The uncertainty is that the exact attack vector depends on how the calling application exposes Xml::build() input; the CAPEC mapping is based on the confirmed code behavior of fetching a caller-supplied URL."
                      }
                    ],
                    "commit": "1c2da20cbe3f1e2a91458fe9a017823b7273fdac",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      }
                    ],
                    "cvssRationale": "AV:N: the vulnerable function is a library utility reachable through network-facing application code. AC:L: the attacker only needs to supply an input string starting with https://; no race or complex condition is required. AT:N: no need to bypass security controls. PR:N: assumed no authentication is required to reach the code path (assumption; if the calling application requires auth, PR should be raised). UI:N: no user interaction needed. VC/VI/VA:N: the local application\u0027s own confidentiality, integrity, and availability are not directly compromised. SC:L: the attacker can read the HTTP response body from the fetched URL (information disclosure from the SSRF target), which is a limited impact on the target system\u0027s confidentiality. SI/SA:N: no integrity or availability impact on the target. The vector reflects a low-complexity SSRF with limited confidentiality impact on the remote target.",
                    "fixSummary": "The fix corrects the operator-precedence error by adding parentheses around the scheme check so that both the http:// and https:// branches are gated by the $options[\u0027readFile\u0027] flag. After the fix, when readFile is false, neither scheme triggers a network fetch, restoring the caller\u0027s intended control over remote reads and eliminating the SSRF vector.",
                    "generatedAt": "2026-09-17T12:27:24.482336Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "a5f13eb5fbceae218145d722667feb055f471f151ea64de8acd0257358816af6",
                    "patchSummary": "In lib/Cake/Utility/Xml.php, line 110, the condition $options[\u0027readFile\u0027] \u0026\u0026 strpos($input, \u0027http://\u0027) === 0 || strpos($input, \u0027https://\u0027) === 0 is changed to $options[\u0027readFile\u0027] \u0026\u0026 (strpos($input, \u0027http://\u0027) === 0 || strpos($input, \u0027https://\u0027) === 0). A single pair of parentheses is added around the two strpos comparisons so that the || is evaluated before the \u0026\u0026, ensuring the readFile flag gates both URL schemes. One line changed: 1 insertion, 1 deletion.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "1c2da20cbe3f1e2a91458fe9a017823b7273fdac",
                        "patchSha256": "a5f13eb5fbceae218145d722667feb055f471f151ea64de8acd0257358816af6",
                        "source": "https://github.com/MISP/sachertortephp/commit/1c2da20cbe3f1e2a91458fe9a017823b7273fdac.patch",
                        "sourceUrl": "https://github.com/MISP/sachertortephp/commit/1c2da20cbe3f1e2a91458fe9a017823b7273fdac.patch",
                        "subject": "fix: [security] Gate the https branch of Xml::build() on"
                      }
                    ],
                    "source": "https://github.com/MISP/sachertortephp/commit/1c2da20cbe3f1e2a91458fe9a017823b7273fdac.patch",
                    "subject": "fix: [security] Gate the https branch of Xml::build() on",
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-918",
                        "rationale": "The primary security impact is that the application issues an outbound HTTPS request to an attacker-influenced URL when the caller intended to disable remote reads. The HttpSocket follows up to 10 redirects, amplifying the SSRF surface. The response is parsed and potentially returned, enabling information disclosure from internal or external targets."
                      },
                      {
                        "cweId": "CWE-670",
                        "rationale": "The root cause is a logic error: the conditional expression does not implement the intended control flow because of PHP operator precedence. The readFile gate is bypassed for the https:// branch, making the guard ineffective for that scheme. This is the underlying defect that produces the SSRF."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "gcve-1-2026-20250"
            }
          ],
          "x_generator": {
            "engine": "Vulnogram 0.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-92932",
        "datePublished": "2026-09-17T12:33:44.852Z",
        "dateReserved": "2026-09-17T12:33:35.124Z",
        "dateUpdated": "2026-09-17T18:30:42.720Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-92003 (GCVE-0-2026-92003)

    Vulnerability from cvelistv5 – Published: 2026-09-15 11:43 – Updated: 2026-09-15 12:32
    VLAI
    Title
    MISP Unthrottled Authentication Failure Log Writes Enable Resource Exhaustion
    Summary
    Affected versions of MISP do not consistently apply the existing authentication-failure logging throttle. Two API authentication failure branches wrote directly to the Log model:  - API requests with no authentication key;  - requests supplying an API key with an incorrect length Unlike other authentication failures, these paths bypassed _shouldLog(), so every request could create another durable auth_fail entry. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: yes Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-15 12:31 UTC
    CWE
    • CWE-770 - Allocation of Resources Without Limits or Throttling
    • CWE-400 - Uncontrolled Resource Consumption
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-15 11:37
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/2bf887433.patch db6f78e69079…
    Confidence
    medium
    Commit Subject Patch SHA-256
    2bf887433651 fix: [logging] Throttle the two unguarded auth_fail writes db6f78e69079…
    Fix summary

    The fix applies the existing hourly per-key log throttle to the two previously unguarded authentication-failure log writes. The throttle key is now derived from the client's source IP address rather than from caller-supplied input, preventing an attacker from generating unbounded Redis throttle entries. A per-request memo (stored in Configure::read('CurrentRequestAuthFailKeys')) is added to _shouldLog() to prevent duplicate log entries when beforeFilter() executes a second time via CakeErrorController on an exception, ensuring one request produces at most one log entry per key regardless of the operator's log_each_individual_auth_fail setting.

    Patch summary

    In app/Controller/AppController.php: (1) The 'no authkey' branch in beforeFilter() now calls _shouldLog('noauthkey:' . $this->User->_remoteIp()) before writing the log entry. (2) The 'incorrect length' branch in __loginByAuthKey() now calls _shouldLog('badauthkeylength:' . $this->User->_remoteIp()) before writing the log entry. (3) _shouldLog() is refactored to first check a per-request memo array (Configure 'CurrentRequestAuthFailKeys') to suppress duplicate logging across the double beforeFilter() invocation, then evaluate the log_each_individual_auth_fail setting, then fall through to the Redis EXISTS/SETEX 3600-second throttle, and finally record the key in the memo. The Redis-unavailable fallback (log everything) is preserved.

    CVSS rationale

    The vulnerable paths are reachable over the network (AV:N) with no authentication (PR:N) and no user interaction (UI:N). The attack complexity is low (AC:L): an attacker simply sends repeated HTTP requests to the MISP API without an API key or with a key of the wrong length. No attack target is required (AT:N). There is no impact on confidentiality (VC:N, SC:N) or integrity (VI:N, SI:N). The availability impact is high (VA:H) because unbounded log writes can exhaust database storage, degrade query performance, and ultimately make the MISP instance unavailable. No secondary availability impact (SA:N) is evident from the patch.

    Weakness rationale
    • CWE-770 Two authentication-failure log write paths lacked any rate-limiting or throttling mechanism, allowing an unauthenticated remote attacker to generate an unbounded number of database log entries and exhaust storage or I/O resources. The fix adds the missing hourly per-key throttle.
    • CWE-400 The unthrottled log writes constitute uncontrolled consumption of database write capacity and disk storage, enabling a denial-of-service condition. CWE-770 is the more specific primary weakness; CWE-400 captures the broader resource-exhaustion impact.
    Assumptions to verify
    • The tag_version_boundary (v2.5.46, 188 commits after fix) is used as an approximate upper bound for affected versions; the exact fixed release tag is not stated in the patch metadata.
    • The log entries are written to a relational database (MySQL/PostgreSQL) via MISP's Log model, based on the createLogEntry() call pattern; the specific backend is not confirmed in the patch.
    • The Redis instance used for throttling is assumed to be co-located with the MISP application; a Redis outage degrades to logging everything (fail-open), which is a design choice documented in the patch comments.
    • CVSS VA:H assumes that sustained unthrottled log writes can exhaust storage or I/O capacity sufficient to degrade or halt the MISP service; actual impact depends on deployment sizing and disk capacity.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 medium 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-92003",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-15T12:31:54.934768Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-15T12:32:06.515Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Controller/AppController.php"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/AppController.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eAffected versions of MISP do not consistently apply the existing authentication-failure logging throttle.\u003c/p\u003e\n\u003cp\u003eTwo API authentication failure branches wrote directly to the \u003ccode\u003eLog\u003c/code\u003e model:\u003c/p\u003e\u2003- API requests with \u003cstrong\u003eno authentication key\u003c/strong\u003e;\u003cbr\u003e\u003cdiv\u003e\u2003- requests supplying an API key with an \u003cstrong\u003eincorrect length\u003c/strong\u003e\u003c/div\u003e\u003cdiv\u003e\u003cstrong\u003e\u003cbr\u003e\u003c/strong\u003e\u003c/div\u003e\u003cp\u003eUnlike other authentication failures, these paths bypassed \u003ccode\u003e_shouldLog()\u003c/code\u003e, so every request could create another durable \u003ccode\u003eauth_fail\u003c/code\u003e entry.\u003c/p\u003eVersion affected: \u22642.5.45\u003cbr\u003e"
                }
              ],
              "value": "Affected versions of MISP do not consistently apply the existing authentication-failure logging throttle.\n\n\nTwo API authentication failure branches wrote directly to the Log model:\n\n\u2003- API requests with no authentication key;\n\u2003- requests supplying an API key with an incorrect length\n\n\n\n\nUnlike other authentication failures, these paths bypassed _shouldLog(), so every request could create another durable auth_fail entry.\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-125",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-125 Flooding"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.9,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "LOW",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-770",
                  "description": "CWE-770 Allocation of Resources Without Limits or Throttling",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-400",
                  "description": "CWE-400 Uncontrolled Resource Consumption",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-15T11:43:19.403Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/2bf887433"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix applies the existing hourly per-key log throttle to the two previously unguarded authentication-failure log writes. The throttle key is now derived from the client\u0027s source IP address rather than from caller-supplied input, preventing an attacker from generating unbounded Redis throttle entries. A per-request memo (stored in Configure::read(\u0027CurrentRequestAuthFailKeys\u0027)) is added to _shouldLog() to prevent duplicate log entries when beforeFilter() executes a second time via CakeErrorController on an exception, ensuring one request produces at most one log entry per key regardless of the operator\u0027s log_each_individual_auth_fail setting.\u003c/p\u003e"
                }
              ],
              "value": "The fix applies the existing hourly per-key log throttle to the two previously unguarded authentication-failure log writes. The throttle key is now derived from the client\u0027s source IP address rather than from caller-supplied input, preventing an attacker from generating unbounded Redis throttle entries. A per-request memo (stored in Configure::read(\u0027CurrentRequestAuthFailKeys\u0027)) is added to _shouldLog() to prevent duplicate log entries when beforeFilter() executes a second time via CakeErrorController on an exception, ensuring one request produces at most one log entry per key regardless of the operator\u0027s log_each_individual_auth_fail setting."
            }
          ],
          "title": "MISP Unthrottled Authentication Failure Log Writes Enable Resource Exhaustion",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The tag_version_boundary (v2.5.46, 188 commits after fix) is used as an approximate upper bound for affected versions; the exact fixed release tag is not stated in the patch metadata.",
                      "The log entries are written to a relational database (MySQL/PostgreSQL) via MISP\u0027s Log model, based on the createLogEntry() call pattern; the specific backend is not confirmed in the patch.",
                      "The Redis instance used for throttling is assumed to be co-located with the MISP application; a Redis outage degrades to logging everything (fail-open), which is a design choice documented in the patch comments.",
                      "CVSS VA:H assumes that sustained unthrottled log writes can exhaust storage or I/O capacity sufficient to degrade or halt the MISP service; actual impact depends on deployment sizing and disk capacity."
                    ],
                    "commit": "2bf8874336518d8c5ef6a42e51e78900ec242630",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "The vulnerable paths are reachable over the network (AV:N) with no authentication (PR:N) and no user interaction (UI:N). The attack complexity is low (AC:L): an attacker simply sends repeated HTTP requests to the MISP API without an API key or with a key of the wrong length. No attack target is required (AT:N). There is no impact on confidentiality (VC:N, SC:N) or integrity (VI:N, SI:N). The availability impact is high (VA:H) because unbounded log writes can exhaust database storage, degrade query performance, and ultimately make the MISP instance unavailable. No secondary availability impact (SA:N) is evident from the patch.",
                    "draft": false,
                    "fixSummary": "The fix applies the existing hourly per-key log throttle to the two previously unguarded authentication-failure log writes. The throttle key is now derived from the client\u0027s source IP address rather than from caller-supplied input, preventing an attacker from generating unbounded Redis throttle entries. A per-request memo (stored in Configure::read(\u0027CurrentRequestAuthFailKeys\u0027)) is added to _shouldLog() to prevent duplicate log entries when beforeFilter() executes a second time via CakeErrorController on an exception, ensuring one request produces at most one log entry per key regardless of the operator\u0027s log_each_individual_auth_fail setting.",
                    "generatedAt": "2026-09-15T11:37:41.625192Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "db6f78e69079c91d4ba1dac46c4ed5b8ff1ca617c00cd6733bff926c0925a2e3",
                    "patchSummary": "In app/Controller/AppController.php: (1) The \u0027no authkey\u0027 branch in beforeFilter() now calls _shouldLog(\u0027noauthkey:\u0027 . $this-\u003eUser-\u003e_remoteIp()) before writing the log entry. (2) The \u0027incorrect length\u0027 branch in __loginByAuthKey() now calls _shouldLog(\u0027badauthkeylength:\u0027 . $this-\u003eUser-\u003e_remoteIp()) before writing the log entry. (3) _shouldLog() is refactored to first check a per-request memo array (Configure \u0027CurrentRequestAuthFailKeys\u0027) to suppress duplicate logging across the double beforeFilter() invocation, then evaluate the log_each_individual_auth_fail setting, then fall through to the Redis EXISTS/SETEX 3600-second throttle, and finally record the key in the memo. The Redis-unavailable fallback (log everything) is preserved.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "2bf8874336518d8c5ef6a42e51e78900ec242630",
                        "patchSha256": "db6f78e69079c91d4ba1dac46c4ed5b8ff1ca617c00cd6733bff926c0925a2e3",
                        "source": "https://github.com/MISP/MISP/commit/2bf887433.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/2bf887433.patch",
                        "subject": "fix: [logging] Throttle the two unguarded auth_fail writes"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/2bf887433.patch",
                    "subject": "fix: [logging] Throttle the two unguarded auth_fail writes",
                    "tagVersionBoundary": {
                      "commits_after_fix": 188,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-770",
                        "rationale": "Two authentication-failure log write paths lacked any rate-limiting or throttling mechanism, allowing an unauthenticated remote attacker to generate an unbounded number of database log entries and exhaust storage or I/O resources. The fix adds the missing hourly per-key throttle."
                      },
                      {
                        "cweId": "CWE-400",
                        "rationale": "The unthrottled log writes constitute uncontrolled consumption of database write capacity and disk storage, enabling a denial-of-service condition. CWE-770 is the more specific primary weakness; CWE-400 captures the broader resource-exhaustion impact."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20158"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-92003",
        "datePublished": "2026-09-15T11:43:19.403Z",
        "dateReserved": "2026-09-15T11:43:17.522Z",
        "dateUpdated": "2026-09-15T12:32:06.515Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-92002 (GCVE-0-2026-92002)

    Vulnerability from cvelistv5 – Published: 2026-09-15 11:24 – Updated: 2026-09-15 12:09
    VLAI
    Title
    MISP: Authentication failure logging suppressed during Redis unavailability
    Summary
    Affected versions of MISP use Redis to throttle repeated authentication-failure log entries. The intent is to avoid excessive duplicate logs while still recording failed authentication activity. However, User->setupRedis() returns false when Redis cannot be reached. The vulnerable _shouldLog() logic only returned true when a Redis instance existed and no throttle key was present. Therefore, when Redis was unavailable, the function did not allow the log write at all, effectively silencing authentication-failure logging for the duration of the outage. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-15 12:00 UTC
    CWE
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-15 09:34
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/a39b25d2f.patch ab1b5a5a68cf…
    Confidence
    medium
    Commit Subject Patch SHA-256
    a39b25d2f141 fix: [logging] Log auth failures when the throttle cannot ab1b5a5a68cf…
    Fix summary

    The _shouldLog() method now explicitly checks whether the Redis connection is available before attempting to use it. If setupRedis() returns false, the method immediately returns true, causing every authentication-failure event to be logged. This converts the previous fail-closed behavior (silence on dependency failure) into a fail-open behavior for security logging (log everything when the throttle state is unavailable), ensuring that a Redis outage cannot be used to suppress the audit trail of failed authentication attempts.

    Patch summary

    In app/Controller/AppController.php, the _shouldLog() method was restructured: a new early-return guard "if (!$redis) { return true; }" was inserted immediately after the setupRedis() call, so that an unavailable Redis connection causes all auth-failure events to be logged. The subsequent throttle check was simplified to "if (!$redis->exists(...))" since the null case is already handled. Additionally, a block of commented-out Redis throttle code in the afterFilter() method (lines referencing misp:auth_fail_throttling) was removed as dead code.

    CVSS rationale

    The vulnerability is reachable over the network (AV:N) because MISP is a web application. Attack complexity is High (AC:H) because exploitation requires the Redis instance to be specifically unavailable at the time authentication failures occur; it is not a simple request. No attack target is required (AT:N). No privileges are needed (PR:N) because the suppressed logs pertain to unauthenticated authentication-failure events. No user interaction is required (UI:N). There is no direct confidentiality or integrity impact on the MISP data store (VC:N, VI:N). The availability impact is Low (VA:L) because the security-logging/audit function is unavailable during the Redis outage, impairing detection and forensic capabilities, but the core MISP service remains operational. No cross-scope impacts (SC:N, SI:N, SA:N).

    Weakness rationale
    • CWE-778 The system fails to record security-relevant events (authentication failures) when a supporting dependency (Redis) is unavailable. The logging path silently drops all audit entries under a specific operational condition, which is a textbook case of insufficient logging of security events.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary metadata (v2.5.46 with 189 commits after the fix), suggesting the fix landed before the v2.5.46 release; exact affected version boundaries are not explicitly stated in the patch.
    • The CVSS availability impact (VA:L) reflects the loss of the security-logging function rather than a denial of service against the MISP application itself.
    • The patch does not indicate whether the Redis throttle was the sole mechanism for auth-failure logging or whether a fallback file-based logger existed; the analysis assumes the Redis-gated path was the primary logging path for auth failures.
    • The commit date (2 Sep 2026) is taken at face value from the patch metadata.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 medium 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-92002",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-15T12:00:12.607042Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-15T12:09:48.540Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Controller/AppController.php"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/AppController.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP use Redis to throttle repeated authentication-failure log entries. The intent is to avoid excessive duplicate logs while still recording failed authentication activity.\u003c/p\u003e\n\u003cp\u003eHowever, \u003ccode\u003eUser-\u0026gt;setupRedis()\u003c/code\u003e returns false when Redis cannot be reached. The vulnerable \u003ccode\u003e_shouldLog()\u003c/code\u003e logic only returned true when a Redis instance existed and no throttle key was present. Therefore, when Redis was unavailable, the function did not allow the log write at all, effectively silencing authentication-failure logging for the duration of the outage.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP use Redis to throttle repeated authentication-failure log entries. The intent is to avoid excessive duplicate logs while still recording failed authentication activity.\n\n\nHowever, User-\u003esetupRedis() returns false when Redis cannot be reached. The vulnerable _shouldLog() logic only returned true when a Redis instance existed and no throttle key was present. Therefore, when Redis was unavailable, the function did not allow the log write at all, effectively silencing authentication-failure logging for the duration of the outage.\n\nVersion affected: \u22642.5.45"
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-778",
                  "description": "CWE-778 Insufficient Logging",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-15T11:24:21.354Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/a39b25d2f"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe _shouldLog() method now explicitly checks whether the Redis connection is available before attempting to use it. If setupRedis() returns false, the method immediately returns true, causing every authentication-failure event to be logged. This converts the previous fail-closed behavior (silence on dependency failure) into a fail-open behavior for security logging (log everything when the throttle state is unavailable), ensuring that a Redis outage cannot be used to suppress the audit trail of failed authentication attempts.\u003c/p\u003e"
                }
              ],
              "value": "The _shouldLog() method now explicitly checks whether the Redis connection is available before attempting to use it. If setupRedis() returns false, the method immediately returns true, causing every authentication-failure event to be logged. This converts the previous fail-closed behavior (silence on dependency failure) into a fail-open behavior for security logging (log everything when the throttle state is unavailable), ensuring that a Redis outage cannot be used to suppress the audit trail of failed authentication attempts."
            }
          ],
          "title": "MISP: Authentication failure logging suppressed during Redis unavailability",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The affected version range is inferred from the tag_version_boundary metadata (v2.5.46 with 189 commits after the fix), suggesting the fix landed before the v2.5.46 release; exact affected version boundaries are not explicitly stated in the patch.",
                      "The CVSS availability impact (VA:L) reflects the loss of the security-logging function rather than a denial of service against the MISP application itself.",
                      "The patch does not indicate whether the Redis throttle was the sole mechanism for auth-failure logging or whether a fallback file-based logger existed; the analysis assumes the Redis-gated path was the primary logging path for auth failures.",
                      "The commit date (2 Sep 2026) is taken at face value from the patch metadata."
                    ],
                    "commit": "a39b25d2f141dde954a2f00feed5c6eb9e3989b5",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "The vulnerability is reachable over the network (AV:N) because MISP is a web application. Attack complexity is High (AC:H) because exploitation requires the Redis instance to be specifically unavailable at the time authentication failures occur; it is not a simple request. No attack target is required (AT:N). No privileges are needed (PR:N) because the suppressed logs pertain to unauthenticated authentication-failure events. No user interaction is required (UI:N). There is no direct confidentiality or integrity impact on the MISP data store (VC:N, VI:N). The availability impact is Low (VA:L) because the security-logging/audit function is unavailable during the Redis outage, impairing detection and forensic capabilities, but the core MISP service remains operational. No cross-scope impacts (SC:N, SI:N, SA:N).",
                    "draft": false,
                    "fixSummary": "The _shouldLog() method now explicitly checks whether the Redis connection is available before attempting to use it. If setupRedis() returns false, the method immediately returns true, causing every authentication-failure event to be logged. This converts the previous fail-closed behavior (silence on dependency failure) into a fail-open behavior for security logging (log everything when the throttle state is unavailable), ensuring that a Redis outage cannot be used to suppress the audit trail of failed authentication attempts.",
                    "generatedAt": "2026-09-15T09:34:28.852379Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "ab1b5a5a68cf32cfb514f541d5db607932836ebf557634a44adfa822631afe9c",
                    "patchSummary": "In app/Controller/AppController.php, the _shouldLog() method was restructured: a new early-return guard \"if (!$redis) { return true; }\" was inserted immediately after the setupRedis() call, so that an unavailable Redis connection causes all auth-failure events to be logged. The subsequent throttle check was simplified to \"if (!$redis-\u003eexists(...))\" since the null case is already handled. Additionally, a block of commented-out Redis throttle code in the afterFilter() method (lines referencing misp:auth_fail_throttling) was removed as dead code.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "a39b25d2f141dde954a2f00feed5c6eb9e3989b5",
                        "patchSha256": "ab1b5a5a68cf32cfb514f541d5db607932836ebf557634a44adfa822631afe9c",
                        "source": "https://github.com/MISP/MISP/commit/a39b25d2f.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/a39b25d2f.patch",
                        "subject": "fix: [logging] Log auth failures when the throttle cannot"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/a39b25d2f.patch",
                    "subject": "fix: [logging] Log auth failures when the throttle cannot",
                    "tagVersionBoundary": {
                      "commits_after_fix": 189,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-778",
                        "rationale": "The system fails to record security-relevant events (authentication failures) when a supporting dependency (Redis) is unavailable. The logging path silently drops all audit entries under a specific operational condition, which is a textbook case of insufficient logging of security events."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20172"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-92002",
        "datePublished": "2026-09-15T11:24:21.354Z",
        "dateReserved": "2026-09-15T11:24:19.778Z",
        "dateUpdated": "2026-09-15T12:09:48.540Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-91859 (GCVE-0-2026-91859)

    Vulnerability from cvelistv5 – Published: 2026-09-15 09:26 – Updated: 2026-09-15 13:05
    VLAI
    Title
    MISP Access Log Entry Overwritten by Error Controller's Second beforeFilter Pass
    Summary
    Affected versions of MISP can record incorrect access-log data for requests that terminate in an exception. Because CakeErrorController extends AppController, exception rendering runs the application startup path a second time. As a result, __accessMonitor() calls AccessLog::logRequest() twice for one HTTP request. The second deferred writer measures the error-controller execution instead of the original request and can overwrite the row created by the first pass. The corrupted fields include request duration, SQL query count, memory usage, and potentially the recorded query log. The bug was masked because the same model instance retained the ID of the first saved row, causing the later save to issue an UPDATE rather than insert an obvious duplicate row. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-15 13:04 UTC
    CWE
    • CWE-778 - Insufficient Logging
    • CWE-223 - Omission of Security-relevant Information in Logs
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-15 09:22
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/0dae5c072.patch 4eeecd38b5b8…
    Confidence
    medium
    Commit Subject Patch SHA-256
    0dae5c072d86 fix: [logging] Stop the error controller overwriting the 4eeecd38b5b8…
    Fix summary

    The fix introduces a per-instance boolean guard ($deferredWriterRegistered) in the AccessLog model so that logRequest() returns early on the second beforeFilter pass, preventing the error controller from overwriting the original request's log entry. Additionally, a $this->create() call is added before $this->save() in saveOnShutdown() to ensure each save issues an INSERT rather than an UPDATE, providing defense-in-depth against accidental row mutation.

    Patch summary

    In app/Model/AccessLog.php: (1) Added a private $deferredWriterRegistered property (default false). (2) At the top of logRequest(), added an early-return guard: if $this->deferredWriterRegistered is true, return true immediately. (3) Set $this->deferredWriterRegistered = true immediately before register_shutdown_function() so the flag is latched on the first pass. (4) In saveOnShutdown(), added $this->create() before $this->save() to force a new-row INSERT and prevent the model from issuing an UPDATE against a previously saved id. (5) Added explanatory doc-comments describing the double-beforeFilter mechanism and the ClassRegistry single-instance behavior.

    CVSS rationale

    The vulnerability is exploitable over the network (AV:N) with low complexity (AC:L) by any authenticated user who can trigger an unhandled exception (e.g., via a malformed request). No attack target manipulation is required (AT:N). Low privileges are sufficient (PR:L) as any authenticated MISP user can cause an error. No user interaction is needed (UI:N). There is no direct confidentiality or availability impact on MISP itself (VC:N, VA:N). The integrity impact is low (VI:L) because the access-log row is overwritten with incorrect metrics rather than deleted, and only requests that trigger exceptions are affected. No secondary impacts are identified (SC:N, SI:N, SA:N). The overall severity is low, reflecting a logging-integrity weakness that degrades audit reliability but does not directly expose data or disrupt service.

    Weakness rationale
    • CWE-778 The access-log mechanism fails to preserve accurate, immutable records of each request. The second beforeFilter pass overwrites the first pass's data, so the log does not faithfully reflect the actual request's duration, query count, memory usage, or SQL activity. This constitutes insufficient logging because the security-relevant audit data is corrupted rather than simply missing.
    • CWE-223 The genuine request metrics (duration, query count, memory, query log) are replaced by the error controller's metrics, effectively omitting the security-relevant information that the original request produced. This is a secondary mapping; CWE-778 is the primary weakness.
    Assumptions to verify
    • MISP requires authentication for the operations that produce access-log entries; PR:L assumes a low-privilege authenticated user can trigger an unhandled exception.
    • The affected version range is inferred from the tag_version_boundary (v2.5.46, 190 commits after fix); the exact first-affected and last-affected versions are not stated in the patch metadata.
    • The security impact is limited to log-integrity degradation; no direct data exfiltration, privilege escalation, or denial-of-service is evidenced by the patch.
    • The double beforeFilter invocation is a CakePHP framework behavior (ExceptionRenderer::_getController calling startupProcess on CakeErrorController) and is not itself a MISP vulnerability, but MISP's AccessLog model did not guard against it.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 medium 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-91859",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-15T13:04:57.329720Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-15T13:05:17.132Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Model/AccessLog.php"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Model/AccessLog.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP can record incorrect access-log data for requests that terminate in an exception.\u003c/p\u003e\n\u003cp\u003eBecause \u003ccode\u003eCakeErrorController\u003c/code\u003e extends \u003ccode\u003eAppController\u003c/code\u003e, exception rendering runs the application startup path a second time. As a result, \u003ccode\u003e__accessMonitor()\u003c/code\u003e calls \u003ccode\u003eAccessLog::logRequest()\u003c/code\u003e twice for one HTTP request. The second deferred writer measures the error-controller execution instead of the original request and can overwrite the row created by the first pass. The corrupted fields include request duration, SQL query count, memory usage, and potentially the recorded query log.\u003c/p\u003e\n\u003cp\u003eThe bug was masked because the same model instance retained the ID of the first saved row, causing the later save to issue an \u003ccode\u003eUPDATE\u003c/code\u003e rather than insert an obvious duplicate row.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP can record incorrect access-log data for requests that terminate in an exception.\n\n\nBecause CakeErrorController extends AppController, exception rendering runs the application startup path a second time. As a result, __accessMonitor() calls AccessLog::logRequest() twice for one HTTP request. The second deferred writer measures the error-controller execution instead of the original request and can overwrite the row created by the first pass. The corrupted fields include request duration, SQL query count, memory usage, and potentially the recorded query log.\n\n\nThe bug was masked because the same model instance retained the ID of the first saved row, causing the later save to issue an UPDATE rather than insert an obvious duplicate row.\n\nVersion affected: \u22642.5.45"
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.3,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-778",
                  "description": "CWE-778 Insufficient Logging",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-223",
                  "description": "CWE-223 Omission of Security-relevant Information in Logs",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-15T09:26:35.198Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/0dae5c072"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces a per-instance boolean guard ($deferredWriterRegistered) in the AccessLog model so that logRequest() returns early on the second beforeFilter pass, preventing the error controller from overwriting the original request\u0027s log entry. Additionally, a $this-\u0026gt;create() call is added before $this-\u0026gt;save() in saveOnShutdown() to ensure each save issues an INSERT rather than an UPDATE, providing defense-in-depth against accidental row mutation.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces a per-instance boolean guard ($deferredWriterRegistered) in the AccessLog model so that logRequest() returns early on the second beforeFilter pass, preventing the error controller from overwriting the original request\u0027s log entry. Additionally, a $this-\u003ecreate() call is added before $this-\u003esave() in saveOnShutdown() to ensure each save issues an INSERT rather than an UPDATE, providing defense-in-depth against accidental row mutation."
            }
          ],
          "title": "MISP Access Log Entry Overwritten by Error Controller\u0027s Second beforeFilter Pass",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "MISP requires authentication for the operations that produce access-log entries; PR:L assumes a low-privilege authenticated user can trigger an unhandled exception.",
                      "The affected version range is inferred from the tag_version_boundary (v2.5.46, 190 commits after fix); the exact first-affected and last-affected versions are not stated in the patch metadata.",
                      "The security impact is limited to log-integrity degradation; no direct data exfiltration, privilege escalation, or denial-of-service is evidenced by the patch.",
                      "The double beforeFilter invocation is a CakePHP framework behavior (ExceptionRenderer::_getController calling startupProcess on CakeErrorController) and is not itself a MISP vulnerability, but MISP\u0027s AccessLog model did not guard against it."
                    ],
                    "commit": "0dae5c072d86e62140c385cf507135f196415fa6",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "The vulnerability is exploitable over the network (AV:N) with low complexity (AC:L) by any authenticated user who can trigger an unhandled exception (e.g., via a malformed request). No attack target manipulation is required (AT:N). Low privileges are sufficient (PR:L) as any authenticated MISP user can cause an error. No user interaction is needed (UI:N). There is no direct confidentiality or availability impact on MISP itself (VC:N, VA:N). The integrity impact is low (VI:L) because the access-log row is overwritten with incorrect metrics rather than deleted, and only requests that trigger exceptions are affected. No secondary impacts are identified (SC:N, SI:N, SA:N). The overall severity is low, reflecting a logging-integrity weakness that degrades audit reliability but does not directly expose data or disrupt service.",
                    "draft": false,
                    "fixSummary": "The fix introduces a per-instance boolean guard ($deferredWriterRegistered) in the AccessLog model so that logRequest() returns early on the second beforeFilter pass, preventing the error controller from overwriting the original request\u0027s log entry. Additionally, a $this-\u003ecreate() call is added before $this-\u003esave() in saveOnShutdown() to ensure each save issues an INSERT rather than an UPDATE, providing defense-in-depth against accidental row mutation.",
                    "generatedAt": "2026-09-15T09:22:08.485154Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "4eeecd38b5b824e3c5c1ae20886e62534ebed473410f59bea7276f83b32d4051",
                    "patchSummary": "In app/Model/AccessLog.php: (1) Added a private $deferredWriterRegistered property (default false). (2) At the top of logRequest(), added an early-return guard: if $this-\u003edeferredWriterRegistered is true, return true immediately. (3) Set $this-\u003edeferredWriterRegistered = true immediately before register_shutdown_function() so the flag is latched on the first pass. (4) In saveOnShutdown(), added $this-\u003ecreate() before $this-\u003esave() to force a new-row INSERT and prevent the model from issuing an UPDATE against a previously saved id. (5) Added explanatory doc-comments describing the double-beforeFilter mechanism and the ClassRegistry single-instance behavior.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "0dae5c072d86e62140c385cf507135f196415fa6",
                        "patchSha256": "4eeecd38b5b824e3c5c1ae20886e62534ebed473410f59bea7276f83b32d4051",
                        "source": "https://github.com/MISP/MISP/commit/0dae5c072.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/0dae5c072.patch",
                        "subject": "fix: [logging] Stop the error controller overwriting the"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/0dae5c072.patch",
                    "subject": "fix: [logging] Stop the error controller overwriting the",
                    "tagVersionBoundary": {
                      "commits_after_fix": 190,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-778",
                        "rationale": "The access-log mechanism fails to preserve accurate, immutable records of each request. The second beforeFilter pass overwrites the first pass\u0027s data, so the log does not faithfully reflect the actual request\u0027s duration, query count, memory usage, or SQL activity. This constitutes insufficient logging because the security-relevant audit data is corrupted rather than simply missing."
                      },
                      {
                        "cweId": "CWE-223",
                        "rationale": "The genuine request metrics (duration, query count, memory, query log) are replaced by the error controller\u0027s metrics, effectively omitting the security-relevant information that the original request produced. This is a secondary mapping; CWE-778 is the primary weakness."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20138"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-91859",
        "datePublished": "2026-09-15T09:26:35.198Z",
        "dateReserved": "2026-09-15T09:26:32.260Z",
        "dateUpdated": "2026-09-15T13:05:17.132Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-91857 (GCVE-0-2026-91857)

    Vulnerability from cvelistv5 – Published: 2026-09-15 09:14 – Updated: 2026-09-15 13:19
    VLAI
    Title
    MISP: State-changing actions accessible via GET request enabling CSRF
    Summary
    Affected versions of MISP expose several state-changing controller actions without restricting them to POST. The affected actions are:  - EventReportsController::purgeUnusedPictures()  - NoticelistsController::enableNoticelist()  - ServersController::removeOrphanedCorrelations()  - WorkflowsController::rebuildRedis() The patch adds allowMethod(['post']) to each action, preventing them from being triggered through ordinary GET requests. For purgeUnusedPictures(), the corresponding UI previously used $.get(). The fix converts that request to POST and supplies X-CSRF-Token, while the controller enables header-only CSRF validation for that AJAX action. Because GET requests can be induced cross-origin through links, images, redirects, or navigation, accepting GET for these state-changing operations can let an attacker trigger them using the authenticated victim's session. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-15 13:10 UTC
    CWE
    • CWE-352 - Cross-Site Request Forgery (CSRF)
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-15 09:10
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/b4a5486b5.patch adc31514b96a…
    Confidence
    high
    Commit Subject Patch SHA-256
    b4a5486b5ddd fix: [security] Require POST for four remaining adc31514b96a…
    Fix summary

    The vulnerability is remediated by restricting all four state-changing actions to accept only POST requests via the CakePHP allowMethod() guard. Additionally, the client-side JavaScript for purgeUnusedPictures is updated to issue a POST request with the page's CSRF token in the X-CSRF-Token header, and a beforeFilter() hook is added to EventReportsController to configure header-only CSRF token validation for that specific action, since it is invoked via hand-built AJAX rather than a rendered form.

    Patch summary

    Adds $this->request->allowMethod(['post']) to purgeUnusedPictures, enableNoticelist, removeOrphanedCorrelations, and rebuildRedis. Adds a beforeFilter() method to EventReportsController calling _csrfTokenHeaderOnly(['purgeUnusedPictures']) to permit CSRF token validation via the X-CSRF-Token header. Updates the managed_imported_pictures.ctp view to replace $.get() with $.ajax() using type 'post' and the X-CSRF-Token header. Adds REST response handling and flash/redirect logic to rebuildRedis for consistency with other actions.

    CVSS rationale

    AV:N: The attack is delivered over the network (e.g., a malicious link or page). AC:L: No special race conditions or complex setup are required; a simple GET URL suffices. AT:N: No prior compromise or manipulation of the target system is needed. PR:L: The attacker requires the victim to be an authenticated MISP user; the attacker themselves need not be authenticated. UI:A: The victim must actively interact (click a link or navigate to a crafted page) to trigger the forged request. VC:N: No confidential data is exposed by the affected actions. VI:L: Integrity impact is low; the actions cause limited state changes (deleting unused pictures, toggling a noticelist, removing orphaned correlations, rebuilding a cache) rather than corrupting critical data. VA:N: No meaningful availability impact; the actions do not cause denial of service. SC/SI/SA:N: No impact on subsequent systems.

    Weakness rationale
    • CWE-352 The root cause is that state-changing endpoints accept GET requests, which are not protected by the framework's CSRF token mechanism. This allows an attacker to forge requests on behalf of an authenticated user via links, auto-loading resources, or other passive/active user interactions, which is the defining characteristic of CSRF.
    Assumptions to verify
    • The fix commit is 196 commits before the v2.5.46 tag, implying the vulnerability existed in versions prior to v2.5.46; exact affected version range is not explicitly stated in the patch.
    • MISP requires user authentication to access the affected endpoints; the PR:L assumption is based on MISP's standard authentication model.
    • The CSRF token mechanism in CakePHP (the framework used by MISP) is assumed to protect POST requests but not GET requests, consistent with the patch's own comments.
    • The vulnerability was found during internal review and was not externally reported, per the commit message.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 7 9 high 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-91857",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-15T13:10:25.729586Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-15T13:19:25.134Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "EventReportsController",
                "NoticelistsController",
                "ServersController",
                "WorkflowsController"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/EventReportsController.php",
                "app/Controller/NoticelistsController.php",
                "app/Controller/ServersController.php",
                "app/Controller/WorkflowsController.php",
                "app/View/EventReports/managed_imported_pictures.ctp"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP expose several state-changing controller actions without restricting them to POST.\u003c/p\u003e\n\u003cp\u003eThe affected actions are:\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u003ccode\u003e\u2003-\u0026nbsp;EventReportsController::purgeUnusedPictures()\u003c/code\u003e\n\u003cbr\u003e\u003ccode\u003e\u2003-\u0026nbsp;NoticelistsController::enableNoticelist()\u003c/code\u003e\n\u003cbr\u003e\u003ccode\u003e\u2003-\u0026nbsp;ServersController::removeOrphanedCorrelations()\u003c/code\u003e\n\u003cbr\u003e\u003cdiv\u003e\u003ccode\u003e\u2003- WorkflowsController::rebuildRedis()\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cbr\u003e\u003c/code\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003eThe patch adds \u003ccode\u003eallowMethod([\u0027post\u0027])\u003c/code\u003e to each action, preventing them from being triggered through ordinary GET requests.\u003c/p\u003e\n\u003cp\u003eFor \u003ccode\u003epurgeUnusedPictures()\u003c/code\u003e, the corresponding UI previously used \u003ccode\u003e$.get()\u003c/code\u003e. The fix converts that request to POST and supplies \u003ccode\u003eX-CSRF-Token\u003c/code\u003e, while the controller enables header-only CSRF validation for that AJAX action.\u003c/p\u003e\n\u003cp\u003eBecause GET requests can be induced cross-origin through links, images, redirects, or navigation, accepting GET for these state-changing operations can let an attacker trigger them using the authenticated victim\u0027s session.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP expose several state-changing controller actions without restricting them to POST.\n\n\nThe affected actions are:\n\n\n\n\u2003-\u00a0EventReportsController::purgeUnusedPictures()\n\n\u2003-\u00a0NoticelistsController::enableNoticelist()\n\n\u2003-\u00a0ServersController::removeOrphanedCorrelations()\n\n\u2003- WorkflowsController::rebuildRedis()\n\n\n\n\n\n\nThe patch adds allowMethod([\u0027post\u0027]) to each action, preventing them from being triggered through ordinary GET requests.\n\n\nFor purgeUnusedPictures(), the corresponding UI previously used $.get(). The fix converts that request to POST and supplies X-CSRF-Token, while the controller enables header-only CSRF validation for that AJAX action.\n\n\nBecause GET requests can be induced cross-origin through links, images, redirects, or navigation, accepting GET for these state-changing operations can let an attacker trigger them using the authenticated victim\u0027s session.\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-62",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-62 Cross Site Request Forgery"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.3,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "LOW",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-352",
                  "description": "CWE-352 Cross-Site Request Forgery (CSRF)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-15T09:14:43.722Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/b4a5486b5"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe vulnerability is remediated by restricting all four state-changing actions to accept only POST requests via the CakePHP allowMethod() guard. Additionally, the client-side JavaScript for purgeUnusedPictures is updated to issue a POST request with the page\u0027s CSRF token in the X-CSRF-Token header, and a beforeFilter() hook is added to EventReportsController to configure header-only CSRF token validation for that specific action, since it is invoked via hand-built AJAX rather than a rendered form.\u003c/p\u003e"
                }
              ],
              "value": "The vulnerability is remediated by restricting all four state-changing actions to accept only POST requests via the CakePHP allowMethod() guard. Additionally, the client-side JavaScript for purgeUnusedPictures is updated to issue a POST request with the page\u0027s CSRF token in the X-CSRF-Token header, and a beforeFilter() hook is added to EventReportsController to configure header-only CSRF token validation for that specific action, since it is invoked via hand-built AJAX rather than a rendered form."
            }
          ],
          "title": "MISP: State-changing actions accessible via GET request enabling CSRF",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The fix commit is 196 commits before the v2.5.46 tag, implying the vulnerability existed in versions prior to v2.5.46; exact affected version range is not explicitly stated in the patch.",
                      "MISP requires user authentication to access the affected endpoints; the PR:L assumption is based on MISP\u0027s standard authentication model.",
                      "The CSRF token mechanism in CakePHP (the framework used by MISP) is assumed to protect POST requests but not GET requests, consistent with the patch\u0027s own comments.",
                      "The vulnerability was found during internal review and was not externally reported, per the commit message."
                    ],
                    "commit": "b4a5486b5ddd078dc11248cbd7f21725fb1f43cf",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: The attack is delivered over the network (e.g., a malicious link or page). AC:L: No special race conditions or complex setup are required; a simple GET URL suffices. AT:N: No prior compromise or manipulation of the target system is needed. PR:L: The attacker requires the victim to be an authenticated MISP user; the attacker themselves need not be authenticated. UI:A: The victim must actively interact (click a link or navigate to a crafted page) to trigger the forged request. VC:N: No confidential data is exposed by the affected actions. VI:L: Integrity impact is low; the actions cause limited state changes (deleting unused pictures, toggling a noticelist, removing orphaned correlations, rebuilding a cache) rather than corrupting critical data. VA:N: No meaningful availability impact; the actions do not cause denial of service. SC/SI/SA:N: No impact on subsequent systems.",
                    "draft": false,
                    "fixSummary": "The vulnerability is remediated by restricting all four state-changing actions to accept only POST requests via the CakePHP allowMethod() guard. Additionally, the client-side JavaScript for purgeUnusedPictures is updated to issue a POST request with the page\u0027s CSRF token in the X-CSRF-Token header, and a beforeFilter() hook is added to EventReportsController to configure header-only CSRF token validation for that specific action, since it is invoked via hand-built AJAX rather than a rendered form.",
                    "generatedAt": "2026-09-15T09:10:36.581856Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 7
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "adc31514b96a99a411ca1ed5a31abf99642d19de3a09f536e62310b298d2552b",
                    "patchSummary": "Adds $this-\u003erequest-\u003eallowMethod([\u0027post\u0027]) to purgeUnusedPictures, enableNoticelist, removeOrphanedCorrelations, and rebuildRedis. Adds a beforeFilter() method to EventReportsController calling _csrfTokenHeaderOnly([\u0027purgeUnusedPictures\u0027]) to permit CSRF token validation via the X-CSRF-Token header. Updates the managed_imported_pictures.ctp view to replace $.get() with $.ajax() using type \u0027post\u0027 and the X-CSRF-Token header. Adds REST response handling and flash/redirect logic to rebuildRedis for consistency with other actions.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "b4a5486b5ddd078dc11248cbd7f21725fb1f43cf",
                        "patchSha256": "adc31514b96a99a411ca1ed5a31abf99642d19de3a09f536e62310b298d2552b",
                        "source": "https://github.com/MISP/MISP/commit/b4a5486b5.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/b4a5486b5.patch",
                        "subject": "fix: [security] Require POST for four remaining"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/b4a5486b5.patch",
                    "subject": "fix: [security] Require POST for four remaining",
                    "tagVersionBoundary": {
                      "commits_after_fix": 196,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-352",
                        "rationale": "The root cause is that state-changing endpoints accept GET requests, which are not protected by the framework\u0027s CSRF token mechanism. This allows an attacker to forge requests on behalf of an authenticated user via links, auto-loading resources, or other passive/active user interactions, which is the defining characteristic of CSRF."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20242"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-91857",
        "datePublished": "2026-09-15T09:14:43.722Z",
        "dateReserved": "2026-09-15T09:14:39.778Z",
        "dateUpdated": "2026-09-15T13:19:25.134Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-91851 (GCVE-0-2026-91851)

    Vulnerability from cvelistv5 – Published: 2026-09-15 08:50 – Updated: 2026-09-15 13:29
    VLAI
    Title
    MISP Dashboard Template ACL Bypass Due to VARCHAR-to-Integer Type Coercion in Permission Flag Comparison
    Summary
    Affected versions of MISP incorrectly filter dashboard templates that are restricted to a specific permission flag. DashboardsController::listTemplates() allowed a template when either:  - its restrict_to_permission_flag matched one of the current user’s permission flags, or  - restrict_to_permission_flag equaled integer 0 However, restrict_to_permission_flag is a varchar. MySQL therefore performed numeric coercion when comparing the column against integer 0. Strings such as perm_site_admin convert numerically to zero, making expressions such as perm_site_admin = 0 evaluate true and causing the “unrestricted” branch to match permission-restricted templates as well. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-15 13:29 UTC
    CWE
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-15 08:40
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/245b8d63a.patch ac03cd1103d5…
    Confidence
    medium
    Commit Subject Patch SHA-256
    245b8d63a379 fix: [acl] Compare the dashboard template permission flag as ac03cd1103d5…
    Fix summary

    The fix corrects the type mismatch in the permission flag comparison by replacing the integer literal 0 with the explicit string values '' and '0', which are the actual database values representing an unrestricted dashboard template. This ensures MySQL performs a proper string-to-string comparison, so only rows genuinely marked as unrestricted are returned, restoring the intended per-permission-level access control on dashboard templates.

    Patch summary

    In app/Controller/DashboardsController.php, the listTemplates() method's query condition was changed from ['Dashboard.restrict_to_permission_flag' => 0] to ['Dashboard.restrict_to_permission_flag' => ['', '0']]. A multi-line comment was added explaining that restrict_to_permission_flag is a VARCHAR column and that comparing it to integer 0 causes MySQL to coerce the column, making the clause a no-op. The two values that actually represent unrestricted access are the empty string (column default) and the string '0' (posted by the save form).

    CVSS rationale

    The vulnerability is exploitable over the network (AV:N) via the MISP web interface with low attack complexity (AC:L) and no attack target manipulation (AT:N). It requires a low-privilege authenticated user (PR:L) and no user interaction (UI:N). The impact is limited to confidentiality (VC:L) as restricted dashboard template definitions are disclosed to unauthorized users; there is no integrity or availability impact (VI:N, VA:N) and no secondary effects (SC:N, SI:N, SA:N). The severity is moderate because the disclosed data is dashboard template metadata rather than raw threat intelligence, but it still represents a breach of the intended access control boundary.

    Weakness rationale
    • CWE-863 The permission-based filter on dashboard templates was effectively bypassed because the type-coerced comparison matched all rows, allowing any authenticated user to access templates restricted to higher-privilege roles. The authorization check was present in code but did not function correctly.
    • CWE-697 The root cause is a comparison between a VARCHAR column and an integer literal. MySQL's implicit type coercion caused the comparison to evaluate to TRUE for all non-numeric string values, making the intended filter a no-op. This is a classic incorrect comparison due to type mismatch.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary (v2.5.46 with 200 commits after fix); no explicit affected or fixed version is stated in the patch metadata.
    • The vulnerability requires an authenticated MISP user with any role; the exact minimum privilege level needed to access the listTemplates endpoint is not specified in the patch.
    • The impact is assessed as Low confidentiality because the disclosed data is dashboard template definitions (layout, widget configuration) rather than raw threat intelligence or user credentials.
    • The MySQL type-coercion behavior described in the commit message and code comments is assumed to be accurate for the MySQL versions supported by MISP.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 medium 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-91851",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-15T13:29:22.086413Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-15T13:29:55.108Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "DashboardsController"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/DashboardsController.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP incorrectly filter dashboard templates that are restricted to a specific permission flag.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eDashboardsController::listTemplates()\u003c/code\u003e allowed a template when either:\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u003cdiv\u003e\u2003-\u0026nbsp;its \u003ccode\u003erestrict_to_permission_flag\u003c/code\u003e matched one of the current user\u2019s permission flags, or\u003c/div\u003e\u003cdiv\u003e\u2003-\u0026nbsp;\u003ccode\u003erestrict_to_permission_flag\u003c/code\u003e equaled integer \u003ccode\u003e0\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003ccode\u003e\u003c/code\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003eHowever, \u003ccode\u003erestrict_to_permission_flag\u003c/code\u003e is a \u003ccode\u003evarchar\u003c/code\u003e. MySQL therefore performed numeric coercion when comparing the column against integer \u003ccode\u003e0\u003c/code\u003e. Strings such as \u003ccode\u003eperm_site_admin\u003c/code\u003e convert numerically to zero, making expressions such as \u003ccode\u003eperm_site_admin = 0\u003c/code\u003e evaluate true and causing the \u201cunrestricted\u201d branch to match permission-restricted templates as well.\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP incorrectly filter dashboard templates that are restricted to a specific permission flag.\n\n\nDashboardsController::listTemplates() allowed a template when either:\n\n\n\n\u2003-\u00a0its restrict_to_permission_flag matched one of the current user\u2019s permission flags, or\n\n\u2003-\u00a0restrict_to_permission_flag equaled integer 0\n\n\n\n\n\n\nHowever, restrict_to_permission_flag is a varchar. MySQL therefore performed numeric coercion when comparing the column against integer 0. Strings such as perm_site_admin convert numerically to zero, making expressions such as perm_site_admin = 0 evaluate true and causing the \u201cunrestricted\u201d branch to match permission-restricted templates as well.\n\n\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Accessing Functionality Not Properly Constrained by ACLs"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.3,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-863",
                  "description": "CWE-863 Incorrect Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-697",
                  "description": "CWE-697 Incorrect Comparison",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-15T08:50:01.513Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/245b8d63a"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix corrects the type mismatch in the permission flag comparison by replacing the integer literal 0 with the explicit string values \u0027\u0027 and \u00270\u0027, which are the actual database values representing an unrestricted dashboard template. This ensures MySQL performs a proper string-to-string comparison, so only rows genuinely marked as unrestricted are returned, restoring the intended per-permission-level access control on dashboard templates.\u003c/p\u003e"
                }
              ],
              "value": "The fix corrects the type mismatch in the permission flag comparison by replacing the integer literal 0 with the explicit string values \u0027\u0027 and \u00270\u0027, which are the actual database values representing an unrestricted dashboard template. This ensures MySQL performs a proper string-to-string comparison, so only rows genuinely marked as unrestricted are returned, restoring the intended per-permission-level access control on dashboard templates."
            }
          ],
          "title": "MISP Dashboard Template ACL Bypass Due to VARCHAR-to-Integer Type Coercion in Permission Flag Comparison",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The affected version range is inferred from the tag_version_boundary (v2.5.46 with 200 commits after fix); no explicit affected or fixed version is stated in the patch metadata.",
                      "The vulnerability requires an authenticated MISP user with any role; the exact minimum privilege level needed to access the listTemplates endpoint is not specified in the patch.",
                      "The impact is assessed as Low confidentiality because the disclosed data is dashboard template definitions (layout, widget configuration) rather than raw threat intelligence or user credentials.",
                      "The MySQL type-coercion behavior described in the commit message and code comments is assumed to be accurate for the MySQL versions supported by MISP."
                    ],
                    "commit": "245b8d63a3794d048fb88275512fa0d32981f0b8",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "The vulnerability is exploitable over the network (AV:N) via the MISP web interface with low attack complexity (AC:L) and no attack target manipulation (AT:N). It requires a low-privilege authenticated user (PR:L) and no user interaction (UI:N). The impact is limited to confidentiality (VC:L) as restricted dashboard template definitions are disclosed to unauthorized users; there is no integrity or availability impact (VI:N, VA:N) and no secondary effects (SC:N, SI:N, SA:N). The severity is moderate because the disclosed data is dashboard template metadata rather than raw threat intelligence, but it still represents a breach of the intended access control boundary.",
                    "draft": false,
                    "fixSummary": "The fix corrects the type mismatch in the permission flag comparison by replacing the integer literal 0 with the explicit string values \u0027\u0027 and \u00270\u0027, which are the actual database values representing an unrestricted dashboard template. This ensures MySQL performs a proper string-to-string comparison, so only rows genuinely marked as unrestricted are returned, restoring the intended per-permission-level access control on dashboard templates.",
                    "generatedAt": "2026-09-15T08:40:44.690048Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "ac03cd1103d5fb0998c2406836df41d3449e5a5d6a0a5d2ffc77685eba48e188",
                    "patchSummary": "In app/Controller/DashboardsController.php, the listTemplates() method\u0027s query condition was changed from [\u0027Dashboard.restrict_to_permission_flag\u0027 =\u003e 0] to [\u0027Dashboard.restrict_to_permission_flag\u0027 =\u003e [\u0027\u0027, \u00270\u0027]]. A multi-line comment was added explaining that restrict_to_permission_flag is a VARCHAR column and that comparing it to integer 0 causes MySQL to coerce the column, making the clause a no-op. The two values that actually represent unrestricted access are the empty string (column default) and the string \u00270\u0027 (posted by the save form).",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "245b8d63a3794d048fb88275512fa0d32981f0b8",
                        "patchSha256": "ac03cd1103d5fb0998c2406836df41d3449e5a5d6a0a5d2ffc77685eba48e188",
                        "source": "https://github.com/MISP/MISP/commit/245b8d63a.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/245b8d63a.patch",
                        "subject": "fix: [acl] Compare the dashboard template permission flag as"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/245b8d63a.patch",
                    "subject": "fix: [acl] Compare the dashboard template permission flag as",
                    "tagVersionBoundary": {
                      "commits_after_fix": 200,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-863",
                        "rationale": "The permission-based filter on dashboard templates was effectively bypassed because the type-coerced comparison matched all rows, allowing any authenticated user to access templates restricted to higher-privilege roles. The authorization check was present in code but did not function correctly."
                      },
                      {
                        "cweId": "CWE-697",
                        "rationale": "The root cause is a comparison between a VARCHAR column and an integer literal. MySQL\u0027s implicit type coercion caused the comparison to evaluate to TRUE for all non-numeric string values, making the intended filter a no-op. This is a classic incorrect comparison due to type mismatch."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20010"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-91851",
        "datePublished": "2026-09-15T08:50:01.513Z",
        "dateReserved": "2026-09-15T08:49:59.734Z",
        "dateUpdated": "2026-09-15T13:29:55.108Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-91846 (GCVE-0-2026-91846)

    Vulnerability from cvelistv5 – Published: 2026-09-15 08:36 – Updated: 2026-09-15 13:50
    VLAI
    Title
    MISP Collection Element Add Missing Authorization on Referenced Object UUID
    Summary
    Affected versions of MISP allow a collection element to be created from a bare UUID without consistently checking whether the acting user is allowed to access the referenced object. The commit explains that collection elements themselves only store UUIDs, while the collection view later resolves those UUIDs into their underlying objects. Before this fix, the generic add() path could therefore persist a UUID for an Event or Galaxy Cluster that the caller could not normally read. The patch explicitly notes that this made collections a way to reference another organisation’s private data and had caused disclosure of organisation-only events in the beta collection view. The fix centralizes authorization in __assertCanUseElements(). Event UUIDs are validated through Event::fetchSimpleEvent() under the current user’s ACL, while Galaxy Cluster UUIDs are checked through GalaxyCluster::fetchGalaxyClusters(). The check is applied both to the CRUD add() path and to addElementToCollection(). Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-15 13:41 UTC
    CWE
    • CWE-862 - Missing Authorization
    • CWE-639 - Authorization Bypass Through User-Controlled Key
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-15 08:32
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/334d53709.patch 259d46cb7727…
    Confidence
    medium
    Commit Subject Patch SHA-256
    334d53709597 fix: [acl] Authorise the object a collection element points 259d46cb7727…
    Fix summary

    The fix introduces a dedicated __assertCanUseElements() authorization guard that is invoked in the beforeSave callback of the add() CRUD path (covering both form and REST submission) and in addElementToCollection(). For each element UUID, the method resolves the element type (deducing it if the caller omitted the field, preventing bypass by omission) and performs an ACL-aware lookup: for Events it calls fetchSimpleEvent() scoped to the current user, and for GalaxyClusters it calls fetchGalaxyClusters() with the user context. If the object does not exist or the caller lacks access, a NotFoundException is raised and the save is aborted. This ensures that no collection element can reference an object the caller is not authorized to read.

    Patch summary

    In app/Controller/CollectionElementsController.php, a new private method __assertCanUseElements() is added (approximately 45 lines) that iterates over normalized element UUIDs, deduces the element type when not explicitly supplied, and performs an ACL-scoped existence check via Event::fetchSimpleEvent() or GalaxyCluster::fetchGalaxyClusters(). The add() method's beforeSave closure is modified to call this guard before persisting the row. The addElementToCollection() method is refactored to replace its inline Event-only check with a call to the same __assertCanUseElements() helper, gaining GalaxyCluster coverage. Net change: 53 insertions, 12 deletions in one file.

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: The attacker simply submits a UUID to the existing add endpoint; no race condition or complex bypass is needed. AT:N: No prior compromise or user interaction is required. PR:L: An authenticated MISP user with permission to manage collection elements is required. UI:N: No victim interaction is needed; the disclosure occurs when the attacker views their own collection. VC:L: The attacker gains read access to Events or GalaxyClusters belonging to other organizations or restricted scopes. VI:L: Unauthorized references are persisted in the collection, altering data integrity. VA:N: No availability impact. SC/SI/SA:N: No impact on adjacent systems.

    Weakness rationale
    • CWE-862 The add() method stored collection element UUIDs without performing any authorization check on the referenced object. The fix adds an explicit ACL verification step before persistence, confirming the original code lacked the required authorization control.
    • CWE-639 The attacker-supplied UUID (a user-controlled key) was accepted and stored without verifying that the caller held a valid access grant for that specific object, allowing reference to objects outside the caller's authorized scope.
    Assumptions to verify
    • The affected version range is not explicitly stated in the patch; the tag boundary indicates the fix is 204 commits after v2.5.46, but the exact fixed release version is unconfirmed.
    • PR:L assumes the attacker needs only a basic authenticated MISP account with collection-element management rights; if a higher privilege level is required, PR should be raised.
    • The commit message references 'V17' as a related disclosure scenario; this is treated as internal context and not used to expand the affected scope.
    • The deduceType() fallback path is assumed to be reachable by an attacker omitting the element_type field, which the patch explicitly guards against.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 medium 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-91846",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-15T13:41:15.313807Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-15T13:50:14.847Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "CollectionElementsController"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/CollectionElementsController.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP allow a collection element to be created from a bare UUID without consistently checking whether the acting user is allowed to access the referenced object.\u003c/p\u003e\n\u003cp\u003eThe commit explains that collection elements themselves only store UUIDs, while the collection view later resolves those UUIDs into their underlying objects. Before this fix, the generic \u003ccode\u003eadd()\u003c/code\u003e path could therefore persist a UUID for an Event or Galaxy Cluster that the caller could not normally read. The patch explicitly notes that this made collections a way to reference another organisation\u2019s private data and had caused disclosure of organisation-only events in the beta collection view.\u003c/p\u003e\n\u003cp\u003eThe fix centralizes authorization in \u003ccode\u003e__assertCanUseElements()\u003c/code\u003e. Event UUIDs are validated through \u003ccode\u003eEvent::fetchSimpleEvent()\u003c/code\u003e under the current user\u2019s ACL, while Galaxy Cluster UUIDs are checked through \u003ccode\u003eGalaxyCluster::fetchGalaxyClusters()\u003c/code\u003e. The check is applied both to the CRUD \u003ccode\u003eadd()\u003c/code\u003e path and to \u003ccode\u003eaddElementToCollection()\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP allow a collection element to be created from a bare UUID without consistently checking whether the acting user is allowed to access the referenced object.\n\n\nThe commit explains that collection elements themselves only store UUIDs, while the collection view later resolves those UUIDs into their underlying objects. Before this fix, the generic add() path could therefore persist a UUID for an Event or Galaxy Cluster that the caller could not normally read. The patch explicitly notes that this made collections a way to reference another organisation\u2019s private data and had caused disclosure of organisation-only events in the beta collection view.\n\n\nThe fix centralizes authorization in __assertCanUseElements(). Event UUIDs are validated through Event::fetchSimpleEvent() under the current user\u2019s ACL, while Galaxy Cluster UUIDs are checked through GalaxyCluster::fetchGalaxyClusters(). The check is applied both to the CRUD add() path and to addElementToCollection().\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Accessing Functionality Not Properly Constrained by ACLs"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 7.1,
                "baseSeverity": "HIGH",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "HIGH",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-862",
                  "description": "CWE-862 Missing Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-639",
                  "description": "CWE-639 Authorization Bypass Through User-Controlled Key",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-15T08:36:22.825Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/334d53709"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces a dedicated __assertCanUseElements() authorization guard that is invoked in the beforeSave callback of the add() CRUD path (covering both form and REST submission) and in addElementToCollection(). For each element UUID, the method resolves the element type (deducing it if the caller omitted the field, preventing bypass by omission) and performs an ACL-aware lookup: for Events it calls fetchSimpleEvent() scoped to the current user, and for GalaxyClusters it calls fetchGalaxyClusters() with the user context. If the object does not exist or the caller lacks access, a NotFoundException is raised and the save is aborted. This ensures that no collection element can reference an object the caller is not authorized to read.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces a dedicated __assertCanUseElements() authorization guard that is invoked in the beforeSave callback of the add() CRUD path (covering both form and REST submission) and in addElementToCollection(). For each element UUID, the method resolves the element type (deducing it if the caller omitted the field, preventing bypass by omission) and performs an ACL-aware lookup: for Events it calls fetchSimpleEvent() scoped to the current user, and for GalaxyClusters it calls fetchGalaxyClusters() with the user context. If the object does not exist or the caller lacks access, a NotFoundException is raised and the save is aborted. This ensures that no collection element can reference an object the caller is not authorized to read."
            }
          ],
          "title": "MISP Collection Element Add Missing Authorization on Referenced Object UUID",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The affected version range is not explicitly stated in the patch; the tag boundary indicates the fix is 204 commits after v2.5.46, but the exact fixed release version is unconfirmed.",
                      "PR:L assumes the attacker needs only a basic authenticated MISP account with collection-element management rights; if a higher privilege level is required, PR should be raised.",
                      "The commit message references \u0027V17\u0027 as a related disclosure scenario; this is treated as internal context and not used to expand the affected scope.",
                      "The deduceType() fallback path is assumed to be reachable by an attacker omitting the element_type field, which the patch explicitly guards against."
                    ],
                    "commit": "334d537095971df4855a4a4d9d9da0d6fd93d0df",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: The attacker simply submits a UUID to the existing add endpoint; no race condition or complex bypass is needed. AT:N: No prior compromise or user interaction is required. PR:L: An authenticated MISP user with permission to manage collection elements is required. UI:N: No victim interaction is needed; the disclosure occurs when the attacker views their own collection. VC:L: The attacker gains read access to Events or GalaxyClusters belonging to other organizations or restricted scopes. VI:L: Unauthorized references are persisted in the collection, altering data integrity. VA:N: No availability impact. SC/SI/SA:N: No impact on adjacent systems.",
                    "draft": false,
                    "fixSummary": "The fix introduces a dedicated __assertCanUseElements() authorization guard that is invoked in the beforeSave callback of the add() CRUD path (covering both form and REST submission) and in addElementToCollection(). For each element UUID, the method resolves the element type (deducing it if the caller omitted the field, preventing bypass by omission) and performs an ACL-aware lookup: for Events it calls fetchSimpleEvent() scoped to the current user, and for GalaxyClusters it calls fetchGalaxyClusters() with the user context. If the object does not exist or the caller lacks access, a NotFoundException is raised and the save is aborted. This ensures that no collection element can reference an object the caller is not authorized to read.",
                    "generatedAt": "2026-09-15T08:32:37.109406Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "259d46cb772765da8e97cb71e005610ab690f9f92b29e58b0a95aabe71fb0bdf",
                    "patchSummary": "In app/Controller/CollectionElementsController.php, a new private method __assertCanUseElements() is added (approximately 45 lines) that iterates over normalized element UUIDs, deduces the element type when not explicitly supplied, and performs an ACL-scoped existence check via Event::fetchSimpleEvent() or GalaxyCluster::fetchGalaxyClusters(). The add() method\u0027s beforeSave closure is modified to call this guard before persisting the row. The addElementToCollection() method is refactored to replace its inline Event-only check with a call to the same __assertCanUseElements() helper, gaining GalaxyCluster coverage. Net change: 53 insertions, 12 deletions in one file.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "334d537095971df4855a4a4d9d9da0d6fd93d0df",
                        "patchSha256": "259d46cb772765da8e97cb71e005610ab690f9f92b29e58b0a95aabe71fb0bdf",
                        "source": "https://github.com/MISP/MISP/commit/334d53709.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/334d53709.patch",
                        "subject": "fix: [acl] Authorise the object a collection element points"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/334d53709.patch",
                    "subject": "fix: [acl] Authorise the object a collection element points",
                    "tagVersionBoundary": {
                      "commits_after_fix": 204,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-862",
                        "rationale": "The add() method stored collection element UUIDs without performing any authorization check on the referenced object. The fix adds an explicit ACL verification step before persistence, confirming the original code lacked the required authorization control."
                      },
                      {
                        "cweId": "CWE-639",
                        "rationale": "The attacker-supplied UUID (a user-controlled key) was accepted and stored without verifying that the caller held a valid access grant for that specific object, allowing reference to objects outside the caller\u0027s authorized scope."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20267"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-91846",
        "datePublished": "2026-09-15T08:36:22.825Z",
        "dateReserved": "2026-09-15T08:36:20.997Z",
        "dateUpdated": "2026-09-15T13:50:14.847Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-91825 (GCVE-0-2026-91825)

    Vulnerability from cvelistv5 – Published: 2026-09-15 08:06 – Updated: 2026-09-15 14:19
    VLAI
    Title
    MISP: Missing Authorization Check for Event Sharing Group When Distribution Field Is Omitted During Edit
    Summary
    Affected versions of MISP fail to authorize a submitted sharing group in a specific event-edit path. The vulnerable logic checked whether the acting user could use a sharing_group_id only when the request explicitly supplied distribution = 4. If the attacker instead omitted distribution but supplied a different sharing_group_id, that authorization branch was skipped. Later, MISP’s field-recovery logic restored the existing event distribution from storage. For events already configured with sharing-group distribution, the unauthorized sharing-group ID could therefore be saved. The fix adds authorization checks in both the controller and Event::_edit() whenever a non-empty sharing_group_id is supplied without distribution. The model now calls SharingGroup::checkIfAuthorised() before persisting the change. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-15 13:59 UTC
    CWE
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-15 07:50
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/cf3ee4026.patch 5229e7ba08a4…
    Confidence
    high
    Commit Subject Patch SHA-256
    cf3ee40265ee fix: [security] Authorise the event sharing group when 5229e7ba08a4…
    Fix summary

    The fix adds an explicit authorization check for the sharing_group_id in the code path where the distribution field is omitted from the edit request. In the controller, if no distribution is submitted but a sharing_group_id is present and differs from the stored value, the user's access to that sharing group is verified via checkIfCanBeUsed before the edit proceeds. In the model's _edit method, a parallel check via checkIfAuthorised is added for the same condition, returning an error if the user is not authorized for the submitted sharing group. This closes the gap where omitting the distribution field bypassed the existing authorization gate.

    Patch summary

    Two files are modified with 25 lines of insertions. In EventsController.php (edit method), a new else-if branch is added after the existing distribution-handling logic: when distribution is not set, sharing_group_id is non-empty, and it differs from the stored value, the code calls SharingGroup->checkIfCanBeUsed() and throws MethodNotAllowedException on failure. In Event.php (_edit method), a new elseif branch is added for the case where distribution is not set in the submitted data but sharing_group_id is present; it calls SharingGroup->checkIfAuthorised() and returns an error array if the user lacks access. Both additions are narrowly scoped to the omitted-distribution path and do not alter behavior for explicitly stated non-4 distribution values.

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: The attack requires only omitting a field from a standard edit request; no race condition or complex manipulation is needed. AT:N: No prior user interaction or attack preparation is required. PR:L: The attacker must be an authenticated user with edit access to at least one event. UI:N: No victim interaction is needed. VC:L: Event data may be exposed to members of the unauthorized sharing group. VI:H: The event's sharing group assignment is modified without authorization, directly compromising data integrity. VA:N: No availability impact. SC/SI/SA: No secondary system impact is evidenced; the impact is confined to the MISP instance's data integrity and the confidentiality of the affected event record.

    Weakness rationale
    • CWE-862 The authorization check for the sharing_group_id was conditionally executed only when the distribution field was explicitly set to 4. By omitting the distribution field, an attacker bypassed the authorization gate entirely, allowing an unauthorized sharing group assignment to be persisted. The check existed but was not applied to all code paths that could result in the sharing group being saved.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary (v2.5.46 with 216 commits after fix); no explicit fixed version tag is provided in the metadata, so the boundary is approximate.
    • The attacker must already possess authenticated edit access to at least one event in MISP; the vulnerability does not grant access to users without any event edit permission.
    • The impact assessment assumes the unauthorized sharing group contains other users who would gain visibility into the event data; if the target group is empty, the confidentiality impact is reduced.
    • The patch was found during internal review per the commit message; no external reporter or finder is identified in the metadata.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 7 9 high 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-91825",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-15T13:59:42.790533Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-15T14:19:38.987Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "EventsController (edit action)",
                "Event model (_edit method)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/EventsController.php",
                "app/Model/Event.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP fail to authorize a submitted sharing group in a specific event-edit path.\u003c/p\u003e\n\u003cp\u003eThe vulnerable logic checked whether the acting user could use a \u003ccode\u003esharing_group_id\u003c/code\u003e only when the request explicitly supplied \u003ccode\u003edistribution = 4\u003c/code\u003e. If the attacker instead omitted \u003ccode\u003edistribution\u003c/code\u003e but supplied a different \u003ccode\u003esharing_group_id\u003c/code\u003e, that authorization branch was skipped. Later, MISP\u2019s field-recovery logic restored the existing event distribution from storage. For events already configured with sharing-group distribution, the unauthorized sharing-group ID could therefore be saved.\u003c/p\u003e\n\u003cp\u003eThe fix adds authorization checks in both the controller and \u003ccode\u003eEvent::_edit()\u003c/code\u003e whenever a non-empty \u003ccode\u003esharing_group_id\u003c/code\u003e is supplied without \u003ccode\u003edistribution\u003c/code\u003e. The model now calls \u003ccode\u003eSharingGroup::checkIfAuthorised()\u003c/code\u003e before persisting the change.\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP fail to authorize a submitted sharing group in a specific event-edit path.\n\n\nThe vulnerable logic checked whether the acting user could use a sharing_group_id only when the request explicitly supplied distribution = 4. If the attacker instead omitted distribution but supplied a different sharing_group_id, that authorization branch was skipped. Later, MISP\u2019s field-recovery logic restored the existing event distribution from storage. For events already configured with sharing-group distribution, the unauthorized sharing-group ID could therefore be saved.\n\n\nThe fix adds authorization checks in both the controller and Event::_edit() whenever a non-empty sharing_group_id is supplied without distribution. The model now calls SharingGroup::checkIfAuthorised() before persisting the change.\n\n\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Accessing Functionality Not Properly Constrained by ACLs"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 7.1,
                "baseSeverity": "HIGH",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-862",
                  "description": "CWE-862 Missing Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-15T08:06:32.511Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/cf3ee4026"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix adds an explicit authorization check for the sharing_group_id in the code path where the distribution field is omitted from the edit request. In the controller, if no distribution is submitted but a sharing_group_id is present and differs from the stored value, the user\u0027s access to that sharing group is verified via checkIfCanBeUsed before the edit proceeds. In the model\u0027s _edit method, a parallel check via checkIfAuthorised is added for the same condition, returning an error if the user is not authorized for the submitted sharing group. This closes the gap where omitting the distribution field bypassed the existing authorization gate.\u003c/p\u003e"
                }
              ],
              "value": "The fix adds an explicit authorization check for the sharing_group_id in the code path where the distribution field is omitted from the edit request. In the controller, if no distribution is submitted but a sharing_group_id is present and differs from the stored value, the user\u0027s access to that sharing group is verified via checkIfCanBeUsed before the edit proceeds. In the model\u0027s _edit method, a parallel check via checkIfAuthorised is added for the same condition, returning an error if the user is not authorized for the submitted sharing group. This closes the gap where omitting the distribution field bypassed the existing authorization gate."
            }
          ],
          "title": "MISP: Missing Authorization Check for Event Sharing Group When Distribution Field Is Omitted During Edit",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The affected version range is inferred from the tag_version_boundary (v2.5.46 with 216 commits after fix); no explicit fixed version tag is provided in the metadata, so the boundary is approximate.",
                      "The attacker must already possess authenticated edit access to at least one event in MISP; the vulnerability does not grant access to users without any event edit permission.",
                      "The impact assessment assumes the unauthorized sharing group contains other users who would gain visibility into the event data; if the target group is empty, the confidentiality impact is reduced.",
                      "The patch was found during internal review per the commit message; no external reporter or finder is identified in the metadata."
                    ],
                    "commit": "cf3ee40265ee102f28dae9ec313abe4162aff8e3",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: The attack requires only omitting a field from a standard edit request; no race condition or complex manipulation is needed. AT:N: No prior user interaction or attack preparation is required. PR:L: The attacker must be an authenticated user with edit access to at least one event. UI:N: No victim interaction is needed. VC:L: Event data may be exposed to members of the unauthorized sharing group. VI:H: The event\u0027s sharing group assignment is modified without authorization, directly compromising data integrity. VA:N: No availability impact. SC/SI/SA: No secondary system impact is evidenced; the impact is confined to the MISP instance\u0027s data integrity and the confidentiality of the affected event record.",
                    "draft": false,
                    "fixSummary": "The fix adds an explicit authorization check for the sharing_group_id in the code path where the distribution field is omitted from the edit request. In the controller, if no distribution is submitted but a sharing_group_id is present and differs from the stored value, the user\u0027s access to that sharing group is verified via checkIfCanBeUsed before the edit proceeds. In the model\u0027s _edit method, a parallel check via checkIfAuthorised is added for the same condition, returning an error if the user is not authorized for the submitted sharing group. This closes the gap where omitting the distribution field bypassed the existing authorization gate.",
                    "generatedAt": "2026-09-15T07:50:41.743787Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 7
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "5229e7ba08a4a77a41d8205ce51428ae17242c7dc7873bc4c087fb828631869e",
                    "patchSummary": "Two files are modified with 25 lines of insertions. In EventsController.php (edit method), a new else-if branch is added after the existing distribution-handling logic: when distribution is not set, sharing_group_id is non-empty, and it differs from the stored value, the code calls SharingGroup-\u003echeckIfCanBeUsed() and throws MethodNotAllowedException on failure. In Event.php (_edit method), a new elseif branch is added for the case where distribution is not set in the submitted data but sharing_group_id is present; it calls SharingGroup-\u003echeckIfAuthorised() and returns an error array if the user lacks access. Both additions are narrowly scoped to the omitted-distribution path and do not alter behavior for explicitly stated non-4 distribution values.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "cf3ee40265ee102f28dae9ec313abe4162aff8e3",
                        "patchSha256": "5229e7ba08a4a77a41d8205ce51428ae17242c7dc7873bc4c087fb828631869e",
                        "source": "https://github.com/MISP/MISP/commit/cf3ee4026.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/cf3ee4026.patch",
                        "subject": "fix: [security] Authorise the event sharing group when"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/cf3ee4026.patch",
                    "subject": "fix: [security] Authorise the event sharing group when",
                    "tagVersionBoundary": {
                      "commits_after_fix": 216,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-862",
                        "rationale": "The authorization check for the sharing_group_id was conditionally executed only when the distribution field was explicitly set to 4. By omitting the distribution field, an attacker bypassed the authorization gate entirely, allowing an unauthorized sharing group assignment to be persisted. The check existed but was not applied to all code paths that could result in the sharing group being saved."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20122"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-91825",
        "datePublished": "2026-09-15T08:06:32.511Z",
        "dateReserved": "2026-09-15T08:06:29.530Z",
        "dateUpdated": "2026-09-15T14:19:38.987Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-91819 (GCVE-0-2026-91819)

    Vulnerability from cvelistv5 – Published: 2026-09-15 07:41 – Updated: 2026-09-15 14:37
    VLAI
    Title
    MISP: HTTP Method Override Bypasses CSRF and Form Validation in BetterSecurityComponent
    Summary
    Affected versions of MISP rely on CakePHP request-method override processing in a way that can disable CSRF and form-security validation. CakePHP honors a _method field or X-HTTP-Method-Override header by rewriting the effective request method. For override values outside the normal write verbs POST, PUT, PATCH, and DELETE, CakePHP also clears the parsed request body. MISP’s security component then determines whether to perform _validatePost() and _validateCsrf() based on whether request data remains. With a value such as: _method=GET the body becomes empty before those checks run, so both protections are skipped. A cross-site form containing only that override can therefore reach actions whose parameters are taken from the URL rather than the request body Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-15 14:33 UTC
    CWE
    • CWE-352 - Cross-Site Request Forgery (CSRF)
    • CWE-20 - Improper Input Validation
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-15 07:32
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/29af008c4.patch 97161c8af547…
    Confidence
    medium
    Commit Subject Patch SHA-256
    29af008c47d2 fix: [security] Refuse HTTP method overrides that empty the 97161c8af547…
    Fix summary

    The fix introduces a __rejectUnsafeMethodOverride() check in BetterSecurityComponent::startup() that executes before the parent SecurityComponent::startup() computes $hasData. It inspects both the _method POST field and the X-HTTP-Method-Override header (mirroring CakePHP's precedence) and rejects any value that is not a string in the allowed set {POST, PUT, PATCH, DELETE}. Non-string values (e.g., array payloads like _method[]=GET) are also refused. A BadRequestException is thrown and the event is logged, preventing the request from ever reaching the parent security logic with an emptied body.

    Patch summary

    Adds a private __rejectUnsafeMethodOverride() method and a public startup() override to BetterSecurityComponent. The new method reads $_POST['_method'] and the HTTP_X_HTTP_METHOD_OVERRIDE header, applies the same header-over-body precedence as CakeRequest::_processPost(), and throws BadRequestException for any override that is not a string in the ALLOWED_METHOD_OVERRIDES constant (POST, PUT, PATCH, DELETE). The startup() override calls this check before delegating to parent::startup(). A new test file BetterSecurityComponentTest.php (196 lines) covers pass-through of write verbs, refusal of non-write verbs, non-string overrides, header overrides, header-over-body precedence, and log output.

    CVSS rationale

    AV:N: The attack is delivered over the network via a crafted HTML form or HTTP header. AC:L: Exploitation requires only crafting a form with a _method field; no race conditions or complex timing are needed. AT:N: No manipulation of the target's data or state is required prior to the attack. PR:L: The victim must be an authenticated MISP user; no administrative privileges are needed. UI:P: The victim passively interacts with the attack (e.g., visiting a page with an auto-submitting form); no deliberate action beyond page load is required. VC:N: No confidentiality impact is evident from the patch evidence. VI:H: The attacker can perform arbitrary state-changing actions (enable/disable feeds, modify objects) on the victim's MISP instance, representing high integrity impact. VA:N: No availability impact is indicated. SC/SI/SA:N: No sub-component impact is evidenced.

    Weakness rationale
    • CWE-352 The primary security impact is the complete bypass of CSRF token validation. An attacker can forge requests to state-changing MISP endpoints without a valid CSRF token by exploiting the method-override body-emptying behaviour.
    • CWE-20 The root cause is the failure to validate the _method override value before it influences the security component's behaviour. Any verb outside the expected write set is accepted by the framework and causes the request body to be discarded, disabling security checks.
    Assumptions to verify
    • The fix is included in MISP v2.5.46 based on the tag_version_boundary metadata (228 commits after the fix commit at that tag); the exact affected version range prior to the fix is not explicitly stated in the patch.
    • PR:L assumes the victim must be an authenticated MISP user; the patch does not explicitly state authentication requirements, but MISP is an authenticated threat-intelligence platform and the example endpoint (/feeds/enable/2) implies an authenticated context.
    • UI:P assumes the typical CSRF delivery mechanism (auto-submitting form on a malicious page) where the victim's interaction is limited to loading the page; if a manual form submission is required, UI:A would be more appropriate.
    • The vulnerability was found during internal review and was not externally reported, per the commit message.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 medium 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-91819",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-15T14:33:06.680786Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-15T14:37:05.161Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Controller/Component/BetterSecurityComponent.php"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/Component/BetterSecurityComponent.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP rely on CakePHP request-method override processing in a way that can disable CSRF and form-security validation.\u003c/p\u003e\u003cp\u003eCakePHP honors a \u003ccode\u003e_method\u003c/code\u003e field or \u003ccode\u003eX-HTTP-Method-Override\u003c/code\u003e header by rewriting the effective request method. For override values outside the normal write verbs \u003ccode\u003ePOST\u003c/code\u003e, \u003ccode\u003ePUT\u003c/code\u003e, \u003ccode\u003ePATCH\u003c/code\u003e, and \u003ccode\u003eDELETE\u003c/code\u003e, CakePHP also clears the parsed request body. MISP\u2019s security component then determines whether to perform \u003ccode\u003e_validatePost()\u003c/code\u003e and \u003ccode\u003e_validateCsrf()\u003c/code\u003e based on whether request data remains. With a value such as:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003e_method=GET\u003c/code\u003e\u003c/p\u003e\u003cp\u003ethe body becomes empty before those checks run, so both protections are skipped. A cross-site form containing only that override can therefore reach actions whose parameters are taken from the URL rather than the request body\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP rely on CakePHP request-method override processing in a way that can disable CSRF and form-security validation.\n\nCakePHP honors a _method field or X-HTTP-Method-Override header by rewriting the effective request method. For override values outside the normal write verbs POST, PUT, PATCH, and DELETE, CakePHP also clears the parsed request body. MISP\u2019s security component then determines whether to perform _validatePost() and _validateCsrf() based on whether request data remains. With a value such as:\n\n\n_method=GET\n\nthe body becomes empty before those checks run, so both protections are skipped. A cross-site form containing only that override can therefore reach actions whose parameters are taken from the URL rather than the request body\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-62",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-62 Cross Site Request Forgery"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.9,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-352",
                  "description": "CWE-352 Cross-Site Request Forgery (CSRF)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-15T07:41:37.131Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/29af008c4"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces a __rejectUnsafeMethodOverride() check in BetterSecurityComponent::startup() that executes before the parent SecurityComponent::startup() computes $hasData. It inspects both the _method POST field and the X-HTTP-Method-Override header (mirroring CakePHP\u0027s precedence) and rejects any value that is not a string in the allowed set {POST, PUT, PATCH, DELETE}. Non-string values (e.g., array payloads like _method[]=GET) are also refused. A BadRequestException is thrown and the event is logged, preventing the request from ever reaching the parent security logic with an emptied body.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces a __rejectUnsafeMethodOverride() check in BetterSecurityComponent::startup() that executes before the parent SecurityComponent::startup() computes $hasData. It inspects both the _method POST field and the X-HTTP-Method-Override header (mirroring CakePHP\u0027s precedence) and rejects any value that is not a string in the allowed set {POST, PUT, PATCH, DELETE}. Non-string values (e.g., array payloads like _method[]=GET) are also refused. A BadRequestException is thrown and the event is logged, preventing the request from ever reaching the parent security logic with an emptied body."
            }
          ],
          "title": "MISP: HTTP Method Override Bypasses CSRF and Form Validation in BetterSecurityComponent",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The fix is included in MISP v2.5.46 based on the tag_version_boundary metadata (228 commits after the fix commit at that tag); the exact affected version range prior to the fix is not explicitly stated in the patch.",
                      "PR:L assumes the victim must be an authenticated MISP user; the patch does not explicitly state authentication requirements, but MISP is an authenticated threat-intelligence platform and the example endpoint (/feeds/enable/2) implies an authenticated context.",
                      "UI:P assumes the typical CSRF delivery mechanism (auto-submitting form on a malicious page) where the victim\u0027s interaction is limited to loading the page; if a manual form submission is required, UI:A would be more appropriate.",
                      "The vulnerability was found during internal review and was not externally reported, per the commit message."
                    ],
                    "commit": "29af008c47d2cc021b6183a0f119b36c8eabfe65",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: The attack is delivered over the network via a crafted HTML form or HTTP header. AC:L: Exploitation requires only crafting a form with a _method field; no race conditions or complex timing are needed. AT:N: No manipulation of the target\u0027s data or state is required prior to the attack. PR:L: The victim must be an authenticated MISP user; no administrative privileges are needed. UI:P: The victim passively interacts with the attack (e.g., visiting a page with an auto-submitting form); no deliberate action beyond page load is required. VC:N: No confidentiality impact is evident from the patch evidence. VI:H: The attacker can perform arbitrary state-changing actions (enable/disable feeds, modify objects) on the victim\u0027s MISP instance, representing high integrity impact. VA:N: No availability impact is indicated. SC/SI/SA:N: No sub-component impact is evidenced.",
                    "draft": false,
                    "fixSummary": "The fix introduces a __rejectUnsafeMethodOverride() check in BetterSecurityComponent::startup() that executes before the parent SecurityComponent::startup() computes $hasData. It inspects both the _method POST field and the X-HTTP-Method-Override header (mirroring CakePHP\u0027s precedence) and rejects any value that is not a string in the allowed set {POST, PUT, PATCH, DELETE}. Non-string values (e.g., array payloads like _method[]=GET) are also refused. A BadRequestException is thrown and the event is logged, preventing the request from ever reaching the parent security logic with an emptied body.",
                    "generatedAt": "2026-09-15T07:32:05.818714Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "97161c8af5472e6169868d916a2e4834f382a4e1f7c8efda555ea396171b8d3a",
                    "patchSummary": "Adds a private __rejectUnsafeMethodOverride() method and a public startup() override to BetterSecurityComponent. The new method reads $_POST[\u0027_method\u0027] and the HTTP_X_HTTP_METHOD_OVERRIDE header, applies the same header-over-body precedence as CakeRequest::_processPost(), and throws BadRequestException for any override that is not a string in the ALLOWED_METHOD_OVERRIDES constant (POST, PUT, PATCH, DELETE). The startup() override calls this check before delegating to parent::startup(). A new test file BetterSecurityComponentTest.php (196 lines) covers pass-through of write verbs, refusal of non-write verbs, non-string overrides, header overrides, header-over-body precedence, and log output.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "29af008c47d2cc021b6183a0f119b36c8eabfe65",
                        "patchSha256": "97161c8af5472e6169868d916a2e4834f382a4e1f7c8efda555ea396171b8d3a",
                        "source": "https://github.com/MISP/MISP/commit/29af008c4.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/29af008c4.patch",
                        "subject": "fix: [security] Refuse HTTP method overrides that empty the"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/29af008c4.patch",
                    "subject": "fix: [security] Refuse HTTP method overrides that empty the",
                    "tagVersionBoundary": {
                      "commits_after_fix": 228,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-352",
                        "rationale": "The primary security impact is the complete bypass of CSRF token validation. An attacker can forge requests to state-changing MISP endpoints without a valid CSRF token by exploiting the method-override body-emptying behaviour."
                      },
                      {
                        "cweId": "CWE-20",
                        "rationale": "The root cause is the failure to validate the _method override value before it influences the security component\u0027s behaviour. Any verb outside the expected write set is accepted by the framework and causes the request body to be discarded, disabling security checks."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20102"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-91819",
        "datePublished": "2026-09-15T07:41:37.131Z",
        "dateReserved": "2026-09-15T07:41:29.630Z",
        "dateUpdated": "2026-09-15T14:37:05.161Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-90961 (GCVE-0-2026-90961)

    Vulnerability from cvelistv5 – Published: 2026-09-14 13:22 – Updated: 2026-09-14 13:55
    VLAI
    Title
    MISP LdapAuth and LinOTPAuth Authentication Bypass via Empty or Non-String Credentials
    Summary
    The LdapAuth and LinOTPAuth authentication plugins in MISP contain an authentication bypass vulnerability. Both LdapAuthenticate and LinOTPAuthenticate replace CakePHP's FormAuthenticate class but fail to replicate its _checkFields() input validation guard. As a result, the email and password fields extracted from the login request are passed to downstream authentication logic without verifying that they are non-empty strings. In the LDAP authenticator, an empty or null password is forwarded to ldap_bind(). Per RFC 4513 section 5.1.2, a bind request with a valid DN and an empty password constitutes an unauthenticated bind, which many LDAP directory servers accept as successful. An attacker who knows any valid user email address in the directory can therefore authenticate as that user without possessing a password. Additionally, non-string values (null, false, arrays) are either coerced to empty strings by ldap_bind(), raise TypeErrors, or are misinterpreted as find conditions in _findUser(), all of which can lead to unintended authentication outcomes. In the LinOTP authenticator, the same missing guard allows non-string credentials to be concatenated into the LinOTP verification request, and in the mixed-authentication branch an empty password is accepted against a stored hash of the empty string. A secondary issue in the LDAP authenticator is that newly created user accounts (auto-provisioned on first LDAP login) were assigned an empty password. Because the save path skips validation, the empty string is hashed and stored. If the user later ceases to be found in LDAP and the mixed-authentication fallback is used, the stored hash of the empty string verifies against an empty password, again permitting unauthenticated access. The vulnerability requires that the affected plugin (LdapAuth or LinOTPAuth) is enabled on the MISP instance and that the attacker knows at least one valid email address registered in the directory or MISP user store. No prior authentication is required. Successful exploitation grants the attacker the full privileges of the impersonated user, which may include administrative access to threat intelligence data. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-14 13:55 UTC
    CWE
    • CWE-287 - Improper Authentication
    • CWE-20 - Improper Input Validation
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-14 13:14
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/0ee058548.patch 01b60b396532…
    Confidence
    high
    Commit Subject Patch SHA-256
    0ee0585486cd fix: [security] Reject empty and non-string credentials in 01b60b396532…
    Fix summary

    The fix adds explicit type and emptiness validation for the email and password fields in both LdapAuthenticate and LinOTPAuthenticate before any authentication logic is invoked. Non-string or empty credentials are rejected with a logged error and a false return. Additionally, the LDAP authenticator now assigns a cryptographically random password to auto-provisioned user accounts instead of an empty string, preventing the stored hash of '' from being verifiable in the mixed-authentication fallback path. The LinOTP authenticator also rejects an empty password specifically in the mixed-authentication branch where the password is checked against the local database.

    Patch summary

    In LdapAuthenticate.php: (1) email and password are now extracted with isset() defaults to empty string; (2) a guard clause checks is_string() and non-emptiness for both fields, logging an error and returning false on failure; (3) the auto-provisioned user creation block now calls $userModel->generateRandomPassword() and stores that value in both 'password' and 'confirm_password' fields instead of empty strings. In LinOTPAuthenticate.php: (1) email, password, and otp are extracted with isset() defaults; (2) a guard clause checks is_string() and non-emptiness for email and is_string() for password, logging and returning false on failure; (3) in the mixed-authentication branch, an additional check rejects an empty password before calling _findUser().

    CVSS rationale

    AV:N: The vulnerability is exploitable over the network via the MISP web login endpoint. AC:L: Exploitation requires only sending a login request with an empty or non-string password field; no race conditions, specific directory configuration beyond accepting unauthenticated binds (which is common), or other special conditions are needed. AT:N: No attack target manipulation is required. PR:N: No prior authentication is needed; the attacker is attempting to authenticate. UI:N: No user interaction is required. VC:H: Successful exploitation grants the attacker the full data-access privileges of the impersonated user, potentially including all MISP threat intelligence data. VI:H: The attacker can create, modify, or delete MISP objects, tags, and configurations at the privilege level of the impersonated user. VA:N: No direct availability impact is demonstrated. SC/SI/SA:N: No separate subsequent system is identified; the impact is contained to the MISP instance itself.

    Weakness rationale
    • CWE-287 The primary impact is an authentication bypass: empty or non-string credentials allow an unauthenticated attacker to be authenticated as a known directory user. The root cause is the absence of the credential validation guard that FormAuthenticate normally provides.
    • CWE-20 The underlying technical weakness is the failure to validate that user-supplied credential fields are non-empty strings before passing them to ldap_bind(), the LinOTP verifier, or _findUser(). Non-string types (null, false, arrays) and empty strings are all accepted and produce unintended authentication behavior.
    Assumptions to verify
    • The LDAP directory server is configured to accept unauthenticated (empty-password) binds, which is common but not universal; if the directory rejects empty-password binds, the LDAP-specific bypass is mitigated at the directory level, though the non-string credential and empty-password-hash issues remain.
    • The attacker must know at least one valid email address that exists in the LDAP directory or MISP user store.
    • The LdapAuth or LinOTPAuth plugin is enabled on the affected MISP instance.
    • CVSS impact ratings assume the attacker can impersonate a user with high privileges (e.g., admin); actual impact scales with the privileges of the specific user impersonated.
    • The exact fixed version is not specified in the patch metadata; the fix commit is 238 commits after tag v2.5.46, suggesting the fix landed in a release after 2.5.46, but the precise version boundary is unconfirmed.
    • The LinOTP empty-password bypass in the mixed-auth branch requires the mixedauth setting to be enabled.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 high 6
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-90961",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "total"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-14T13:55:28.674675Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-14T13:55:49.225Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "LdapAuth plugin (app/Plugin/LdapAuth/Controller/Component/Auth/LdapAuthenticate.php)",
                "LinOTPAuth plugin (app/Plugin/LinOTPAuth/Controller/Component/Auth/LinOTPAuthenticate.php)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Plugin/LdapAuth/Controller/Component/Auth/LdapAuthenticate.php",
                "app/Plugin/LinOTPAuth/Controller/Component/Auth/LinOTPAuthenticate.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "elhoim (David Andr\u00e9)"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe LdapAuth and LinOTPAuth authentication plugins in MISP contain an authentication bypass vulnerability. Both LdapAuthenticate and LinOTPAuthenticate replace CakePHP\u0027s FormAuthenticate class but fail to replicate its _checkFields() input validation guard. As a result, the email and password fields extracted from the login request are passed to downstream authentication logic without verifying that they are non-empty strings.\u003c/p\u003e\u003cp\u003eIn the LDAP authenticator, an empty or null password is forwarded to ldap_bind(). Per RFC 4513 section 5.1.2, a bind request with a valid DN and an empty password constitutes an unauthenticated bind, which many LDAP directory servers accept as successful. An attacker who knows any valid user email address in the directory can therefore authenticate as that user without possessing a password. Additionally, non-string values (null, false, arrays) are either coerced to empty strings by ldap_bind(), raise TypeErrors, or are misinterpreted as find conditions in _findUser(), all of which can lead to unintended authentication outcomes.\u003c/p\u003e\u003cp\u003eIn the LinOTP authenticator, the same missing guard allows non-string credentials to be concatenated into the LinOTP verification request, and in the mixed-authentication branch an empty password is accepted against a stored hash of the empty string.\u003c/p\u003e\u003cp\u003eA secondary issue in the LDAP authenticator is that newly created user accounts (auto-provisioned on first LDAP login) were assigned an empty password. Because the save path skips validation, the empty string is hashed and stored. If the user later ceases to be found in LDAP and the mixed-authentication fallback is used, the stored hash of the empty string verifies against an empty password, again permitting unauthenticated access.\u003c/p\u003e\u003cp\u003eThe vulnerability requires that the affected plugin (LdapAuth or LinOTPAuth) is enabled on the MISP instance and that the attacker knows at least one valid email address registered in the directory or MISP user store. No prior authentication is required. Successful exploitation grants the attacker the full privileges of the impersonated user, which may include administrative access to threat intelligence data.\u003cbr\u003e\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e"
                }
              ],
              "value": "The LdapAuth and LinOTPAuth authentication plugins in MISP contain an authentication bypass vulnerability. Both LdapAuthenticate and LinOTPAuthenticate replace CakePHP\u0027s FormAuthenticate class but fail to replicate its _checkFields() input validation guard. As a result, the email and password fields extracted from the login request are passed to downstream authentication logic without verifying that they are non-empty strings.\n\nIn the LDAP authenticator, an empty or null password is forwarded to ldap_bind(). Per RFC 4513 section 5.1.2, a bind request with a valid DN and an empty password constitutes an unauthenticated bind, which many LDAP directory servers accept as successful. An attacker who knows any valid user email address in the directory can therefore authenticate as that user without possessing a password. Additionally, non-string values (null, false, arrays) are either coerced to empty strings by ldap_bind(), raise TypeErrors, or are misinterpreted as find conditions in _findUser(), all of which can lead to unintended authentication outcomes.\n\nIn the LinOTP authenticator, the same missing guard allows non-string credentials to be concatenated into the LinOTP verification request, and in the mixed-authentication branch an empty password is accepted against a stored hash of the empty string.\n\nA secondary issue in the LDAP authenticator is that newly created user accounts (auto-provisioned on first LDAP login) were assigned an empty password. Because the save path skips validation, the empty string is hashed and stored. If the user later ceases to be found in LDAP and the mixed-authentication fallback is used, the stored hash of the empty string verifies against an empty password, again permitting unauthenticated access.\n\nThe vulnerability requires that the affected plugin (LdapAuth or LinOTPAuth) is enabled on the MISP instance and that the attacker knows at least one valid email address registered in the directory or MISP user store. No prior authentication is required. Successful exploitation grants the attacker the full privileges of the impersonated user, which may include administrative access to threat intelligence data.\n\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-115",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-115 Authentication Bypass"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 9.3,
                "baseSeverity": "CRITICAL",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "LOW",
                "vulnConfidentialityImpact": "HIGH",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-287",
                  "description": "CWE-287 Improper Authentication",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-14T13:22:07.185Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/0ee058548"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix adds explicit type and emptiness validation for the email and password fields in both LdapAuthenticate and LinOTPAuthenticate before any authentication logic is invoked. Non-string or empty credentials are rejected with a logged error and a false return. Additionally, the LDAP authenticator now assigns a cryptographically random password to auto-provisioned user accounts instead of an empty string, preventing the stored hash of \u0027\u0027 from being verifiable in the mixed-authentication fallback path. The LinOTP authenticator also rejects an empty password specifically in the mixed-authentication branch where the password is checked against the local database.\u003c/p\u003e"
                }
              ],
              "value": "The fix adds explicit type and emptiness validation for the email and password fields in both LdapAuthenticate and LinOTPAuthenticate before any authentication logic is invoked. Non-string or empty credentials are rejected with a logged error and a false return. Additionally, the LDAP authenticator now assigns a cryptographically random password to auto-provisioned user accounts instead of an empty string, preventing the stored hash of \u0027\u0027 from being verifiable in the mixed-authentication fallback path. The LinOTP authenticator also rejects an empty password specifically in the mixed-authentication branch where the password is checked against the local database."
            }
          ],
          "title": "MISP LdapAuth and LinOTPAuth Authentication Bypass via Empty or Non-String Credentials",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The LDAP directory server is configured to accept unauthenticated (empty-password) binds, which is common but not universal; if the directory rejects empty-password binds, the LDAP-specific bypass is mitigated at the directory level, though the non-string credential and empty-password-hash issues remain.",
                      "The attacker must know at least one valid email address that exists in the LDAP directory or MISP user store.",
                      "The LdapAuth or LinOTPAuth plugin is enabled on the affected MISP instance.",
                      "CVSS impact ratings assume the attacker can impersonate a user with high privileges (e.g., admin); actual impact scales with the privileges of the specific user impersonated.",
                      "The exact fixed version is not specified in the patch metadata; the fix commit is 238 commits after tag v2.5.46, suggesting the fix landed in a release after 2.5.46, but the precise version boundary is unconfirmed.",
                      "The LinOTP empty-password bypass in the mixed-auth branch requires the mixedauth setting to be enabled."
                    ],
                    "commit": "0ee0585486cd2c9df49e4f14d48a32a953666e3a",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "elhoim (David Andr\u00e9)"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: The vulnerability is exploitable over the network via the MISP web login endpoint. AC:L: Exploitation requires only sending a login request with an empty or non-string password field; no race conditions, specific directory configuration beyond accepting unauthenticated binds (which is common), or other special conditions are needed. AT:N: No attack target manipulation is required. PR:N: No prior authentication is needed; the attacker is attempting to authenticate. UI:N: No user interaction is required. VC:H: Successful exploitation grants the attacker the full data-access privileges of the impersonated user, potentially including all MISP threat intelligence data. VI:H: The attacker can create, modify, or delete MISP objects, tags, and configurations at the privilege level of the impersonated user. VA:N: No direct availability impact is demonstrated. SC/SI/SA:N: No separate subsequent system is identified; the impact is contained to the MISP instance itself.",
                    "draft": false,
                    "fixSummary": "The fix adds explicit type and emptiness validation for the email and password fields in both LdapAuthenticate and LinOTPAuthenticate before any authentication logic is invoked. Non-string or empty credentials are rejected with a logged error and a false return. Additionally, the LDAP authenticator now assigns a cryptographically random password to auto-provisioned user accounts instead of an empty string, preventing the stored hash of \u0027\u0027 from being verifiable in the mixed-authentication fallback path. The LinOTP authenticator also rejects an empty password specifically in the mixed-authentication branch where the password is checked against the local database.",
                    "generatedAt": "2026-09-14T13:14:35.161935Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 6,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "01b60b396532e5f6ff5efca8c41961e701b7b6c539edcf49ad29aba06a906149",
                    "patchSummary": "In LdapAuthenticate.php: (1) email and password are now extracted with isset() defaults to empty string; (2) a guard clause checks is_string() and non-emptiness for both fields, logging an error and returning false on failure; (3) the auto-provisioned user creation block now calls $userModel-\u003egenerateRandomPassword() and stores that value in both \u0027password\u0027 and \u0027confirm_password\u0027 fields instead of empty strings. In LinOTPAuthenticate.php: (1) email, password, and otp are extracted with isset() defaults; (2) a guard clause checks is_string() and non-emptiness for email and is_string() for password, logging and returning false on failure; (3) in the mixed-authentication branch, an additional check rejects an empty password before calling _findUser().",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "0ee0585486cd2c9df49e4f14d48a32a953666e3a",
                        "patchSha256": "01b60b396532e5f6ff5efca8c41961e701b7b6c539edcf49ad29aba06a906149",
                        "source": "https://github.com/MISP/MISP/commit/0ee058548.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/0ee058548.patch",
                        "subject": "fix: [security] Reject empty and non-string credentials in"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/0ee058548.patch",
                    "subject": "fix: [security] Reject empty and non-string credentials in",
                    "tagVersionBoundary": {
                      "commits_after_fix": 238,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-287",
                        "rationale": "The primary impact is an authentication bypass: empty or non-string credentials allow an unauthenticated attacker to be authenticated as a known directory user. The root cause is the absence of the credential validation guard that FormAuthenticate normally provides."
                      },
                      {
                        "cweId": "CWE-20",
                        "rationale": "The underlying technical weakness is the failure to validate that user-supplied credential fields are non-empty strings before passing them to ldap_bind(), the LinOTP verifier, or _findUser(). Non-string types (null, false, arrays) and empty strings are all accepted and produce unintended authentication behavior."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20246"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-90961",
        "datePublished": "2026-09-14T13:22:07.185Z",
        "dateReserved": "2026-09-14T13:22:04.165Z",
        "dateUpdated": "2026-09-14T13:55:49.225Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-90957 (GCVE-0-2026-90957)

    Vulnerability from cvelistv5 – Published: 2026-09-14 13:03 – Updated: 2026-09-14 13:58
    VLAI
    Title
    MISP: Stored XSS via Inline-Served SVG Organisation Logos and Report Pictures
    Summary
    Affected versions of MISP serve uploaded SVG images inline without a restrictive browser sandbox. The commit explains that SVG files are XML documents rather than passive bitmap images. While scripts inside SVG do not execute when the SVG is rendered through a normal <img>, they can execute when the SVG is navigated to directly or embedded as a document. In that case, malicious <script> elements, event handlers, or javascript: URLs execute on the MISP origin with the viewer’s session. The affected use cases include:  - organisation SVG logos;  - event-report SVG pictures. Importantly, the vulnerable behavior is on the serve path, not merely the upload path: the patch notes that a malicious SVG uploaded while SVG support was enabled could remain dangerous even after uploads were later disabled. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-14 13:58 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input in Web Page ('Cross-site Scripting')
    • CWE-693 - Protection Mechanism Failure
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-14 12:47
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/86496aecc.patch e2053fbcffe3…
    Confidence
    high
    Commit Subject Patch SHA-256
    86496aecc355 fix: [security] Sandbox inline-served SVG images e2053fbcffe3…
    Fix summary

    A new sandboxInlineFile() method is added to RestResponseComponent. When a file is served inline (download=false) and its type is SVG (svg, svgz, or image/svg+xml), the response is augmented with a Content-Security-Policy header containing the sandbox directive (which assigns an opaque origin and disables script execution, plugins, and form submission) along with restrictive default-src, style-src, img-src, and font-src directives that still permit rendering of inline styles, embedded raster images, and data: fonts. An X-Content-Type-Options: nosniff header is also set. The method is invoked from both the generic sendFile() path and the org-logo endpoint. The enable_svg_logos setting description is updated to warn administrators that SVG files remain XML documents and should be left disabled unless required.

    Patch summary

    Adds RestResponseComponent::sandboxInlineFile(CakeResponse, string) which checks the file type against a whitelist of SVG identifiers (svg, svgz, image/svg+xml, case-insensitive) and, on match, sets Content-Security-Policy: default-src 'none'; style-src 'unsafe-inline'; img-src 'self' data:; font-src data:; frame-ancestors 'self'; sandbox and X-Content-Type-Options: nosniff. Calls this method from sendFile() when download is false, and from OrganisationsController::getOrgLogo() after the file response is built. Updates the enable_svg_logos setting description in Server.php to reflect the sandboxing behaviour and advise leaving the setting disabled. Adds a new PHPUnit test file RestResponseSandboxInlineFileTest.php with cases covering SVG extension, MIME type, svgz, case-insensitivity, and confirmation that raster types (png, jpg, jpeg, gif, webp) and null/empty types receive no headers.

    CVSS rationale

    AV:N: The malicious SVG is delivered over HTTP/HTTPS to the victim's browser. AC:L: No race conditions or special network conditions are required; the SVG is already stored and served by the application. AT:N: No specific attack requirements beyond the SVG being present in the MISP instance. PR:L: The attacker needs an authenticated MISP account with permission to upload an organisation logo or attach a report picture. UI:P: The victim must navigate to the SVG URL or have it loaded in an <object>/<iframe> context; it does not execute when rendered via <img>. VC/VI/VA:N: The MISP server itself is not compromised; the impact is on the client-side session. SC:H: The attacker gains full read access to the victim's MISP session (threat intelligence, events, users, settings). SI:H: The attacker can perform write operations (create/modify/delete events, change settings) as the victim. SA:N: No availability impact on the victim's browser or the MISP instance.

    Weakness rationale
    • CWE-79 The core issue is that user-supplied SVG content (an XML document capable of embedding script) is served inline on the application origin without any mechanism to prevent script execution, resulting in stored XSS. The fix neutralises the script-execution capability via a sandboxing CSP.
    • CWE-693 The upload-time restriction (enable_svg_logos) was the only protection, and it was insufficient because (a) it could be toggled off after files were already stored, and (b) it did not address the serve path at all. The serve path lacked its own protection mechanism (sandboxing CSP), which is what the patch adds.
    Assumptions to verify
    • The enable_svg_logos setting must be enabled (or was previously enabled and SVG files were uploaded) for the vulnerability to be exploitable; the default value is false.
    • The attacker requires an authenticated MISP account with sufficient privileges to upload an organisation logo or attach a report picture.
    • The victim must be an authenticated MISP user whose session is active in the browser when the SVG is loaded as a document.
    • The fix is included in MISP v2.5.46 based on the tag boundary metadata (186 commits after the fix commit up to that tag); the exact version in which the vulnerability was introduced is not specified in the patch.
    • CVSS UI:P assumes the primary exploitation path requires the victim to navigate to the SVG URL or have it embedded in an object/iframe; if an attacker can embed the SVG in a page the victim is already viewing without additional interaction, UI:N would apply.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 high 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-90957",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-14T13:58:18.267352Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-14T13:58:30.297Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "RestResponseComponent (sendFile / sandboxInlineFile)",
                "OrganisationsController (getOrgLogo)",
                "Server model (enable_svg_logos setting)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/Component/RestResponseComponent.php",
                "app/Controller/OrganisationsController.php",
                "app/Model/Server.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Scottish Government - National Cyber Team"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP serve uploaded SVG images inline without a restrictive browser sandbox.\u003c/p\u003e\n\u003cp\u003eThe commit explains that SVG files are XML documents rather than passive bitmap images. While scripts inside SVG do not execute when the SVG is rendered through a normal \u003ccode\u003e\u0026lt;img\u0026gt;\u003c/code\u003e, they can execute when the SVG is navigated to directly or embedded as a document. In that case, malicious \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e elements, event handlers, or \u003ccode\u003ejavascript:\u003c/code\u003e URLs execute on the MISP origin with the viewer\u2019s session.\u003c/p\u003e\n\u003cp\u003eThe affected use cases include:\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u2003- organisation SVG logos;\u003cbr\u003e\u003cdiv\u003e\u2003-\u0026nbsp;event-report SVG pictures.\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cp\u003e\u003c/p\u003e\u003cp\u003eImportantly, the vulnerable behavior is on the \u003cstrong\u003eserve path\u003c/strong\u003e, not merely the upload path: the patch notes that a malicious SVG uploaded while SVG support was enabled could remain dangerous even after uploads were later disabled.\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP serve uploaded SVG images inline without a restrictive browser sandbox.\n\n\nThe commit explains that SVG files are XML documents rather than passive bitmap images. While scripts inside SVG do not execute when the SVG is rendered through a normal \u003cimg\u003e, they can execute when the SVG is navigated to directly or embedded as a document. In that case, malicious \u003cscript\u003e elements, event handlers, or javascript: URLs execute on the MISP origin with the viewer\u2019s session.\n\n\nThe affected use cases include:\n\n\n\n\u2003- organisation SVG logos;\n\u2003-\u00a0event-report SVG pictures.\n\n\n\n\n\n\nImportantly, the vulnerable behavior is on the serve path, not merely the upload path: the patch notes that a malicious SVG uploaded while SVG support was enabled could remain dangerous even after uploads were later disabled.\n\n\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-63",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-63 Cross-Site Scripting (XSS)"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "LOW",
                "subIntegrityImpact": "LOW",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:L/VI:L/VA:N/SC:L/SI:L/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-79",
                  "description": "CWE-79 Improper Neutralization of Input in Web Page (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-693",
                  "description": "CWE-693 Protection Mechanism Failure",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-14T13:03:01.748Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/86496aecc"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eA new sandboxInlineFile() method is added to RestResponseComponent. When a file is served inline (download=false) and its type is SVG (svg, svgz, or image/svg+xml), the response is augmented with a Content-Security-Policy header containing the sandbox directive (which assigns an opaque origin and disables script execution, plugins, and form submission) along with restrictive default-src, style-src, img-src, and font-src directives that still permit rendering of inline styles, embedded raster images, and data: fonts. An X-Content-Type-Options: nosniff header is also set. The method is invoked from both the generic sendFile() path and the org-logo endpoint. The enable_svg_logos setting description is updated to warn administrators that SVG files remain XML documents and should be left disabled unless required.\u003c/p\u003e"
                }
              ],
              "value": "A new sandboxInlineFile() method is added to RestResponseComponent. When a file is served inline (download=false) and its type is SVG (svg, svgz, or image/svg+xml), the response is augmented with a Content-Security-Policy header containing the sandbox directive (which assigns an opaque origin and disables script execution, plugins, and form submission) along with restrictive default-src, style-src, img-src, and font-src directives that still permit rendering of inline styles, embedded raster images, and data: fonts. An X-Content-Type-Options: nosniff header is also set. The method is invoked from both the generic sendFile() path and the org-logo endpoint. The enable_svg_logos setting description is updated to warn administrators that SVG files remain XML documents and should be left disabled unless required."
            }
          ],
          "title": "MISP: Stored XSS via Inline-Served SVG Organisation Logos and Report Pictures",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The enable_svg_logos setting must be enabled (or was previously enabled and SVG files were uploaded) for the vulnerability to be exploitable; the default value is false.",
                      "The attacker requires an authenticated MISP account with sufficient privileges to upload an organisation logo or attach a report picture.",
                      "The victim must be an authenticated MISP user whose session is active in the browser when the SVG is loaded as a document.",
                      "The fix is included in MISP v2.5.46 based on the tag boundary metadata (186 commits after the fix commit up to that tag); the exact version in which the vulnerability was introduced is not specified in the patch.",
                      "CVSS UI:P assumes the primary exploitation path requires the victim to navigate to the SVG URL or have it embedded in an object/iframe; if an attacker can embed the SVG in a page the victim is already viewing without additional interaction, UI:N would apply."
                    ],
                    "commit": "86496aecc35565c121820b8e60eac9508a516eb3",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Scottish Government - National Cyber Team"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: The malicious SVG is delivered over HTTP/HTTPS to the victim\u0027s browser. AC:L: No race conditions or special network conditions are required; the SVG is already stored and served by the application. AT:N: No specific attack requirements beyond the SVG being present in the MISP instance. PR:L: The attacker needs an authenticated MISP account with permission to upload an organisation logo or attach a report picture. UI:P: The victim must navigate to the SVG URL or have it loaded in an \u003cobject\u003e/\u003ciframe\u003e context; it does not execute when rendered via \u003cimg\u003e. VC/VI/VA:N: The MISP server itself is not compromised; the impact is on the client-side session. SC:H: The attacker gains full read access to the victim\u0027s MISP session (threat intelligence, events, users, settings). SI:H: The attacker can perform write operations (create/modify/delete events, change settings) as the victim. SA:N: No availability impact on the victim\u0027s browser or the MISP instance.",
                    "draft": false,
                    "fixSummary": "A new sandboxInlineFile() method is added to RestResponseComponent. When a file is served inline (download=false) and its type is SVG (svg, svgz, or image/svg+xml), the response is augmented with a Content-Security-Policy header containing the sandbox directive (which assigns an opaque origin and disables script execution, plugins, and form submission) along with restrictive default-src, style-src, img-src, and font-src directives that still permit rendering of inline styles, embedded raster images, and data: fonts. An X-Content-Type-Options: nosniff header is also set. The method is invoked from both the generic sendFile() path and the org-logo endpoint. The enable_svg_logos setting description is updated to warn administrators that SVG files remain XML documents and should be left disabled unless required.",
                    "generatedAt": "2026-09-14T12:47:25.185745Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "e2053fbcffe3476b10ba07239b8772c7760ad987e4574c0bff75f68f8cc05c98",
                    "patchSummary": "Adds RestResponseComponent::sandboxInlineFile(CakeResponse, string) which checks the file type against a whitelist of SVG identifiers (svg, svgz, image/svg+xml, case-insensitive) and, on match, sets Content-Security-Policy: default-src \u0027none\u0027; style-src \u0027unsafe-inline\u0027; img-src \u0027self\u0027 data:; font-src data:; frame-ancestors \u0027self\u0027; sandbox and X-Content-Type-Options: nosniff. Calls this method from sendFile() when download is false, and from OrganisationsController::getOrgLogo() after the file response is built. Updates the enable_svg_logos setting description in Server.php to reflect the sandboxing behaviour and advise leaving the setting disabled. Adds a new PHPUnit test file RestResponseSandboxInlineFileTest.php with cases covering SVG extension, MIME type, svgz, case-insensitivity, and confirmation that raster types (png, jpg, jpeg, gif, webp) and null/empty types receive no headers.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "86496aecc35565c121820b8e60eac9508a516eb3",
                        "patchSha256": "e2053fbcffe3476b10ba07239b8772c7760ad987e4574c0bff75f68f8cc05c98",
                        "source": "https://github.com/MISP/MISP/commit/86496aecc.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/86496aecc.patch",
                        "subject": "fix: [security] Sandbox inline-served SVG images"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/86496aecc.patch",
                    "subject": "fix: [security] Sandbox inline-served SVG images",
                    "tagVersionBoundary": {
                      "commits_after_fix": 186,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "The core issue is that user-supplied SVG content (an XML document capable of embedding script) is served inline on the application origin without any mechanism to prevent script execution, resulting in stored XSS. The fix neutralises the script-execution capability via a sandboxing CSP."
                      },
                      {
                        "cweId": "CWE-693",
                        "rationale": "The upload-time restriction (enable_svg_logos) was the only protection, and it was insufficient because (a) it could be toggled off after files were already stored, and (b) it did not address the serve path at all. The serve path lacked its own protection mechanism (sandboxing CSP), which is what the patch adds."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20098"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-90957",
        "datePublished": "2026-09-14T13:03:01.748Z",
        "dateReserved": "2026-09-14T13:02:53.577Z",
        "dateUpdated": "2026-09-14T13:58:30.297Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-90955 (GCVE-0-2026-90955)

    Vulnerability from cvelistv5 – Published: 2026-09-14 12:37 – Updated: 2026-09-14 13:00
    VLAI
    Title
    MISP CLI Shell Audit Logs Lose User Identity and CLI Marker After First Lazy Model Load
    Summary
    Affected versions of MISP’s interactive CLI shell do not reliably preserve the identity of the impersonated MISP user across audit logging. The shell is designed to run actions as a supplied MISP user ID. However, the legacy SysLogLogable behavior stored that identity in behavior-instance state that could be overwritten when another model lazily attached the shared behavior. Consequently, subsequent CLI writes could lose the intended user attribution and be logged incorrectly. The commit also notes that CLI-originated records lacked a CLI marker, making them appear similar to ordinary web actions by that user. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-14 12:55 UTC
    CWE
    • CWE-778 - Insufficient Logging
    • CWE-223 - Omission of Security-relevant Information in Log Data
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-14 12:23
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/d13e5db33.patch 8ea0cae590f0…
    Confidence
    medium
    Commit Subject Patch SHA-256
    d13e5db33faa fix: [cli] Attribute interactive CLI shell writes stably and 8ea0cae590f0…
    Fix summary

    The fix introduces a process-wide static identity (setShellUser) on SysLogLogableBehavior that is resolved at write time rather than at setup time, so it survives lazy model loads that re-run setup() on the singleton. The behavior appends 'via CLI' to the log description for shell-originated rows, mirroring the request_type = CLI marker in the new audit engine. The CLI shell now publishes the impersonated user through both Configure::write('CurrentUserId') and SysLogLogableBehavior::setShellUser() before any write. Explicit extralog calls were added for CLI user edit, disable, and delete operations so the default audit engine records them the same way the web path does. Background jobs that publish no user continue to log as SYSTEM without a CLI marker.

    Patch summary

    In cli_common.php, __setUserContext() was replaced: instead of iterating loaded models and setting the user on each SysLogLogable behavior instance, it now calls Configure::write('CurrentUserId', $user['id']) and SysLogLogableBehavior::setShellUser($user). In SysLogLogableBehavior.php, a private static $shellUser property and setShellUser() static method were added; _saveLog() now resolves the actor via shellActor() at write time when CAKEPHP_SHELL is defined, and appends ' via CLI' to the description. setup() was refactored to use the same shellActor() helper. In cli_users.php, __logUserEdit() was added to write an extralog row for user edits and disables, and __deleteUser() now calls extralog for permanent deletions. A new test file SysLogLogableShellIdentityTest.php (395 lines) covers identity persistence across lazy model attaches, CLI marker presence/absence, SYSTEM fallback, and web-request isolation. CLI_usage.md documents the audit-trail behavior.

    CVSS rationale

    Attack vector is Local because the CLI shell requires direct access to the MISP host and the ability to run the cake console command. Attack complexity is Low because no race condition or special timing is needed; the identity loss occurs deterministically on the first lazy model load. No attack target is required. Privileges Required is High because running the CLI shell requires reading app/Config/database.php and passing a user ID, which the project documentation equates to site-admin-equivalent access. No user interaction is needed. There is no direct confidentiality, integrity, or availability impact on the MISP application itself. The secondary integrity impact is Low: the audit log data is inaccurate (wrong user attribution, missing CLI marker, missing user-management entries), which degrades forensic and compliance capability but does not corrupt application data. No secondary availability impact.

    Weakness rationale
    • CWE-778 The CLI shell's audit rows lost the impersonated user identity after the first lazy model load (reset to SYSTEM), and user-management operations (edit, disable, delete) performed via CLI produced no audit row at all in the default engine. Both are failures to record security-relevant events with sufficient detail.
    • CWE-223 Audit rows written by the CLI shell carried no marker distinguishing them from web-originated actions. In the default engine the description lacked 'via CLI'; in the new engine request_type was not set to CLI. This omission prevents an investigator from determining the true origin of an action.
    Assumptions to verify
    • The tag_version_boundary indicates the fix commit is 183 commits after tag v2.5.46, suggesting the fix landed in a version after 2.5.46; however, no explicit fixed version tag is provided, so the exact boundary is uncertain.
    • The affected version range is assumed to be all versions prior to the fix commit; the patch does not specify a minimum affected version.
    • CVSS PR:H assumes that CLI shell access is equivalent to site-admin-equivalent access, consistent with the project's own CLI_usage.md documentation stating that running cake requires reading database.php and that the shell should not be exposed to anyone who must not have site-admin-equivalent access.
    • The SI:L rating assumes the audit-log inaccuracy is a secondary integrity impact on the logging subsystem rather than a primary integrity impact on the MISP application data.
    • The patch does not include a CVE or GCVE identifier; this analysis is a draft for CNA/GNA review.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-90955",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-14T12:55:46.663079Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-14T13:00:29.069Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "CLIShell (app/Console/Command/CLIShell)",
                "SysLogLogableBehavior (app/Plugin/SysLogLogable/Model/Behavior)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Console/Command/CLIShell.php",
                "app/Console/Command/CLIShell/cli_common.php",
                "app/Console/Command/CLIShell/cli_users.php",
                "app/Plugin/SysLogLogable/Model/Behavior/SysLogLogableBehavior.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Scottish Government - National Cyber Team"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Fable 5.1"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP\u2019s interactive CLI shell do not reliably preserve the identity of the impersonated MISP user across audit logging.\u003c/p\u003e\n\u003cp\u003eThe shell is designed to run actions as a supplied MISP user ID. However, the legacy \u003ccode\u003eSysLogLogable\u003c/code\u003e behavior stored that identity in behavior-instance state that could be overwritten when another model lazily attached the shared behavior. Consequently, subsequent CLI writes could lose the intended user attribution and be logged incorrectly. The commit also notes that CLI-originated records lacked a CLI marker, making them appear similar to ordinary web actions by that user.\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP\u2019s interactive CLI shell do not reliably preserve the identity of the impersonated MISP user across audit logging.\n\n\nThe shell is designed to run actions as a supplied MISP user ID. However, the legacy SysLogLogable behavior stored that identity in behavior-instance state that could be overwritten when another model lazily attached the shared behavior. Consequently, subsequent CLI writes could lose the intended user attribution and be logged incorrectly. The commit also notes that CLI-originated records lacked a CLI marker, making them appear similar to ordinary web actions by that user.\n\n\n\nVersion affected: \u22642.5.45"
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "LOCAL",
                "baseScore": 4.6,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "HIGH",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:L/AC:L/AT:N/PR:H/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-778",
                  "description": "CWE-778 Insufficient Logging",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-223",
                  "description": "CWE-223 Omission of Security-relevant Information in Log Data",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-14T12:37:54.001Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/d13e5db33"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces a process-wide static identity (setShellUser) on SysLogLogableBehavior that is resolved at write time rather than at setup time, so it survives lazy model loads that re-run setup() on the singleton. The behavior appends \u0027via CLI\u0027 to the log description for shell-originated rows, mirroring the request_type = CLI marker in the new audit engine. The CLI shell now publishes the impersonated user through both Configure::write(\u0027CurrentUserId\u0027) and SysLogLogableBehavior::setShellUser() before any write. Explicit extralog calls were added for CLI user edit, disable, and delete operations so the default audit engine records them the same way the web path does. Background jobs that publish no user continue to log as SYSTEM without a CLI marker.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces a process-wide static identity (setShellUser) on SysLogLogableBehavior that is resolved at write time rather than at setup time, so it survives lazy model loads that re-run setup() on the singleton. The behavior appends \u0027via CLI\u0027 to the log description for shell-originated rows, mirroring the request_type = CLI marker in the new audit engine. The CLI shell now publishes the impersonated user through both Configure::write(\u0027CurrentUserId\u0027) and SysLogLogableBehavior::setShellUser() before any write. Explicit extralog calls were added for CLI user edit, disable, and delete operations so the default audit engine records them the same way the web path does. Background jobs that publish no user continue to log as SYSTEM without a CLI marker."
            }
          ],
          "title": "MISP CLI Shell Audit Logs Lose User Identity and CLI Marker After First Lazy Model Load",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The tag_version_boundary indicates the fix commit is 183 commits after tag v2.5.46, suggesting the fix landed in a version after 2.5.46; however, no explicit fixed version tag is provided, so the exact boundary is uncertain.",
                      "The affected version range is assumed to be all versions prior to the fix commit; the patch does not specify a minimum affected version.",
                      "CVSS PR:H assumes that CLI shell access is equivalent to site-admin-equivalent access, consistent with the project\u0027s own CLI_usage.md documentation stating that running cake requires reading database.php and that the shell should not be exposed to anyone who must not have site-admin-equivalent access.",
                      "The SI:L rating assumes the audit-log inaccuracy is a secondary integrity impact on the logging subsystem rather than a primary integrity impact on the MISP application data.",
                      "The patch does not include a CVE or GCVE identifier; this analysis is a draft for CNA/GNA review."
                    ],
                    "commit": "d13e5db33faa8eb27c945d6561badc24f00b2cda",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Scottish Government - National Cyber Team"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Fable 5.1"
                      }
                    ],
                    "cvssRationale": "Attack vector is Local because the CLI shell requires direct access to the MISP host and the ability to run the cake console command. Attack complexity is Low because no race condition or special timing is needed; the identity loss occurs deterministically on the first lazy model load. No attack target is required. Privileges Required is High because running the CLI shell requires reading app/Config/database.php and passing a user ID, which the project documentation equates to site-admin-equivalent access. No user interaction is needed. There is no direct confidentiality, integrity, or availability impact on the MISP application itself. The secondary integrity impact is Low: the audit log data is inaccurate (wrong user attribution, missing CLI marker, missing user-management entries), which degrades forensic and compliance capability but does not corrupt application data. No secondary availability impact.",
                    "draft": false,
                    "fixSummary": "The fix introduces a process-wide static identity (setShellUser) on SysLogLogableBehavior that is resolved at write time rather than at setup time, so it survives lazy model loads that re-run setup() on the singleton. The behavior appends \u0027via CLI\u0027 to the log description for shell-originated rows, mirroring the request_type = CLI marker in the new audit engine. The CLI shell now publishes the impersonated user through both Configure::write(\u0027CurrentUserId\u0027) and SysLogLogableBehavior::setShellUser() before any write. Explicit extralog calls were added for CLI user edit, disable, and delete operations so the default audit engine records them the same way the web path does. Background jobs that publish no user continue to log as SYSTEM without a CLI marker.",
                    "generatedAt": "2026-09-14T12:23:30.990762Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 5
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "8ea0cae590f0d9a3a2fa579b800f69fb5f5f8c9083de74df05945869dd3e91bf",
                    "patchSummary": "In cli_common.php, __setUserContext() was replaced: instead of iterating loaded models and setting the user on each SysLogLogable behavior instance, it now calls Configure::write(\u0027CurrentUserId\u0027, $user[\u0027id\u0027]) and SysLogLogableBehavior::setShellUser($user). In SysLogLogableBehavior.php, a private static $shellUser property and setShellUser() static method were added; _saveLog() now resolves the actor via shellActor() at write time when CAKEPHP_SHELL is defined, and appends \u0027 via CLI\u0027 to the description. setup() was refactored to use the same shellActor() helper. In cli_users.php, __logUserEdit() was added to write an extralog row for user edits and disables, and __deleteUser() now calls extralog for permanent deletions. A new test file SysLogLogableShellIdentityTest.php (395 lines) covers identity persistence across lazy model attaches, CLI marker presence/absence, SYSTEM fallback, and web-request isolation. CLI_usage.md documents the audit-trail behavior.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "d13e5db33faa8eb27c945d6561badc24f00b2cda",
                        "patchSha256": "8ea0cae590f0d9a3a2fa579b800f69fb5f5f8c9083de74df05945869dd3e91bf",
                        "source": "https://github.com/MISP/MISP/commit/d13e5db33.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/d13e5db33.patch",
                        "subject": "fix: [cli] Attribute interactive CLI shell writes stably and"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/d13e5db33.patch",
                    "subject": "fix: [cli] Attribute interactive CLI shell writes stably and",
                    "tagVersionBoundary": {
                      "commits_after_fix": 183,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-778",
                        "rationale": "The CLI shell\u0027s audit rows lost the impersonated user identity after the first lazy model load (reset to SYSTEM), and user-management operations (edit, disable, delete) performed via CLI produced no audit row at all in the default engine. Both are failures to record security-relevant events with sufficient detail."
                      },
                      {
                        "cweId": "CWE-223",
                        "rationale": "Audit rows written by the CLI shell carried no marker distinguishing them from web-originated actions. In the default engine the description lacked \u0027via CLI\u0027; in the new engine request_type was not set to CLI. This omission prevents an investigator from determining the true origin of an action."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20197"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-90955",
        "datePublished": "2026-09-14T12:37:54.001Z",
        "dateReserved": "2026-09-14T12:37:52.348Z",
        "dateUpdated": "2026-09-14T13:00:29.069Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-90895 (GCVE-0-2026-90895)

    Vulnerability from cvelistv5 – Published: 2026-09-14 09:40 – Updated: 2026-09-14 10:26
    VLAI
    Title
    MISP Interactive CLI Shell: Authorization Bypass, Credential Exposure, and Terminal Injection
    Summary
    Affected versions of MISP’s interactive CLI shell implement access control independently from the normal web application, causing several authorization inconsistencies. The patch shows that CLI access could differ from the web application in multiple security-sensitive areas:  - feed listings did not enforce the same lookup_visible restrictions for non-host-organisation users;  - feed detail access did not enforce the same host-organisation/site-admin authorization as FeedsController::view();  - Feed.headers, which can contain HTTP authorization credentials, could be exposed instead of being hidden or masked;  - server synchronization authkey values were not explicitly hidden from CLI detail output;  - sharing-group detail access did not consistently use SharingGroup::checkIfAuthorised();  - the use command could establish context for a record without first proving that the user was authorized to view that record The commit additionally hardens pagination and terminal rendering, including neutralization of terminal control sequences found in database-backed values. Those are important hardening changes, but the main vulnerability is the CLI authorization/data-disclosure mismatch. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-14 10:24 UTC
    CWE
    • CWE-862 - Missing Authorization
    • CWE-200 - Exposure of Sensitive Information to an Unauthorized Actor
    • CWE-150 - Improper Neutralization of Escape, Quote, or Control Sequences
    • CWE-522 - Insufficiently Protected Credentials
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-14 09:16
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/cd9f548ed.patch 1993ed3ac039…
    Confidence
    high
    Commit Subject Patch SHA-256
    cd9f548ed808 fix: [cli] Route interactive CLI shell authorization through 1993ed3ac039…
    Fix summary

    The fix replaces the shell's hand-rolled authorization logic with the same model-level accessors used by the web interface (Event::fetchSimpleEvent, MispAttribute::fetchAttributes, MispObject::fetchObjects, SharingGroup::checkIfAuthorised, Organisation::canSee), ensuring read and write operations enforce identical ACL rules. Credential columns are excluded at the query level via a hiddenFields mechanism so they are never fetched from the database. The inline detail editor now delegates to the entity-specific edit handlers, which enforce per-record write authorization. All terminal output passes through a sanitiser that neutralises C0/C1 control characters, ANSI escape sequences, and Unicode bidirectional overrides. Pagination is clamped to a safe range (1-1000) to prevent unbounded result sets.

    Patch summary

    Replaced hand-rolled ACL conditions in attribute, object, feed, sharing-group, and organisation queries with calls to the model's authorized fetch methods (fetchAttributes, fetchObjects, fetchSimpleEvent, checkIfAuthorised, canSee). Added hiddenFields configuration for server (authkey), feed (headers), and user (password, authkey, totp, hotp_counter, external_auth_key) so credential columns are excluded from SQL SELECT. Added __detailFields() to build the field list excluding hidden columns. Rewrote __editDetailField() to delegate to entity-specific edit handlers with a $fields parameter, eliminating the unguarded direct save(). Added __canWriteEntity() and __denyWrite() as a unified write-authorization gate for add/edit/delete. Added __term() sanitiser applied via overridden out()/err() methods and __termRows() for list data, neutralising C0/C1 controls, DEL, and Unicode bidi characters. Added __normalisePagination() to clamp limit to 1-1000 and page to >=1. Added __warnUnsupportedFilters() to report ignored

    CVSS rationale

    AV:L: The CLI shell is a local console command requiring SSH or local shell access to the MISP server. AC:L: No race conditions or special timing are needed; the unguarded write path and missing ACL checks are deterministic. AT:N: The authorization bypass and credential exposure require no target interaction. PR:L: Any authenticated MISP user with basic permissions (perm_add) can exploit the write bypass and read credential columns. UI:N: The core authorization bypass and data exposure do not require the victim to perform any action. VC:H: Sensitive credentials (feed HTTP auth, server sync key, user passwords/TOTP) are exposed. VI:H: An attacker can modify events, attributes, and objects they should not be able to change. VA:H: An attacker can read records (feeds, organisations, hidden tags) outside their authorized scope. SC/SI/SA:N: Impact is confined to the local MISP instance and its data.

    Weakness rationale
    • CWE-862 The primary vulnerability: the inline detail editor saved records without enforcing per-record write authorization, and list/detail queries used incomplete ACL conditions that did not match the web interface's access rules. A user who could read a record could modify it, and could read records (feeds, organisations, tags) the web would not expose.
    • CWE-200 Credential columns (Feed.headers, Server.authkey, User.password/authkey/totp/hotp_counter/external_auth_key) were fetched from the database and exposed in CLI output to users who should not have access, and organisation/tag visibility settings were not enforced.
    • CWE-150 Database values containing ANSI escape sequences, C0/C1 control characters, or Unicode bidirectional override characters were printed verbatim to the terminal, allowing output forgery, window retitling, and visual manipulation of displayed indicators.
    • CWE-400 A limit value of zero, negative, or non-numeric caused the ORM to omit the SQL LIMIT clause, returning the entire table into memory and enabling denial of service.
    Assumptions to verify
    • The CLI shell is accessible to any authenticated MISP user with local/SSH access to the server; no additional authentication layer is assumed.
    • The affected version range is not precisely bounded; the fix commit is 184 commits after tag v2.5.46, but the exact release version containing the fix is not stated in the patch metadata.
    • CVSS assumes the attacker already possesses a low-privilege MISP account and local shell access; remote exploitation without local access is not assessed.
    • The terminal injection impact (VC:H) is assessed on the basis that an analyst's terminal session is the primary trust boundary for indicator review; in automated/piped contexts the impact may be lower.
    • The unguarded write path is assessed as allowing modification of any readable record, not limited to specific entity types, based on the patch comment stating 'a user rewrite any record they could read'.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 high 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-90895",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "total"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-14T10:24:27.267671Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-14T10:26:12.372Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Console/Command/CLIShell/"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Console/Command/CLIShell.php",
                "app/Console/Command/CLIShell/cli_attributes.php",
                "app/Console/Command/CLIShell/cli_common.php",
                "app/Console/Command/CLIShell/cli_events.php",
                "app/Console/Command/CLIShell/cli_objects.php",
                "app/Console/Command/CLIShell/cli_organisations.php",
                "app/Console/Command/CLIShell/cli_roles.php",
                "app/Console/Command/CLIShell/cli_tags.php",
                "app/Console/Command/CLIShell/cli_users.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Scottish Government - National Cyber Team"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 4.8"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP\u2019s interactive CLI shell implement access control independently from the normal web application, causing several authorization inconsistencies.\u003c/p\u003e\n\u003cp\u003eThe patch shows that CLI access could differ from the web application in multiple security-sensitive areas:\u003c/p\u003e\u2003- feed listings did not enforce the same \u003ccode\u003elookup_visible\u003c/code\u003e restrictions for non-host-organisation users;\u003cbr\u003e\u2003- feed detail access did not enforce the same host-organisation/site-admin authorization as \u003ccode\u003eFeedsController::view()\u003c/code\u003e;\u003cbr\u003e\u003ccode\u003e\u2003- Feed.headers\u003c/code\u003e, which can contain HTTP authorization credentials, could be exposed instead of being hidden or masked;\u003cbr\u003e\u2003- server synchronization \u003ccode\u003eauthkey\u003c/code\u003e values were not explicitly hidden from CLI detail output;\u003cbr\u003e\u2003- sharing-group detail access did not consistently use \u003ccode\u003eSharingGroup::checkIfAuthorised()\u003c/code\u003e;\u003cbr\u003e\u2003- the \u003ccode\u003euse\u003c/code\u003e command could establish context for a record without first proving that the user was authorized to view that record\u003cul\u003e\n\u003c/ul\u003e\u003cp\u003eThe commit additionally hardens pagination and terminal rendering, including neutralization of terminal control sequences found in database-backed values. Those are important hardening changes, but the main vulnerability is the CLI authorization/data-disclosure mismatch.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003c/p\u003e"
                }
              ],
              "value": "Affected versions of MISP\u2019s interactive CLI shell implement access control independently from the normal web application, causing several authorization inconsistencies.\n\n\nThe patch shows that CLI access could differ from the web application in multiple security-sensitive areas:\n\n\u2003- feed listings did not enforce the same lookup_visible restrictions for non-host-organisation users;\n\u2003- feed detail access did not enforce the same host-organisation/site-admin authorization as FeedsController::view();\n\u2003- Feed.headers, which can contain HTTP authorization credentials, could be exposed instead of being hidden or masked;\n\u2003- server synchronization authkey values were not explicitly hidden from CLI detail output;\n\u2003- sharing-group detail access did not consistently use SharingGroup::checkIfAuthorised();\n\u2003- the use command could establish context for a record without first proving that the user was authorized to view that record\n\n\nThe commit additionally hardens pagination and terminal rendering, including neutralization of terminal control sequences found in database-backed values. Those are important hardening changes, but the main vulnerability is the CLI authorization/data-disclosure mismatch.\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Accessing Functionality Not Properly Constrained by ACLs"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "LOCAL",
                "baseScore": 8.4,
                "baseSeverity": "HIGH",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "HIGH",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-862",
                  "description": "CWE-862 Missing Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-200",
                  "description": "CWE-200 Exposure of Sensitive Information to an Unauthorized Actor",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-150",
                  "description": "CWE-150 Improper Neutralization of Escape, Quote, or Control Sequences",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-522",
                  "description": "CWE-522 Insufficiently Protected Credentials",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-14T09:40:55.800Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/cd9f548ed"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix replaces the shell\u0027s hand-rolled authorization logic with the same model-level accessors used by the web interface (Event::fetchSimpleEvent, MispAttribute::fetchAttributes, MispObject::fetchObjects, SharingGroup::checkIfAuthorised, Organisation::canSee), ensuring read and write operations enforce identical ACL rules. Credential columns are excluded at the query level via a hiddenFields mechanism so they are never fetched from the database. The inline detail editor now delegates to the entity-specific edit handlers, which enforce per-record write authorization. All terminal output passes through a sanitiser that neutralises C0/C1 control characters, ANSI escape sequences, and Unicode bidirectional overrides. Pagination is clamped to a safe range (1-1000) to prevent unbounded result sets.\u003c/p\u003e"
                }
              ],
              "value": "The fix replaces the shell\u0027s hand-rolled authorization logic with the same model-level accessors used by the web interface (Event::fetchSimpleEvent, MispAttribute::fetchAttributes, MispObject::fetchObjects, SharingGroup::checkIfAuthorised, Organisation::canSee), ensuring read and write operations enforce identical ACL rules. Credential columns are excluded at the query level via a hiddenFields mechanism so they are never fetched from the database. The inline detail editor now delegates to the entity-specific edit handlers, which enforce per-record write authorization. All terminal output passes through a sanitiser that neutralises C0/C1 control characters, ANSI escape sequences, and Unicode bidirectional overrides. Pagination is clamped to a safe range (1-1000) to prevent unbounded result sets."
            }
          ],
          "title": "MISP Interactive CLI Shell: Authorization Bypass, Credential Exposure, and Terminal Injection",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The CLI shell is accessible to any authenticated MISP user with local/SSH access to the server; no additional authentication layer is assumed.",
                      "The affected version range is not precisely bounded; the fix commit is 184 commits after tag v2.5.46, but the exact release version containing the fix is not stated in the patch metadata.",
                      "CVSS assumes the attacker already possesses a low-privilege MISP account and local shell access; remote exploitation without local access is not assessed.",
                      "The terminal injection impact (VC:H) is assessed on the basis that an analyst\u0027s terminal session is the primary trust boundary for indicator review; in automated/piped contexts the impact may be lower.",
                      "The unguarded write path is assessed as allowing modification of any readable record, not limited to specific entity types, based on the patch comment stating \u0027a user rewrite any record they could read\u0027."
                    ],
                    "commit": "cd9f548ed808f89e4e018fad9a81a628098d73fb",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Scottish Government - National Cyber Team"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 4.8"
                      }
                    ],
                    "cvssRationale": "AV:L: The CLI shell is a local console command requiring SSH or local shell access to the MISP server. AC:L: No race conditions or special timing are needed; the unguarded write path and missing ACL checks are deterministic. AT:N: The authorization bypass and credential exposure require no target interaction. PR:L: Any authenticated MISP user with basic permissions (perm_add) can exploit the write bypass and read credential columns. UI:N: The core authorization bypass and data exposure do not require the victim to perform any action. VC:H: Sensitive credentials (feed HTTP auth, server sync key, user passwords/TOTP) are exposed. VI:H: An attacker can modify events, attributes, and objects they should not be able to change. VA:H: An attacker can read records (feeds, organisations, hidden tags) outside their authorized scope. SC/SI/SA:N: Impact is confined to the local MISP instance and its data.",
                    "draft": false,
                    "fixSummary": "The fix replaces the shell\u0027s hand-rolled authorization logic with the same model-level accessors used by the web interface (Event::fetchSimpleEvent, MispAttribute::fetchAttributes, MispObject::fetchObjects, SharingGroup::checkIfAuthorised, Organisation::canSee), ensuring read and write operations enforce identical ACL rules. Credential columns are excluded at the query level via a hiddenFields mechanism so they are never fetched from the database. The inline detail editor now delegates to the entity-specific edit handlers, which enforce per-record write authorization. All terminal output passes through a sanitiser that neutralises C0/C1 control characters, ANSI escape sequences, and Unicode bidirectional overrides. Pagination is clamped to a safe range (1-1000) to prevent unbounded result sets.",
                    "generatedAt": "2026-09-14T09:16:49.402134Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 5,
                          "confidence": "high",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "1993ed3ac039d8fca56d636755584952f47c43046158fdd08278e2e308f1bad1",
                    "patchSummary": "Replaced hand-rolled ACL conditions in attribute, object, feed, sharing-group, and organisation queries with calls to the model\u0027s authorized fetch methods (fetchAttributes, fetchObjects, fetchSimpleEvent, checkIfAuthorised, canSee). Added hiddenFields configuration for server (authkey), feed (headers), and user (password, authkey, totp, hotp_counter, external_auth_key) so credential columns are excluded from SQL SELECT. Added __detailFields() to build the field list excluding hidden columns. Rewrote __editDetailField() to delegate to entity-specific edit handlers with a $fields parameter, eliminating the unguarded direct save(). Added __canWriteEntity() and __denyWrite() as a unified write-authorization gate for add/edit/delete. Added __term() sanitiser applied via overridden out()/err() methods and __termRows() for list data, neutralising C0/C1 controls, DEL, and Unicode bidi characters. Added __normalisePagination() to clamp limit to 1-1000 and page to \u003e=1. Added __warnUnsupportedFilters() to report ignored",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "cd9f548ed808f89e4e018fad9a81a628098d73fb",
                        "patchSha256": "1993ed3ac039d8fca56d636755584952f47c43046158fdd08278e2e308f1bad1",
                        "source": "https://github.com/MISP/MISP/commit/cd9f548ed.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/cd9f548ed.patch",
                        "subject": "fix: [cli] Route interactive CLI shell authorization through"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/cd9f548ed.patch",
                    "subject": "fix: [cli] Route interactive CLI shell authorization through",
                    "tagVersionBoundary": {
                      "commits_after_fix": 184,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-862",
                        "rationale": "The primary vulnerability: the inline detail editor saved records without enforcing per-record write authorization, and list/detail queries used incomplete ACL conditions that did not match the web interface\u0027s access rules. A user who could read a record could modify it, and could read records (feeds, organisations, tags) the web would not expose."
                      },
                      {
                        "cweId": "CWE-200",
                        "rationale": "Credential columns (Feed.headers, Server.authkey, User.password/authkey/totp/hotp_counter/external_auth_key) were fetched from the database and exposed in CLI output to users who should not have access, and organisation/tag visibility settings were not enforced."
                      },
                      {
                        "cweId": "CWE-150",
                        "rationale": "Database values containing ANSI escape sequences, C0/C1 control characters, or Unicode bidirectional override characters were printed verbatim to the terminal, allowing output forgery, window retitling, and visual manipulation of displayed indicators."
                      },
                      {
                        "cweId": "CWE-400",
                        "rationale": "A limit value of zero, negative, or non-numeric caused the ORM to omit the SQL LIMIT clause, returning the entire table into memory and enabling denial of service."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20058"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-90895",
        "datePublished": "2026-09-14T09:40:55.800Z",
        "dateReserved": "2026-09-14T09:40:52.456Z",
        "dateUpdated": "2026-09-14T10:26:12.372Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-90893 (GCVE-0-2026-90893)

    Vulnerability from cvelistv5 – Published: 2026-09-14 09:12 – Updated: 2026-09-14 10:28
    VLAI
    Title
    MISP UserSettingsController CSRF Protection Bypass on setTheme, setHomePage, and eventIndexColumnToggle Endpoints
    Summary
    MISP contains a Cross-Site Request Forgery (CSRF) vulnerability in the UserSettingsController. The actions setTheme, setHomePage, and eventIndexColumnToggle were explicitly added to the Security component's unlockedActions list, which disabled all CSRF validation (both token and field-hash checks) for those endpoints. Because these endpoints accept POST requests and modify per-user application state (theme selection, default homepage URL, and event index column visibility), an attacker who can induce a logged-in MISP user to load a malicious page (e.g., via a crafted link, embedded image, or auto-submitting form) can forge requests that alter the victim's settings without their knowledge or consent. The most impactful action is setHomePage, which allows an attacker to redirect the victim's default landing page to an arbitrary attacker-controlled URL, potentially facilitating phishing or further social engineering. The setTheme action can alter the user's visual theme, and eventIndexColumnToggle can change which columns are displayed in the event index view. No authentication bypass is involved; the victim must already be authenticated to MISP. The vulnerability was reported by the Scottish Government National Cyber Team. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-14 10:26 UTC
    CWE
    • CWE-352 - Cross-Site Request Forgery (CSRF)
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Review: review GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-14 08:59
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/979337b18.patch 287bea96c3ef…
    Confidence
    medium
    Commit Subject Patch SHA-256
    979337b182ae fix: [security] Put the user-settings endpoints back under 287bea96c3ef…
    Fix summary

    The fix removes the three affected actions from the Security component's unlockedActions list (which had disabled all CSRF checks) and instead registers them under a header-only CSRF token validation mechanism (_csrfTokenHeaderOnly). This requires the X-CSRF-Token header to be present and valid on each request while still permitting the AJAX-style calls that lack traditional form fields. Client-side JavaScript and view templates are updated to include the X-CSRF-Token header (sourced from window.csrfToken) in all AJAX and fetch calls to these endpoints, ensuring legitimate same-origin requests continue to function while cross-origin forged requests are rejected.

    Patch summary

    In UserSettingsController::beforeFilter(), the three lines adding eventIndexColumnToggle, setTheme, and setHomePage to $this->Security->unlockedActions[] are removed and replaced with a single $this->_csrfTokenHeaderOnly() call covering all four affected actions (including setEventTemplateUserFormMode). In global_menu.ctp (default and UiBeta themes), navbar.ctp (Overmind theme), and misp.js, the jQuery $.ajax() and fetch() calls that invoke setTheme, setHomePage, and eventIndexColumnToggle are updated to include an X-CSRF-Token header populated from window.csrfToken. The Overmind navbar fetch calls also gain credentials: 'same-origin' to ensure cookies are sent with the request.

    CVSS rationale

    AV:N: The attack is delivered over the network via a malicious web page. AC:L: CSRF exploitation is straightforward with no race conditions or special timing. AT:N: No special target state is required beyond normal authentication. PR:N: The attacker requires no privileges on the MISP instance. UI:P: The victim must passively load the attacker's page while authenticated (e.g., click a link or visit a site). VC:N: No confidential data is exposed. VI:L: User-controlled settings (theme, homepage, column visibility) are modified, representing a low integrity impact. VA:N: No availability impact. SC/SI/SA:N: No impact on adjacent or downstream systems.

    Weakness rationale
    • CWE-352 The endpoints were explicitly excluded from CSRF validation via the Security component's unlockedActions mechanism, allowing a cross-origin page to submit state-changing POST requests on behalf of an authenticated user without a valid CSRF token.
    Assumptions to verify
    • The MISP instance is assumed to be deployed in a standard configuration where the Security component's CSRF protection is enabled by default; if an operator had globally disabled CSRF checks, this specific vulnerability would be subsumed by that broader misconfiguration.
    • The setHomePage endpoint is assumed to accept an arbitrary URL path as its argument based on the patch comment stating 'a single path the user picks anyway and which setSetting() validates server-side'; the exact validation logic was not visible in the patch.
    • Exact affected version range could not be determined from the patch alone; the fix commit is 225 commits after the v2.5.46 tag, suggesting the vulnerability existed in releases around and after v2.5.46, but precise boundaries are unspecified.
    • CVSS UI:P assumes the victim must load an attacker-controlled page; if MISP is deployed behind a strict CSP that blocks cross-origin form submission, exploitability may be reduced, but this is not confirmed by the patch.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 medium 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-90893",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-14T10:26:31.868700Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-14T10:28:09.993Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "UserSettingsController",
                "app/Controller/UserSettingsController.php"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/UserSettingsController.php",
                "app/View/Elements/global_menu.ctp",
                "app/View/Themed/Overmind/Elements/navbar.ctp",
                "app/View/Themed/UiBeta/Elements/global_menu.ctp",
                "app/webroot/js/misp.js"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Scottish Government - National Cyber Team"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP contains a Cross-Site Request Forgery (CSRF) vulnerability in the UserSettingsController. The actions setTheme, setHomePage, and eventIndexColumnToggle were explicitly added to the Security component\u0027s unlockedActions list, which disabled all CSRF validation (both token and field-hash checks) for those endpoints. Because these endpoints accept POST requests and modify per-user application state (theme selection, default homepage URL, and event index column visibility), an attacker who can induce a logged-in MISP user to load a malicious page (e.g., via a crafted link, embedded image, or auto-submitting form) can forge requests that alter the victim\u0027s settings without their knowledge or consent. The most impactful action is setHomePage, which allows an attacker to redirect the victim\u0027s default landing page to an arbitrary attacker-controlled URL, potentially facilitating phishing or further social engineering. The setTheme action can alter the user\u0027s visual theme, and eventIndexColumnToggle can change which columns are displayed in the event index view. No authentication bypass is involved; the victim must already be authenticated to MISP. The vulnerability was reported by the Scottish Government National Cyber Team.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e"
                }
              ],
              "value": "MISP contains a Cross-Site Request Forgery (CSRF) vulnerability in the UserSettingsController. The actions setTheme, setHomePage, and eventIndexColumnToggle were explicitly added to the Security component\u0027s unlockedActions list, which disabled all CSRF validation (both token and field-hash checks) for those endpoints. Because these endpoints accept POST requests and modify per-user application state (theme selection, default homepage URL, and event index column visibility), an attacker who can induce a logged-in MISP user to load a malicious page (e.g., via a crafted link, embedded image, or auto-submitting form) can forge requests that alter the victim\u0027s settings without their knowledge or consent. The most impactful action is setHomePage, which allows an attacker to redirect the victim\u0027s default landing page to an arbitrary attacker-controlled URL, potentially facilitating phishing or further social engineering. The setTheme action can alter the user\u0027s visual theme, and eventIndexColumnToggle can change which columns are displayed in the event index view. No authentication bypass is involved; the victim must already be authenticated to MISP. The vulnerability was reported by the Scottish Government National Cyber Team.\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-62",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-62 Cross Site Request Forgery"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "ACTIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-352",
                  "description": "CWE-352 Cross-Site Request Forgery (CSRF)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-14T09:12:03.863Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/979337b18"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix removes the three affected actions from the Security component\u0027s unlockedActions list (which had disabled all CSRF checks) and instead registers them under a header-only CSRF token validation mechanism (_csrfTokenHeaderOnly). This requires the X-CSRF-Token header to be present and valid on each request while still permitting the AJAX-style calls that lack traditional form fields. Client-side JavaScript and view templates are updated to include the X-CSRF-Token header (sourced from window.csrfToken) in all AJAX and fetch calls to these endpoints, ensuring legitimate same-origin requests continue to function while cross-origin forged requests are rejected.\u003c/p\u003e"
                }
              ],
              "value": "The fix removes the three affected actions from the Security component\u0027s unlockedActions list (which had disabled all CSRF checks) and instead registers them under a header-only CSRF token validation mechanism (_csrfTokenHeaderOnly). This requires the X-CSRF-Token header to be present and valid on each request while still permitting the AJAX-style calls that lack traditional form fields. Client-side JavaScript and view templates are updated to include the X-CSRF-Token header (sourced from window.csrfToken) in all AJAX and fetch calls to these endpoints, ensuring legitimate same-origin requests continue to function while cross-origin forged requests are rejected."
            }
          ],
          "title": "MISP UserSettingsController CSRF Protection Bypass on setTheme, setHomePage, and eventIndexColumnToggle Endpoints",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "review",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The MISP instance is assumed to be deployed in a standard configuration where the Security component\u0027s CSRF protection is enabled by default; if an operator had globally disabled CSRF checks, this specific vulnerability would be subsumed by that broader misconfiguration.",
                      "The setHomePage endpoint is assumed to accept an arbitrary URL path as its argument based on the patch comment stating \u0027a single path the user picks anyway and which setSetting() validates server-side\u0027; the exact validation logic was not visible in the patch.",
                      "Exact affected version range could not be determined from the patch alone; the fix commit is 225 commits after the v2.5.46 tag, suggesting the vulnerability existed in releases around and after v2.5.46, but precise boundaries are unspecified.",
                      "CVSS UI:P assumes the victim must load an attacker-controlled page; if MISP is deployed behind a strict CSP that blocks cross-origin form submission, exploitability may be reduced, but this is not confirmed by the patch."
                    ],
                    "commit": "979337b182ae666fe1387342e20e061613657e83",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Scottish Government - National Cyber Team"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      },
                      {
                        "lang": "en",
                        "type": "tool",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: The attack is delivered over the network via a malicious web page. AC:L: CSRF exploitation is straightforward with no race conditions or special timing. AT:N: No special target state is required beyond normal authentication. PR:N: The attacker requires no privileges on the MISP instance. UI:P: The victim must passively load the attacker\u0027s page while authenticated (e.g., click a link or visit a site). VC:N: No confidential data is exposed. VI:L: User-controlled settings (theme, homepage, column visibility) are modified, representing a low integrity impact. VA:N: No availability impact. SC/SI/SA:N: No impact on adjacent or downstream systems.",
                    "draft": false,
                    "fixSummary": "The fix removes the three affected actions from the Security component\u0027s unlockedActions list (which had disabled all CSRF checks) and instead registers them under a header-only CSRF token validation mechanism (_csrfTokenHeaderOnly). This requires the X-CSRF-Token header to be present and valid on each request while still permitting the AJAX-style calls that lack traditional form fields. Client-side JavaScript and view templates are updated to include the X-CSRF-Token header (sourced from window.csrfToken) in all AJAX and fetch calls to these endpoints, ensuring legitimate same-origin requests continue to function while cross-origin forged requests are rejected.",
                    "generatedAt": "2026-09-14T08:59:52.615890Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "287bea96c3ef414dbe0e17b36a12cd0aed2f27c7b28ccc9867338fabf9561a0f",
                    "patchSummary": "In UserSettingsController::beforeFilter(), the three lines adding eventIndexColumnToggle, setTheme, and setHomePage to $this-\u003eSecurity-\u003eunlockedActions[] are removed and replaced with a single $this-\u003e_csrfTokenHeaderOnly() call covering all four affected actions (including setEventTemplateUserFormMode). In global_menu.ctp (default and UiBeta themes), navbar.ctp (Overmind theme), and misp.js, the jQuery $.ajax() and fetch() calls that invoke setTheme, setHomePage, and eventIndexColumnToggle are updated to include an X-CSRF-Token header populated from window.csrfToken. The Overmind navbar fetch calls also gain credentials: \u0027same-origin\u0027 to ensure cookies are sent with the request.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "979337b182ae666fe1387342e20e061613657e83",
                        "patchSha256": "287bea96c3ef414dbe0e17b36a12cd0aed2f27c7b28ccc9867338fabf9561a0f",
                        "source": "https://github.com/MISP/MISP/commit/979337b18.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/979337b18.patch",
                        "subject": "fix: [security] Put the user-settings endpoints back under"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/979337b18.patch",
                    "subject": "fix: [security] Put the user-settings endpoints back under",
                    "tagVersionBoundary": {
                      "commits_after_fix": 225,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-352",
                        "rationale": "The endpoints were explicitly excluded from CSRF validation via the Security component\u0027s unlockedActions mechanism, allowing a cross-origin page to submit state-changing POST requests on behalf of an authenticated user without a valid CSRF token."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20226"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-90893",
        "datePublished": "2026-09-14T09:12:03.863Z",
        "dateReserved": "2026-09-14T09:12:01.736Z",
        "dateUpdated": "2026-09-14T10:28:09.993Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-88921 (GCVE-0-2026-88921)

    Vulnerability from cvelistv5 – Published: 2026-09-10 13:41 – Updated: 2026-09-10 17:02
    VLAI
    Title
    MISP: Unescaped HTML Injection in PDF Report Element Rendering
    Summary
    MISP contains an HTML injection vulnerability in the MISPElementHTMLFormatterTool component, which is responsible for rendering MISP element references (attributes, objects, and tags) into inline HTML during PDF report export via the convert_markdown_to_pdf module. The attribute(), objectAttribute(), object(), and tag() methods interpolated user-controlled fields (attribute type, attribute value, object name, object relation, tag name, tag colour, and tag text colour) directly into HTML templates without applying HTML entity encoding. An authenticated user with the ability to create or modify MISP attributes, objects, or tags could embed arbitrary HTML markup in these fields. When a report containing such elements was exported to PDF, the unescaped content was rendered as live HTML rather than inert text, potentially injecting script tags, breaking the document structure, or altering the visual content of the exported report. Additionally, the attribute() method contained a template with hardcoded sample values ("domain-ip" and "google.com") instead of format placeholders, meaning every plain attribute reference in a PDF displayed the sample text rather than the actual indicator value, constituting a data-integrity defect in the exported document. The vulnerability requires an authenticated actor with write access to MISP elements and a subsequent PDF export of a report referencing those elements. The security impact is primarily to the integrity of the exported document and, depending on the HTML-to-PDF rendering engine, potential execution of injected markup during the conversion step. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-10 17:01 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    • CWE-116 - Improper Encoding or Escaping of Output
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: unspecified , < 2.5.46 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Not human-reviewed GNA-1

    Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.

    ai-computer-assisted:llm-generatedai-computer-assisted:classification
    Model Source Identifier
    qwen3.8:27b ollama qwen3.8:27b
    Patch provenance GCVE-BCP-05-X-02
    Generator
    patch2vuln.py on 2026-09-10 13:06
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/949744a4b.patch 300efd40407c…
    Confidence
    medium
    Commit Subject Patch SHA-256
    949744a4b6de fix: [event-report] Render and escape MISP element references 300efd40407c…
    Fix summary

    The fix applies HTML entity encoding (via the h() helper, which wraps htmlspecialchars with ENT_QUOTES and UTF-8) to every user-controlled value interpolated into the HTML templates in the MISPElementHTMLFormatterTool. This ensures that attribute types, values, object names, relations, tag names, and colour values are treated as inert data and cannot inject markup or break out of the surrounding span/style context. The hardcoded sample values in the attribute() template are replaced with proper %s format placeholders so that the actual element data is rendered. Comprehensive unit tests are added to verify both correct rendering and escaping of hostile inputs across all four formatter methods.

    Patch summary

    In MISPElementHTMLFormatterTool.php: (1) the attribute() template's hardcoded 'domain-ip' and 'google.com' strings are replaced with %s placeholders; (2) all sprintf arguments in attribute(), objectAttribute(), object(), and tag() are wrapped with h() to HTML-encode the interpolated values (attribute type, value, object name, object_relation, tag name, colour, text_colour). A new test file MISPElementHTMLFormatterToolTest.php is added with 123 lines of PHPUnit tests covering: correct rendering of real values, HTML escaping of hostile payloads (script tags, span-breaking sequences, CSS attribute breakout via quotes), foreign-tag detection, and placeholder behaviour for objects without attributes.

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: The attacker only needs to create or modify a MISP element with a crafted value; no race conditions or special timing are required. AT:N: No manipulation of the attack target is needed. PR:L: The attacker requires an authenticated account with permission to create or modify MISP attributes, objects, or tags. UI:N: The victim performs a normal, expected action (exporting a report to PDF); no unusual interaction is required to trigger the rendering of the injected content. VC:N: The primary impact is on the output document, not on reading confidential system data. VI:L: The integrity of the exported PDF is compromised by injected markup or incorrect data (hardcoded sample values). VA:N: No denial-of-service impact is evident. SC:N: No confirmed cross-system confidentiality impact. SI:L: The integrity of the exported document (a secondary asset) is affected; injected content could mislead readers or, if the PDF renderer executes scripts, affect the rendering environment. SA:N: No security-relevant impact on other systems is established by the evidence.

    Weakness rationale
    • CWE-79 User-controlled MISP element values (attribute values, object names, tag names, tag colours) are interpolated into HTML output without encoding, allowing injection of arbitrary HTML markup into the rendered document. Although the output target is a PDF rather than a browser page, the mechanism is identical to stored XSS: untrusted data is embedded in an HTML context without neutralization.
    • CWE-116 The root cause is the absence of output encoding (htmlspecialchars) on all interpolated values in the HTML template strings. The tag() method additionally failed to escape colour values that are placed inside a CSS style attribute, enabling attribute-breakout injection.
    Assumptions to verify
    • The HTML-to-PDF rendering pipeline (convert_markdown_to_pdf) is assumed to render the generated HTML in a context where injected markup could be interpreted (e.g., headless browser or HTML-aware converter); if a purely static renderer is used, the impact is limited to document corruption.
    • The attacker is assumed to have an authenticated MISP account with write access to attributes, objects, or tags; the specific role or permission level required is not stated in the patch.
    • The exact fixed version is not specified in the patch metadata; the tag boundary (v2.5.46, 187 commits before the fix) indicates the fix post-dates v2.5.46 but the precise release is unknown.
    • UI:N is assigned on the assumption that triggering the PDF export is a normal, expected user action and does not constitute a special interaction requirement beyond routine use of the application.
    Model comparison

    Selected qwen3.8:27b by deterministic-consensus-v1
    The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.

    Model Score Agreement Confidence Assumptions
    qwen3.8:27b 6 9 medium 4
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-88921",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-10T17:01:58.906810Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-10T17:02:58.068Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Lib/Tools/MISPElementHTMLFormatterTool.php",
                "EventReport PDF export (convert_markdown_to_pdf)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Lib/Tools/MISPElementHTMLFormatterTool.php"
              ],
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThan": "2.5.46",
                  "status": "affected",
                  "version": "unspecified",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "reporter",
              "value": "Scottish Government - National Cyber Team"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP contains an HTML injection vulnerability in the MISPElementHTMLFormatterTool component, which is responsible for rendering MISP element references (attributes, objects, and tags) into inline HTML during PDF report export via the convert_markdown_to_pdf module. The attribute(), objectAttribute(), object(), and tag() methods interpolated user-controlled fields (attribute type, attribute value, object name, object relation, tag name, tag colour, and tag text colour) directly into HTML templates without applying HTML entity encoding. An authenticated user with the ability to create or modify MISP attributes, objects, or tags could embed arbitrary HTML markup in these fields. When a report containing such elements was exported to PDF, the unescaped content was rendered as live HTML rather than inert text, potentially injecting script tags, breaking the document structure, or altering the visual content of the exported report. Additionally, the attribute() method contained a template with hardcoded sample values (\"domain-ip\" and \"google.com\") instead of format placeholders, meaning every plain attribute reference in a PDF displayed the sample text rather than the actual indicator value, constituting a data-integrity defect in the exported document. The vulnerability requires an authenticated actor with write access to MISP elements and a subsequent PDF export of a report referencing those elements. The security impact is primarily to the integrity of the exported document and, depending on the HTML-to-PDF rendering engine, potential execution of injected markup during the conversion step.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e"
                }
              ],
              "value": "MISP contains an HTML injection vulnerability in the MISPElementHTMLFormatterTool component, which is responsible for rendering MISP element references (attributes, objects, and tags) into inline HTML during PDF report export via the convert_markdown_to_pdf module. The attribute(), objectAttribute(), object(), and tag() methods interpolated user-controlled fields (attribute type, attribute value, object name, object relation, tag name, tag colour, and tag text colour) directly into HTML templates without applying HTML entity encoding. An authenticated user with the ability to create or modify MISP attributes, objects, or tags could embed arbitrary HTML markup in these fields. When a report containing such elements was exported to PDF, the unescaped content was rendered as live HTML rather than inert text, potentially injecting script tags, breaking the document structure, or altering the visual content of the exported report. Additionally, the attribute() method contained a template with hardcoded sample values (\"domain-ip\" and \"google.com\") instead of format placeholders, meaning every plain attribute reference in a PDF displayed the sample text rather than the actual indicator value, constituting a data-integrity defect in the exported document. The vulnerability requires an authenticated actor with write access to MISP elements and a subsequent PDF export of a report referencing those elements. The security impact is primarily to the integrity of the exported document and, depending on the HTML-to-PDF rendering engine, potential execution of injected markup during the conversion step.\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-63",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-63 Cross-Site Scripting (XSS)"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "PASSIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "LOW",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-79",
                  "description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-116",
                  "description": "CWE-116 Improper Encoding or Escaping of Output",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-10T13:41:51.214Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/949744a4b"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix applies HTML entity encoding (via the h() helper, which wraps htmlspecialchars with ENT_QUOTES and UTF-8) to every user-controlled value interpolated into the HTML templates in the MISPElementHTMLFormatterTool. This ensures that attribute types, values, object names, relations, tag names, and colour values are treated as inert data and cannot inject markup or break out of the surrounding span/style context. The hardcoded sample values in the attribute() template are replaced with proper %s format placeholders so that the actual element data is rendered. Comprehensive unit tests are added to verify both correct rendering and escaping of hostile inputs across all four formatter methods.\u003c/p\u003e"
                }
              ],
              "value": "The fix applies HTML entity encoding (via the h() helper, which wraps htmlspecialchars with ENT_QUOTES and UTF-8) to every user-controlled value interpolated into the HTML templates in the MISPElementHTMLFormatterTool. This ensures that attribute types, values, object names, relations, tag names, and colour values are treated as inert data and cannot inject markup or break out of the surrounding span/style context. The hardcoded sample values in the attribute() template are replaced with proper %s format placeholders so that the actual element data is rendered. Comprehensive unit tests are added to verify both correct rendering and escaping of hostile inputs across all four formatter methods."
            }
          ],
          "title": "MISP: Unescaped HTML Injection in PDF Report Element Rendering",
          "x_gcve": [
            {
              "extensions": {
                "bcp-05-x-01": {
                  "ai_annotations": [
                    {
                      "ai_level": "generated",
                      "description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
                      "gna_source": 1,
                      "models": [
                        {
                          "gna_source": 1,
                          "identifier": "qwen3.8:27b",
                          "name": "qwen3.8:27b",
                          "source": "ollama"
                        }
                      ],
                      "review_status": "none",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The HTML-to-PDF rendering pipeline (convert_markdown_to_pdf) is assumed to render the generated HTML in a context where injected markup could be interpreted (e.g., headless browser or HTML-aware converter); if a purely static renderer is used, the impact is limited to document corruption.",
                      "The attacker is assumed to have an authenticated MISP account with write access to attributes, objects, or tags; the specific role or permission level required is not stated in the patch.",
                      "The exact fixed version is not specified in the patch metadata; the tag boundary (v2.5.46, 187 commits before the fix) indicates the fix post-dates v2.5.46 but the precise release is unknown.",
                      "UI:N is assigned on the assumption that triggering the PDF export is a normal, expected user action and does not constitute a special interaction requirement beyond routine use of the application."
                    ],
                    "commit": "949744a4b6de919eca07644b6a643de88b706780",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Scottish Government - National Cyber Team"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5 (1M context)"
                      },
                      {
                        "lang": "en",
                        "type": "tool",
                        "value": "Claude Opus 5 (1M context)"
                      }
                    ],
                    "cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: The attacker only needs to create or modify a MISP element with a crafted value; no race conditions or special timing are required. AT:N: No manipulation of the attack target is needed. PR:L: The attacker requires an authenticated account with permission to create or modify MISP attributes, objects, or tags. UI:N: The victim performs a normal, expected action (exporting a report to PDF); no unusual interaction is required to trigger the rendering of the injected content. VC:N: The primary impact is on the output document, not on reading confidential system data. VI:L: The integrity of the exported PDF is compromised by injected markup or incorrect data (hardcoded sample values). VA:N: No denial-of-service impact is evident. SC:N: No confirmed cross-system confidentiality impact. SI:L: The integrity of the exported document (a secondary asset) is affected; injected content could mislead readers or, if the PDF renderer executes scripts, affect the rendering environment. SA:N: No security-relevant impact on other systems is established by the evidence.",
                    "draft": true,
                    "fixSummary": "The fix applies HTML entity encoding (via the h() helper, which wraps htmlspecialchars with ENT_QUOTES and UTF-8) to every user-controlled value interpolated into the HTML templates in the MISPElementHTMLFormatterTool. This ensures that attribute types, values, object names, relations, tag names, and colour values are treated as inert data and cannot inject markup or break out of the surrounding span/style context. The hardcoded sample values in the attribute() template are replaced with proper %s format placeholders so that the actual element data is rendered. Comprehensive unit tests are added to verify both correct rendering and escaping of hostile inputs across all four formatter methods.",
                    "generatedAt": "2026-09-10T13:06:56.823099Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 4,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 6
                        }
                      ],
                      "selectedModel": "qwen3.8:27b",
                      "selectionMethod": "deterministic-consensus-v1",
                      "selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
                    },
                    "patchSha256": "300efd40407c36caa6b3e4506c389dd7e8c303424e9427b7ef4ad3501be1277a",
                    "patchSummary": "In MISPElementHTMLFormatterTool.php: (1) the attribute() template\u0027s hardcoded \u0027domain-ip\u0027 and \u0027google.com\u0027 strings are replaced with %s placeholders; (2) all sprintf arguments in attribute(), objectAttribute(), object(), and tag() are wrapped with h() to HTML-encode the interpolated values (attribute type, value, object name, object_relation, tag name, colour, text_colour). A new test file MISPElementHTMLFormatterToolTest.php is added with 123 lines of PHPUnit tests covering: correct rendering of real values, HTML escaping of hostile payloads (script tags, span-breaking sequences, CSS attribute breakout via quotes), foreign-tag detection, and placeholder behaviour for objects without attributes.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "949744a4b6de919eca07644b6a643de88b706780",
                        "patchSha256": "300efd40407c36caa6b3e4506c389dd7e8c303424e9427b7ef4ad3501be1277a",
                        "source": "https://github.com/MISP/MISP/commit/949744a4b.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/949744a4b.patch",
                        "subject": "fix: [event-report] Render and escape MISP element references"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/949744a4b.patch",
                    "subject": "fix: [event-report] Render and escape MISP element references",
                    "tagVersionBoundary": {
                      "commits_after_fix": 187,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.46",
                      "version": "2.5.46",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "User-controlled MISP element values (attribute values, object names, tag names, tag colours) are interpolated into HTML output without encoding, allowing injection of arbitrary HTML markup into the rendered document. Although the output target is a PDF rather than a browser page, the mechanism is identical to stored XSS: untrusted data is embedded in an HTML context without neutralization."
                      },
                      {
                        "cweId": "CWE-116",
                        "rationale": "The root cause is the absence of output encoding (htmlspecialchars) on all interpolated values in the HTML template strings. The tag() method additionally failed to escape colour values that are placed inside a CSS style attribute, enabling attribute-breakout injection."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20178"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-88921",
        "datePublished": "2026-09-10T13:41:51.214Z",
        "dateReserved": "2026-09-10T13:41:48.297Z",
        "dateUpdated": "2026-09-10T17:02:58.068Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-88915 (GCVE-0-2026-88915)

    Vulnerability from cvelistv5 – Published: 2026-09-10 13:04 – Updated: 2026-09-10 17:33
    VLAI
    Title
    MISP Event Template Instantiation Bypasses Sharing Group and Tagging Authorization
    Summary
    Affected versions of MISP do not consistently enforce the acting user's authorization when instantiating event templates. For templates using distribution = 4, the template can specify a sharing_group_id. The instantiation path passed that value into event creation without verifying that the user instantiating the template was actually permitted to use the selected sharing group. The commit notes that Event::_add() only performed its own sharing-group authorization in another code path, leaving template instantiation able to write the identifier directly. The same instantiation path also attached template-specified tags without checking the user's normal tagging permissions. In addition, it hardcoded local => 0, meaning tags marked local_only could be attached globally and consequently propagate through synchronization or export, contrary to their intended restriction. The fix adds explicit SharingGroup::canUse() authorization for the acting user, applies the same tag-modification checks used by normal event tagging, and ensures local_only tags are attached locally. Version affected: ≤2.5.45
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-10 17:32 UTC
    CWE
    References
    Impacted products
    Vendor Product Version
    MISP MISP Affected: 0 , ≤ 2.5.45 (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-88915",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-10T17:32:12.621068Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-10T17:33:00.129Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "product": "MISP",
              "repo": "https://github.com/MISP/MISP",
              "vendor": "MISP",
              "versions": [
                {
                  "lessThanOrEqual": "2.5.45",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Scottish Government - National Cyber Team"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "iglocska"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5 (1M context)"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eAffected versions of MISP do not consistently enforce the acting user\u0027s authorization when instantiating event templates.\u003c/p\u003e\n\u003cp\u003eFor templates using \u003ccode\u003edistribution = 4\u003c/code\u003e, the template can specify a \u003ccode\u003esharing_group_id\u003c/code\u003e. The instantiation path passed that value into event creation without verifying that the user instantiating the template was actually permitted to use the selected sharing group. The commit notes that \u003ccode\u003eEvent::_add()\u003c/code\u003e only performed its own sharing-group authorization in another code path, leaving template instantiation able to write the identifier directly.\u003c/p\u003e\n\u003cp\u003eThe same instantiation path also attached template-specified tags without checking the user\u0027s normal tagging permissions. In addition, it hardcoded \u003ccode\u003elocal =\u0026gt; 0\u003c/code\u003e, meaning tags marked \u003ccode\u003elocal_only\u003c/code\u003e could be attached globally and consequently propagate through synchronization or export, contrary to their intended restriction.\u003c/p\u003e\n\u003cp\u003eThe fix adds explicit \u003ccode\u003eSharingGroup::canUse()\u003c/code\u003e authorization for the acting user, applies the same tag-modification checks used by normal event tagging, and ensures \u003ccode\u003elocal_only\u003c/code\u003e tags are attached locally.\u003c/p\u003eVersion affected: \u22642.5.45\u003cbr\u003e"
                }
              ],
              "value": "Affected versions of MISP do not consistently enforce the acting user\u0027s authorization when instantiating event templates.\n\n\nFor templates using distribution = 4, the template can specify a sharing_group_id. The instantiation path passed that value into event creation without verifying that the user instantiating the template was actually permitted to use the selected sharing group. The commit notes that Event::_add() only performed its own sharing-group authorization in another code path, leaving template instantiation able to write the identifier directly.\n\n\nThe same instantiation path also attached template-specified tags without checking the user\u0027s normal tagging permissions. In addition, it hardcoded local =\u003e 0, meaning tags marked local_only could be attached globally and consequently propagate through synchronization or export, contrary to their intended restriction.\n\n\nThe fix adds explicit SharingGroup::canUse() authorization for the acting user, applies the same tag-modification checks used by normal event tagging, and ensures local_only tags are attached locally.\n\nVersion affected: \u22642.5.45"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Accessing Functionality Not Properly Constrained by ACLs"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 7.1,
                "baseSeverity": "HIGH",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-862",
                  "description": "CWE-862 Missing Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-10T13:04:03.331Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/3aa3a9a97"
            }
          ],
          "source": {
            "discovery": "UNKNOWN"
          },
          "title": "MISP Event Template Instantiation Bypasses Sharing Group and Tagging Authorization",
          "x_gcve": [
            {
              "recordType": "advisory",
              "vulnId": "gcve-1-2026-20110"
            }
          ],
          "x_generator": {
            "engine": "Vulnogram 0.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-88915",
        "datePublished": "2026-09-10T13:04:03.331Z",
        "dateReserved": "2026-09-10T13:04:01.032Z",
        "dateUpdated": "2026-09-10T17:33:00.129Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-88069 (GCVE-0-2026-88069)

    Vulnerability from cvelistv5 – Published: 2026-09-09 21:37 – Updated: 2026-09-10 13:42
    VLAI
    Title
    Path traversal in Pandora archive extractor allows arbitrary file writes outside the extraction directory in pandora analysis
    Summary
    Pandora contains a path traversal vulnerability in its archive extraction worker. When processing a specially crafted archive or disk image, attacker-controlled file paths could be used without ensuring that the resulting destination remained within the intended extraction directory. An attacker able to submit a malicious file for analysis could use path traversal sequences or crafted paths to cause extracted content to be written outside the designated extraction directory, potentially overwriting files accessible to the Pandora worker process. Successful exploitation could result in unauthorized modification of application or system files, denial of service, and potentially further compromise depending on the permissions of the Pandora process and the files that can be overwritten. The vulnerability is addressed by resolving each extraction destination path before writing and verifying that it remains below the expected extraction directory. Extraction attempts resolving outside this directory are rejected and reported as path traversal attempts.
    SSVC
    Exploitation: none Automatable: yes Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-10 13:42 UTC
    CWE
    • CWE-22 - Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
    References
    Impacted products
    Vendor Product Version
    pandora-analysis pandora Affected: 0 , ≤ 1.12.7 (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-88069",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-10T13:42:38.918892Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-10T13:42:49.609Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "product": "pandora",
              "repo": "https://github.com/pandora-analysis/pandora",
              "vendor": "pandora-analysis",
              "versions": [
                {
                  "lessThanOrEqual": "1.12.7",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Raphael Vinot"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "Jeroen Pinoy"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003ePandora contains a path traversal vulnerability in its archive extraction worker. When processing a specially crafted archive or disk image, attacker-controlled file paths could be used without ensuring that the resulting destination remained within the intended extraction directory.\u003c/p\u003e\u003cp\u003eAn attacker able to submit a malicious file for analysis could use path traversal sequences or crafted paths to cause extracted content to be written outside the designated extraction directory, potentially overwriting files accessible to the Pandora worker process. Successful exploitation could result in unauthorized modification of application or system files, denial of service, and potentially further compromise depending on the permissions of the Pandora process and the files that can be overwritten.\u003c/p\u003e\u003cp\u003eThe vulnerability is addressed by resolving each extraction destination path before writing and verifying that it remains below the expected extraction directory. Extraction attempts resolving outside this directory are rejected and reported as path traversal attempts.\u003c/p\u003e\u003cbr\u003e"
                }
              ],
              "value": "Pandora contains a path traversal vulnerability in its archive extraction worker. When processing a specially crafted archive or disk image, attacker-controlled file paths could be used without ensuring that the resulting destination remained within the intended extraction directory.\n\nAn attacker able to submit a malicious file for analysis could use path traversal sequences or crafted paths to cause extracted content to be written outside the designated extraction directory, potentially overwriting files accessible to the Pandora worker process. Successful exploitation could result in unauthorized modification of application or system files, denial of service, and potentially further compromise depending on the permissions of the Pandora process and the files that can be overwritten.\n\nThe vulnerability is addressed by resolving each extraction destination path before writing and verifying that it remains below the expected extraction directory. Extraction attempts resolving outside this directory are rejected and reported as path traversal attempts."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-126",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-126 Path Traversal"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 9.3,
                "baseSeverity": "CRITICAL",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "HIGH",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:H/SA:H",
                "version": "4.0",
                "vulnAvailabilityImpact": "HIGH",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "HIGH",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-22",
                  "description": "CWE-22 Improper Limitation of a Pathname to a Restricted Directory (\u0027Path Traversal\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-09T21:55:26.738Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/pandora-analysis/pandora/commit/d86ac5b260fb9a41e07f1da1bbd326cdcfc188a7"
            }
          ],
          "source": {
            "discovery": "UNKNOWN"
          },
          "title": "Path traversal in Pandora archive extractor allows arbitrary file writes outside the extraction directory in pandora analysis",
          "x_gcve": [
            {
              "recordType": "advisory",
              "vulnId": "gcve-1-2026-20209"
            }
          ],
          "x_generator": {
            "engine": "Vulnogram 0.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-88069",
        "datePublished": "2026-09-09T21:37:52.063Z",
        "dateReserved": "2026-09-09T21:36:23.190Z",
        "dateUpdated": "2026-09-10T13:42:49.609Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }