Search

Find a vulnerability

Search criteria

    209 vulnerabilities

    CVE-2026-101041 (GCVE-0-2026-101041)

    Vulnerability from cvelistv5 – Published: 2026-09-27 14:47 – Updated: 2026-09-27 14:47
    VLAI
    Title
    Vulnerability-Lookup - Race Condition in Account Recovery Token Consumption Allows Password Takeover
    Summary
    The account recovery (password reset) functionality in the vulnerability-lookup web application contains a time-of-check-to-time-of-use (TOCTOU) race condition in the consumption of single-use recovery tokens. The original implementation verified the token nonce against the stored digest and then consumed (cleared) it in separate database operations. Two concurrent HTTP requests presenting the same valid recovery token could both pass the verification check before either transaction committed, allowing both to set their own password on the target account. The last transaction to commit overwrites the first, enabling an attacker who possesses a valid recovery token to replace the legitimate user's password with one of their choosing. A secondary defect in the same endpoint (confirm_account) allowed a valid recovery link to be used to set an empty or trivially short password (e.g., three characters). The view handler performed only a manual equality comparison between the two password fields and never invoked the form's validation logic, bypassing the intended minimum-length and complexity constraints. The affected component is the user account recovery endpoint (/user/confirm_account/<token>) and the associated token verification and consumption logic in the User model (website/models/user.py) and the view layer (website/web/views/user.py).
    CWE
    • CWE-362 - Concurrency: Race Condition
    • CWE-20 - Improper Input Validation
    Impacted products
    Vendor Product Version
    vulnerability-lookup vulnerability-lookup Affected: 0 , ≤ 6.2.0 (semver)
    Create a notification for this product.
    GCVE extensions
    AI involvement GCVE-BCP-05-X-01
    Whole record AI-generated Partially 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-27 14:43
    Model
    qwen3.8:27b
    Input
    patch set (2 sources) ccb7572963e8…
    Confidence
    medium
    Commit Subject Patch SHA-256
    5462bab62d76 Fix recovery token consumption race 75ed8b215e27…
    ad6f22882975 fix: [user] Validate the recovery form and harden the token c1cecff5ac5f…
    Fix summary

    The non-atomic check-then-consume pattern is replaced with a single conditional UPDATE statement (compare-and-set) that atomically verifies the stored SHA-256 nonce digest, updates the password hash, sets is_confirmed, and clears the token in one database operation. Only the first transaction to commit succeeds; all concurrent attempts match zero rows and are rejected with an error. The view now calls form.validate() before processing the password change, enforcing the form's length and equality validators. The dead consume_account_token() method is removed to eliminate the non-atomic consumption path entirely.

    Patch summary

    Added reset_password_with_account_token() to the User model performing a single conditional UPDATE (WHERE id = ? AND account_token_digest = sha256(nonce)) that sets pwdhash, is_confirmed=True, and account_token_digest=None atomically. Removed the separate consume_account_token() method. Changed the confirm_account view to call form.validate() instead of only comparing password1 and password2 manually. Introduced a _account_token_digest() static helper to centralize the SHA-256 computation (previously three inline calls). Removed synchronize_session=False from the UPDATE execution options so the ORM session stays consistent. Added regression tests for concurrent token consumption (two threads, barrier-synchronized) and for rejection of passwords that fail form validation (empty, three-character, mismatched).

    CVSS rationale

    AV:N: the recovery endpoint is reachable over the network. AC:H: exploiting the race condition requires precise timing of two concurrent requests, making the attack condition high complexity. AT:N: no active user interaction or deception is required beyond possessing a valid token. PR:N: no prior authentication is needed; the recovery token itself is the credential. UI:N: no user interaction is required. VC:N: the vulnerability does not directly expose confidential data. VI:H: the integrity of the user's password (a critical credential) is directly compromised. VA:N: no availability impact. SC:N: the impact is confined to the vulnerable component. SI:H: the integrity of the user's account (password, confirmation state) is compromised, affecting the user's ability to access their own account. SA:N: no security-authority impact.

    Weakness rationale
    • CWE-362 The primary defect is a TOCTOU race: the token nonce is verified and then consumed in separate operations, allowing two concurrent transactions to both pass verification before either commits. The fix replaces this with an atomic compare-and-set UPDATE, confirming the race condition as the root cause.
    • CWE-20 The confirm_account view never called form.validate() on POST, so the form's minimum-length and equality validators were bypassed. A valid recovery link alone permitted setting an empty or three-character password. The fix adds the form.validate() call before processing.
    Attack pattern rationale
    • CAPEC-111 The attacker exploits the window between token verification and token consumption by issuing a concurrent request with the same token. Both requests pass the check; the last to commit overwrites the first's password. This is a textbook race-condition attack on a shared resource (the single-use token). CAPEC-111 is the closest available pattern; no CAPEC specifically covers TOCTOU on database-level token consumption, so this is the best match.
    Assumptions to verify
    • The product version and exact release boundary are not specified in the patch metadata; the affected version range is recorded as unspecified.
    • The CAPEC-111 mapping is the closest available pattern for a database-level TOCTOU race on a single-use token; no CAPEC specifically describes concurrent compare-and-set exploitation, so this is the best available match.
    • The CVSS AC:H reflects the race-condition aspect; the missing-validation aspect alone would be AC:L, but the patch set is treated as one vulnerability per the caller's instruction.
    • The vendor is not explicitly identified in the metadata; the GitHub repository name 'vulnerability-lookup' is used as the product identifier.
    • No specific authentication or deployment preconditions beyond possession of a valid recovery token are stated in the patch; the token is assumed to be delivered out-of-band (e.g., email).
    • The Co-Authored-By line for Claude Fable 5.1 is treated as a remediation developer credit per the metadata's remediation_developers list; no finder or reporter is identified in the supplied evidence.
    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": {
        "cna": {
          "affected": [
            {
              "modules": [
                "website/models/user.py",
                "website/web/views/user.py",
                "website/lib/user_utils.py"
              ],
              "product": "vulnerability-lookup",
              "programFiles": [
                "website/models/user.py",
                "website/web/views/user.py",
                "website/lib/user_utils.py"
              ],
              "repo": "https://github.com/vulnerability-lookup/vulnerability-lookup",
              "vendor": "vulnerability-lookup",
              "versions": [
                {
                  "lessThanOrEqual": "6.2.0",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Alexandre Dulaunoy"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "C\u00e9dric Bonhomme"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Fable 5.1"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "avrlab233"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe account recovery (password reset) functionality in the vulnerability-lookup web application contains a time-of-check-to-time-of-use (TOCTOU) race condition in the consumption of single-use recovery tokens. The original implementation verified the token nonce against the stored digest and then consumed (cleared) it in separate database operations. Two concurrent HTTP requests presenting the same valid recovery token could both pass the verification check before either transaction committed, allowing both to set their own password on the target account. The last transaction to commit overwrites the first, enabling an attacker who possesses a valid recovery token to replace the legitimate user\u0027s password with one of their choosing.\u003c/p\u003e\u003cp\u003eA secondary defect in the same endpoint (confirm_account) allowed a valid recovery link to be used to set an empty or trivially short password (e.g., three characters). The view handler performed only a manual equality comparison between the two password fields and never invoked the form\u0027s validation logic, bypassing the intended minimum-length and complexity constraints.\u003c/p\u003e\u003cp\u003eThe affected component is the user account recovery endpoint (/user/confirm_account/\u0026lt;token\u0026gt;) and the associated token verification and consumption logic in the User model (website/models/user.py) and the view layer (website/web/views/user.py).\u003c/p\u003e"
                }
              ],
              "value": "The account recovery (password reset) functionality in the vulnerability-lookup web application contains a time-of-check-to-time-of-use (TOCTOU) race condition in the consumption of single-use recovery tokens. The original implementation verified the token nonce against the stored digest and then consumed (cleared) it in separate database operations. Two concurrent HTTP requests presenting the same valid recovery token could both pass the verification check before either transaction committed, allowing both to set their own password on the target account. The last transaction to commit overwrites the first, enabling an attacker who possesses a valid recovery token to replace the legitimate user\u0027s password with one of their choosing.\n\nA secondary defect in the same endpoint (confirm_account) allowed a valid recovery link to be used to set an empty or trivially short password (e.g., three characters). The view handler performed only a manual equality comparison between the two password fields and never invoked the form\u0027s validation logic, bypassing the intended minimum-length and complexity constraints.\n\nThe affected component is the user account recovery endpoint (/user/confirm_account/\u003ctoken\u003e) and the associated token verification and consumption logic in the User model (website/models/user.py) and the view layer (website/web/views/user.py)."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-111",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-111 Race Condition"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "HIGH",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 6.3,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "LOW",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/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-362",
                  "description": "CWE-362 Concurrency: Race Condition",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-27T14:47:57.012Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/5462bab62d76df852619e01eb67da36c023c8c40"
            },
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/ad6f22882975516adf193a1a920aaa54025c71d4"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe non-atomic check-then-consume pattern is replaced with a single conditional UPDATE statement (compare-and-set) that atomically verifies the stored SHA-256 nonce digest, updates the password hash, sets is_confirmed, and clears the token in one database operation. Only the first transaction to commit succeeds; all concurrent attempts match zero rows and are rejected with an error. The view now calls form.validate() before processing the password change, enforcing the form\u0027s length and equality validators. The dead consume_account_token() method is removed to eliminate the non-atomic consumption path entirely.\u003c/p\u003e"
                }
              ],
              "value": "The non-atomic check-then-consume pattern is replaced with a single conditional UPDATE statement (compare-and-set) that atomically verifies the stored SHA-256 nonce digest, updates the password hash, sets is_confirmed, and clears the token in one database operation. Only the first transaction to commit succeeds; all concurrent attempts match zero rows and are rejected with an error. The view now calls form.validate() before processing the password change, enforcing the form\u0027s length and equality validators. The dead consume_account_token() method is removed to eliminate the non-atomic consumption path entirely."
            }
          ],
          "title": "Vulnerability-Lookup - Race Condition in Account Recovery Token Consumption Allows Password Takeover",
          "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": "partial",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The product version and exact release boundary are not specified in the patch metadata; the affected version range is recorded as unspecified.",
                      "The CAPEC-111 mapping is the closest available pattern for a database-level TOCTOU race on a single-use token; no CAPEC specifically describes concurrent compare-and-set exploitation, so this is the best available match.",
                      "The CVSS AC:H reflects the race-condition aspect; the missing-validation aspect alone would be AC:L, but the patch set is treated as one vulnerability per the caller\u0027s instruction.",
                      "The vendor is not explicitly identified in the metadata; the GitHub repository name \u0027vulnerability-lookup\u0027 is used as the product identifier.",
                      "No specific authentication or deployment preconditions beyond possession of a valid recovery token are stated in the patch; the token is assumed to be delivered out-of-band (e.g., email).",
                      "The Co-Authored-By line for Claude Fable 5.1 is treated as a remediation developer credit per the metadata\u0027s remediation_developers list; no finder or reporter is identified in the supplied evidence."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-111",
                        "rationale": "The attacker exploits the window between token verification and token consumption by issuing a concurrent request with the same token. Both requests pass the check; the last to commit overwrites the first\u0027s password. This is a textbook race-condition attack on a shared resource (the single-use token). CAPEC-111 is the closest available pattern; no CAPEC specifically covers TOCTOU on database-level token consumption, so this is the best match."
                      }
                    ],
                    "commit": "ad6f22882975516adf193a1a920aaa54025c71d4",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Alexandre Dulaunoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "C\u00e9dric Bonhomme"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Fable 5.1"
                      }
                    ],
                    "cvssRationale": "AV:N: the recovery endpoint is reachable over the network. AC:H: exploiting the race condition requires precise timing of two concurrent requests, making the attack condition high complexity. AT:N: no active user interaction or deception is required beyond possessing a valid token. PR:N: no prior authentication is needed; the recovery token itself is the credential. UI:N: no user interaction is required. VC:N: the vulnerability does not directly expose confidential data. VI:H: the integrity of the user\u0027s password (a critical credential) is directly compromised. VA:N: no availability impact. SC:N: the impact is confined to the vulnerable component. SI:H: the integrity of the user\u0027s account (password, confirmation state) is compromised, affecting the user\u0027s ability to access their own account. SA:N: no security-authority impact.",
                    "fixSummary": "The non-atomic check-then-consume pattern is replaced with a single conditional UPDATE statement (compare-and-set) that atomically verifies the stored SHA-256 nonce digest, updates the password hash, sets is_confirmed, and clears the token in one database operation. Only the first transaction to commit succeeds; all concurrent attempts match zero rows and are rejected with an error. The view now calls form.validate() before processing the password change, enforcing the form\u0027s length and equality validators. The dead consume_account_token() method is removed to eliminate the non-atomic consumption path entirely.",
                    "generatedAt": "2026-09-27T14:43:09.207406Z",
                    "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": "ccb7572963e8b2435c2ee54cea019a60b1b70a5717cc3848ccd940232eae0b91",
                    "patchSummary": "Added reset_password_with_account_token() to the User model performing a single conditional UPDATE (WHERE id = ? AND account_token_digest = sha256(nonce)) that sets pwdhash, is_confirmed=True, and account_token_digest=None atomically. Removed the separate consume_account_token() method. Changed the confirm_account view to call form.validate() instead of only comparing password1 and password2 manually. Introduced a _account_token_digest() static helper to centralize the SHA-256 computation (previously three inline calls). Removed synchronize_session=False from the UPDATE execution options so the ORM session stays consistent. Added regression tests for concurrent token consumption (two threads, barrier-synchronized) and for rejection of passwords that fail form validation (empty, three-character, mismatched).",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "5462bab62d76df852619e01eb67da36c023c8c40",
                        "patchSha256": "75ed8b215e2769b5d20b161ddfbde9e0b2975f836397979a94387340b0501ec1",
                        "source": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/5462bab62d76df852619e01eb67da36c023c8c40.patch",
                        "sourceUrl": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/5462bab62d76df852619e01eb67da36c023c8c40.patch",
                        "subject": "Fix recovery token consumption race"
                      },
                      {
                        "commit": "ad6f22882975516adf193a1a920aaa54025c71d4",
                        "patchSha256": "c1cecff5ac5f7804ff42f0583b156cefa2add775cb6f80506c917f84a26bf43d",
                        "source": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/ad6f22882975516adf193a1a920aaa54025c71d4.patch",
                        "sourceUrl": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/ad6f22882975516adf193a1a920aaa54025c71d4.patch",
                        "subject": "fix: [user] Validate the recovery form and harden the token"
                      }
                    ],
                    "source": "patch set (2 sources)",
                    "subject": "fix: [user] Validate the recovery form and harden the token",
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-362",
                        "rationale": "The primary defect is a TOCTOU race: the token nonce is verified and then consumed in separate operations, allowing two concurrent transactions to both pass verification before either commits. The fix replaces this with an atomic compare-and-set UPDATE, confirming the race condition as the root cause."
                      },
                      {
                        "cweId": "CWE-20",
                        "rationale": "The confirm_account view never called form.validate() on POST, so the form\u0027s minimum-length and equality validators were bypassed. A valid recovery link alone permitted setting an empty or three-character password. The fix adds the form.validate() call before processing."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "gcve-1-2026-20252"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-101041",
        "datePublished": "2026-09-27T14:47:57.012Z",
        "dateReserved": "2026-09-27T14:47:50.804Z",
        "dateUpdated": "2026-09-27T14:47:57.012Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-100190 (GCVE-0-2026-100190)

    Vulnerability from cvelistv5 – Published: 2026-09-25 13:52 – Updated: 2026-09-25 16:13
    VLAI
    Title
    Stored Cross-Site Scripting (XSS) via Crawler Capture Import in AIL Framework showDomain Page
    Summary
    The AIL Framework crawler splash domain page (showDomain.html) is vulnerable to stored cross-site script injection (XSS). User-supplied data originating from imported crawler captures—specifically item IDs, URLs, and screenshot file paths—was interpolated directly into inline JavaScript contexts within the HTML template. This included an onclick attribute that embedded raw screenshot and URL values into a JavaScript function call, and an inline script block that assigned a screenshot value to a JavaScript variable without escaping. An attacker with a user-role API client could craft a malicious crawler capture import containing JavaScript payloads in these fields. When any user (including privileged users) subsequently viewed the affected domain page, the injected script would execute in the victim's browser context, potentially allowing session hijacking, data exfiltration, or unauthorized actions on behalf of the victim. The vulnerability is stored in the application's data layer and triggered upon page rendering, requiring no further interaction beyond loading the domain view.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-25 16:13 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input in Web Page ('Cross-site Scripting')
    References
    Impacted products
    Vendor Product Version
    ail project ail framework Affected: unspecified , < 7.1 (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.

    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-25 13:45
    Model
    qwen3.8:27b
    Input
    https://github.com/ail-project/ail-framework/commit/31376ee3d04519c898bb9b3671453a41c4117340.patch c110d16dd8ee…
    Confidence
    medium
    Commit Subject Patch SHA-256
    31376ee3d045 chg: [security] prevent stored XSS through imported capture c110d16dd8ee…
    Fix summary

    The fix removes all capture-derived values (item IDs, URLs, screenshot paths) from inline JavaScript contexts (onclick attributes and inline script variable assignments). These values are now stored in HTML data attributes (data-screenshot, data-url, data-item-id), which are properly HTML-escaped by the Jinja2 template engine. Screenshot click handlers are bound programmatically via addEventListener on elements with a .reload-image class, and the reload_image function reads values from the DOM element's dataset rather than receiving raw string parameters. Additionally, item IDs are URL-encoded with encodeURIComponent before being appended to link hrefs, preventing injection through the ID field.

    Patch summary

    In showDomain.html: (1) Replaced inline onclick="reload_image('...')" with a data-attribute-based approach using data-screenshot, data-url, and data-item-id attributes on the table cell element, plus a .reload-image CSS class. (2) Removed the inline script block that assigned screenshot, URL, and ID values directly into JavaScript variables via Jinja2 interpolation; replaced with dataset reads from the domain_screenshot img element. (3) Changed reload_image() to accept a DOM element and read values from element.dataset instead of raw string arguments. (4) Added a programmatic event binding loop using document.querySelectorAll('.reload-image').forEach() with addEventListener('click'). (5) Applied encodeURIComponent() to item IDs when constructing screenshot link hrefs. (6) Changed the href URL construction to use url_for with keyword arguments instead of string interpolation.

    CVSS rationale

    AV:N: Exploitable over the network via the web application. AC:L: No special race conditions or complex setup; a crafted capture import suffices. AT:N: No manipulation of the attack target required. PR:L: Requires a user-role API client to import a malicious crawler capture (authenticated, low privilege). UI:P: The stored XSS in the inline script block executes passively when the victim loads the domain page; no click or active interaction is needed for the inline script vector. VC:N/VI:N/VA:N: The vulnerable component (server-side application) is not directly compromised in confidentiality, integrity, or availability. SC:H: Scope changes to the victim's browser session, enabling theft of session tokens, cookies, and sensitive data. SI:H: Scope integrity is impacted as the attacker can perform arbitrary actions in the victim's authenticated session. SA:N: No meaningful impact on the availability of the attacker's scope.

    Weakness rationale
    • CWE-79 The patch explicitly addresses stored XSS by removing user-controlled values (screenshot paths, URLs, item IDs from crawler capture imports) from inline JavaScript contexts and replacing them with properly escaped data attributes and programmatic event binding. The commit message confirms the intent: 'prevent stored XSS through imported capture metadata in showDomain.'
    Attack pattern rationale
    • CAPEC-1 The patch directly remediates a stored XSS vector where attacker-controlled data from a crawler capture import is reflected into inline JavaScript without neutralization. CAPEC-1 is the canonical attack pattern for XSS. The specific sub-variant is stored (persistent) XSS via a data import mechanism, but CAPEC-1 is the closest and most appropriate mapping available in the CAPEC catalog.
    Assumptions to verify
    • The UI:P (Passive) rating assumes the inline script vector (screenshot variable assignment) executes on page load without requiring a user click. The onclick vector would require UI:A, but the inline script vector is sufficient for exploitation.
    • PR:L assumes the attacker needs a user-role API client to import a crafted crawler capture, as stated in the commit message. The exact privilege level and authentication mechanism are not further specified in the patch.
    • The version boundary 'less_than 7.1' is inferred from the tag_version_boundary metadata showing 21 commits after the fix before the v7.1 tag, suggesting the fix is included in v7.1. Exact affected version ranges are not confirmed.
    • CAPEC-1 is selected as the closest available attack pattern for stored XSS; no more specific CAPEC for stored XSS via data import exists in the catalog.
    • The patch does not include test cases or additional context about whether other template files have similar inline JavaScript interpolation patterns; this advisory covers only the single file in 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 5 9 medium 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-100190",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-25T16:13:08.012327Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-25T16:13:26.973Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "modules": [
                "crawler/crawler_splash"
              ],
              "product": "ail framework",
              "programFiles": [
                "var/www/templates/crawler/crawler_splash/showDomain.html"
              ],
              "repo": "https://github.com/ail-project/ail-framework",
              "vendor": "ail project",
              "versions": [
                {
                  "lessThan": "7.1",
                  "status": "affected",
                  "version": "unspecified",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Aurelien Thirion"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "Jeroen Pinoy"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe AIL Framework crawler splash domain page (showDomain.html) is vulnerable to stored cross-site script injection (XSS). User-supplied data originating from imported crawler captures\u2014specifically item IDs, URLs, and screenshot file paths\u2014was interpolated directly into inline JavaScript contexts within the HTML template. This included an onclick attribute that embedded raw screenshot and URL values into a JavaScript function call, and an inline script block that assigned a screenshot value to a JavaScript variable without escaping. An attacker with a user-role API client could craft a malicious crawler capture import containing JavaScript payloads in these fields. When any user (including privileged users) subsequently viewed the affected domain page, the injected script would execute in the victim\u0027s browser context, potentially allowing session hijacking, data exfiltration, or unauthorized actions on behalf of the victim. The vulnerability is stored in the application\u0027s data layer and triggered upon page rendering, requiring no further interaction beyond loading the domain view.\u003c/p\u003e"
                }
              ],
              "value": "The AIL Framework crawler splash domain page (showDomain.html) is vulnerable to stored cross-site script injection (XSS). User-supplied data originating from imported crawler captures\u2014specifically item IDs, URLs, and screenshot file paths\u2014was interpolated directly into inline JavaScript contexts within the HTML template. This included an onclick attribute that embedded raw screenshot and URL values into a JavaScript function call, and an inline script block that assigned a screenshot value to a JavaScript variable without escaping. An attacker with a user-role API client could craft a malicious crawler capture import containing JavaScript payloads in these fields. When any user (including privileged users) subsequently viewed the affected domain page, the injected script would execute in the victim\u0027s browser context, potentially allowing session hijacking, data exfiltration, or unauthorized actions on behalf of the victim. The vulnerability is stored in the application\u0027s data layer and triggered upon page rendering, requiring no further interaction beyond loading the domain view."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 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: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 in Web Page (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-25T13:52:19.648Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/ail-project/ail-framework/commit/31376ee3d04519c898bb9b3671453a41c4117340"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix removes all capture-derived values (item IDs, URLs, screenshot paths) from inline JavaScript contexts (onclick attributes and inline script variable assignments). These values are now stored in HTML data attributes (data-screenshot, data-url, data-item-id), which are properly HTML-escaped by the Jinja2 template engine. Screenshot click handlers are bound programmatically via addEventListener on elements with a .reload-image class, and the reload_image function reads values from the DOM element\u0027s dataset rather than receiving raw string parameters. Additionally, item IDs are URL-encoded with encodeURIComponent before being appended to link hrefs, preventing injection through the ID field.\u003c/p\u003e"
                }
              ],
              "value": "The fix removes all capture-derived values (item IDs, URLs, screenshot paths) from inline JavaScript contexts (onclick attributes and inline script variable assignments). These values are now stored in HTML data attributes (data-screenshot, data-url, data-item-id), which are properly HTML-escaped by the Jinja2 template engine. Screenshot click handlers are bound programmatically via addEventListener on elements with a .reload-image class, and the reload_image function reads values from the DOM element\u0027s dataset rather than receiving raw string parameters. Additionally, item IDs are URL-encoded with encodeURIComponent before being appended to link hrefs, preventing injection through the ID field."
            }
          ],
          "source": {
            "discovery": "UNKNOWN"
          },
          "title": "Stored Cross-Site Scripting (XSS) via Crawler Capture Import in AIL Framework showDomain Page",
          "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.",
                      "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 UI:P (Passive) rating assumes the inline script vector (screenshot variable assignment) executes on page load without requiring a user click. The onclick vector would require UI:A, but the inline script vector is sufficient for exploitation.",
                      "PR:L assumes the attacker needs a user-role API client to import a crafted crawler capture, as stated in the commit message. The exact privilege level and authentication mechanism are not further specified in the patch.",
                      "The version boundary \u0027less_than 7.1\u0027 is inferred from the tag_version_boundary metadata showing 21 commits after the fix before the v7.1 tag, suggesting the fix is included in v7.1. Exact affected version ranges are not confirmed.",
                      "CAPEC-1 is selected as the closest available attack pattern for stored XSS; no more specific CAPEC for stored XSS via data import exists in the catalog.",
                      "The patch does not include test cases or additional context about whether other template files have similar inline JavaScript interpolation patterns; this advisory covers only the single file in the patch."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "The patch directly remediates a stored XSS vector where attacker-controlled data from a crawler capture import is reflected into inline JavaScript without neutralization. CAPEC-1 is the canonical attack pattern for XSS. The specific sub-variant is stored (persistent) XSS via a data import mechanism, but CAPEC-1 is the closest and most appropriate mapping available in the CAPEC catalog."
                      }
                    ],
                    "commit": "31376ee3d04519c898bb9b3671453a41c4117340",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "terrtia"
                      }
                    ],
                    "cvssRationale": "AV:N: Exploitable over the network via the web application. AC:L: No special race conditions or complex setup; a crafted capture import suffices. AT:N: No manipulation of the attack target required. PR:L: Requires a user-role API client to import a malicious crawler capture (authenticated, low privilege). UI:P: The stored XSS in the inline script block executes passively when the victim loads the domain page; no click or active interaction is needed for the inline script vector. VC:N/VI:N/VA:N: The vulnerable component (server-side application) is not directly compromised in confidentiality, integrity, or availability. SC:H: Scope changes to the victim\u0027s browser session, enabling theft of session tokens, cookies, and sensitive data. SI:H: Scope integrity is impacted as the attacker can perform arbitrary actions in the victim\u0027s authenticated session. SA:N: No meaningful impact on the availability of the attacker\u0027s scope.",
                    "fixSummary": "The fix removes all capture-derived values (item IDs, URLs, screenshot paths) from inline JavaScript contexts (onclick attributes and inline script variable assignments). These values are now stored in HTML data attributes (data-screenshot, data-url, data-item-id), which are properly HTML-escaped by the Jinja2 template engine. Screenshot click handlers are bound programmatically via addEventListener on elements with a .reload-image class, and the reload_image function reads values from the DOM element\u0027s dataset rather than receiving raw string parameters. Additionally, item IDs are URL-encoded with encodeURIComponent before being appended to link hrefs, preventing injection through the ID field.",
                    "generatedAt": "2026-09-25T13:45:46.199650Z",
                    "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": "c110d16dd8eee489472853615089aeb6b6e034457dcbaec9b038bf85ad96b920",
                    "patchSummary": "In showDomain.html: (1) Replaced inline onclick=\"reload_image(\u0027...\u0027)\" with a data-attribute-based approach using data-screenshot, data-url, and data-item-id attributes on the table cell element, plus a .reload-image CSS class. (2) Removed the inline script block that assigned screenshot, URL, and ID values directly into JavaScript variables via Jinja2 interpolation; replaced with dataset reads from the domain_screenshot img element. (3) Changed reload_image() to accept a DOM element and read values from element.dataset instead of raw string arguments. (4) Added a programmatic event binding loop using document.querySelectorAll(\u0027.reload-image\u0027).forEach() with addEventListener(\u0027click\u0027). (5) Applied encodeURIComponent() to item IDs when constructing screenshot link hrefs. (6) Changed the href URL construction to use url_for with keyword arguments instead of string interpolation.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "31376ee3d04519c898bb9b3671453a41c4117340",
                        "patchSha256": "c110d16dd8eee489472853615089aeb6b6e034457dcbaec9b038bf85ad96b920",
                        "source": "https://github.com/ail-project/ail-framework/commit/31376ee3d04519c898bb9b3671453a41c4117340.patch",
                        "sourceUrl": "https://github.com/ail-project/ail-framework/commit/31376ee3d04519c898bb9b3671453a41c4117340.patch",
                        "subject": "chg: [security] prevent stored XSS through imported capture"
                      }
                    ],
                    "source": "https://github.com/ail-project/ail-framework/commit/31376ee3d04519c898bb9b3671453a41c4117340.patch",
                    "subject": "chg: [security] prevent stored XSS through imported capture",
                    "tagVersionBoundary": {
                      "commits_after_fix": 21,
                      "repository": "https://github.com/ail-project/ail-framework",
                      "tag": "v7.1",
                      "version": "7.1",
                      "version_type": "custom"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "The patch explicitly addresses stored XSS by removing user-controlled values (screenshot paths, URLs, item IDs from crawler capture imports) from inline JavaScript contexts and replacing them with properly escaped data attributes and programmatic event binding. The commit message confirms the intent: \u0027prevent stored XSS through imported capture metadata in showDomain.\u0027"
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20292"
            }
          ],
          "x_generator": {
            "engine": "Vulnogram 0.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-100190",
        "datePublished": "2026-09-25T13:52:19.648Z",
        "dateReserved": "2026-09-25T13:52:13.769Z",
        "dateUpdated": "2026-09-25T16:13:26.973Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-100187 (GCVE-0-2026-100187)

    Vulnerability from cvelistv5 – Published: 2026-09-25 13:42 – Updated: 2026-09-25 14:49
    VLAI
    Title
    AIL Framework Onion Module: Non-Onion URL Accepted as Crawler Task Due to Bypassed Domain Validation
    Summary
    The Onion module in AIL Framework contained a performance shortcut in its URL extraction logic that accepted URLs as valid .onion targets based solely on a length check (exactly 69 characters) and a suffix check (ending in ".onion"), without performing proper hostname parsing or onion-domain validation. An unauthenticated attacker who could publish or control web content crawled by the framework could embed a crafted URL containing an IP address or non-onion hostname with a path ending in ".onion" that satisfied the length and suffix conditions. Such a URL would be extracted, its domain naively sliced from the string, and queued as a legitimate onion crawler task. This allowed unauthenticated content publishers to inject arbitrary non-onion targets into the crawler's task queue, influencing crawler behavior and potentially directing it toward unintended network resources. The vulnerability required no authentication, no user interaction, and only the ability to place crafted content in a location the framework would crawl. The security impact is a loss of integrity in the crawler's target selection: the framework processes and acts upon URLs that do not correspond to legitimate .onion services.
    SSVC
    Exploitation: none Automatable: yes Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-25 14:45 UTC
    CWE
    • CWE-20 - Improper Input Validation
    References
    Impacted products
    Vendor Product Version
    ail project ail framework Affected: unspecified , < 7.1 (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-25 13:37
    Model
    qwen3.8:27b
    Input
    https://github.com/ail-project/ail-framework/commit/5c8a68b3d8c7d7b03e5febe4ac5b5aca91826adb.patch 9fbf19112822…
    Confidence
    medium
    Commit Subject Patch SHA-256
    5c8a68b3d8c7 chg: [security] Onion module, prevent non-onion crawler task 9fbf19112822…
    Fix summary

    The length-based shortcut that bypassed onion-domain validation is removed. Every extracted URL is now parsed using the standard URL domain extraction function, and the resulting hostname is validated against the existing onion-domain validation routine before the URL is added to the crawler task set. This ensures that only URLs whose hostname is a genuine .onion domain can be queued as crawler tasks.

    Patch summary

    In bin/modules/Onion.py, the conditional block that checked len(url) == 69 and url.endswith('.onion') to shortcut domain extraction (url[7:]) without calling crawlers.is_valid_onion_domain() is removed. The code is replaced with an unconditional call to crawlers.get_url_domain(url) followed by a check that the returned domain is truthy and passes crawlers.is_valid_onion_domain(domain) before adding the domain and URL to the respective sets. Net change: 2 insertions, 9 deletions in a single file.

    CVSS rationale

    Attack Vector is Network because the attacker publishes crafted content on the web that the framework crawls. Attack Complexity is Low because the attacker only needs to construct a URL of exactly 69 characters ending in .onion with a non-onion hostname. No special Adversary Techniques are required. Privileges Required is None because the attacker is an unauthenticated content publisher. User Interaction is None because the crawler processes the content automatically. The primary impact is Low Integrity on the vulnerable component: the crawler task queue is polluted with non-onion URLs, violating the integrity of the framework's target selection. No confidentiality or availability impact is evident from the patch. No subsequent component impact is identified in the evidence.

    Weakness rationale
    • CWE-20 The URL input was validated using an insufficient heuristic (string length and suffix) that could be satisfied by non-onion URLs. The proper hostname parsing and onion-domain validation step was bypassed by the shortcut, allowing attacker-controlled URLs to be accepted as valid onion targets.
    Attack pattern rationale
    • CAPEC-126 The attacker tampers with URL parameters embedded in untrusted crawled content to bypass the application's validation logic and inject non-onion targets into the crawler task queue. CAPEC-126 is the closest available pattern describing manipulation of input parameters to achieve unintended application behavior. The mapping is approximate because the attack vector is content-based injection rather than direct request parameter manipulation, but the core mechanism (crafting input to bypass validation) aligns with this pattern.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary metadata indicating the fix commit is 24 commits before the v7.1 tag; the exact version number of the vulnerable release is not specified in the patch.
    • The CVSS assumes the attacker can place crafted content in a location the AIL Framework crawler will process; the specific crawling scope and configuration are not detailed in the patch.
    • CAPEC-126 (Parameter Tampering) is the closest available attack pattern; the actual attack is content-based URL injection rather than classic request parameter tampering, so the mapping is approximate.
    • The impact is assessed as Low Integrity based on the evidence that non-onion URLs are queued as crawler tasks; broader downstream consequences (e.g., SSRF-like effects) are not evidenced in the patch and are not assumed.
    • The commit date (24 Sep 2026) is taken as-is from the patch metadata; no independent verification of the timeline is 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-100187",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-25T14:45:47.206440Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-25T14:49:57.208Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "Onion module"
              ],
              "product": "ail framework",
              "programFiles": [
                "bin/modules/Onion.py"
              ],
              "repo": "https://github.com/ail-project/ail-framework",
              "vendor": "ail project",
              "versions": [
                {
                  "lessThan": "7.1",
                  "status": "affected",
                  "version": "unspecified",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Aurelien Thirion"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "Jeroen Pinoy"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe Onion module in AIL Framework contained a performance shortcut in its URL extraction logic that accepted URLs as valid .onion targets based solely on a length check (exactly 69 characters) and a suffix check (ending in \".onion\"), without performing proper hostname parsing or onion-domain validation. An unauthenticated attacker who could publish or control web content crawled by the framework could embed a crafted URL containing an IP address or non-onion hostname with a path ending in \".onion\" that satisfied the length and suffix conditions. Such a URL would be extracted, its domain naively sliced from the string, and queued as a legitimate onion crawler task. This allowed unauthenticated content publishers to inject arbitrary non-onion targets into the crawler\u0027s task queue, influencing crawler behavior and potentially directing it toward unintended network resources. The vulnerability required no authentication, no user interaction, and only the ability to place crafted content in a location the framework would crawl. The security impact is a loss of integrity in the crawler\u0027s target selection: the framework processes and acts upon URLs that do not correspond to legitimate .onion services.\u003c/p\u003e"
                }
              ],
              "value": "The Onion module in AIL Framework contained a performance shortcut in its URL extraction logic that accepted URLs as valid .onion targets based solely on a length check (exactly 69 characters) and a suffix check (ending in \".onion\"), without performing proper hostname parsing or onion-domain validation. An unauthenticated attacker who could publish or control web content crawled by the framework could embed a crafted URL containing an IP address or non-onion hostname with a path ending in \".onion\" that satisfied the length and suffix conditions. Such a URL would be extracted, its domain naively sliced from the string, and queued as a legitimate onion crawler task. This allowed unauthenticated content publishers to inject arbitrary non-onion targets into the crawler\u0027s task queue, influencing crawler behavior and potentially directing it toward unintended network resources. The vulnerability required no authentication, no user interaction, and only the ability to place crafted content in a location the framework would crawl. The security impact is a loss of integrity in the crawler\u0027s target selection: the framework processes and acts upon URLs that do not correspond to legitimate .onion services."
            }
          ],
          "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": 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: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-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-25T13:42:16.854Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/ail-project/ail-framework/commit/5c8a68b3d8c7d7b03e5febe4ac5b5aca91826adb"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe length-based shortcut that bypassed onion-domain validation is removed. Every extracted URL is now parsed using the standard URL domain extraction function, and the resulting hostname is validated against the existing onion-domain validation routine before the URL is added to the crawler task set. This ensures that only URLs whose hostname is a genuine .onion domain can be queued as crawler tasks.\u003c/p\u003e"
                }
              ],
              "value": "The length-based shortcut that bypassed onion-domain validation is removed. Every extracted URL is now parsed using the standard URL domain extraction function, and the resulting hostname is validated against the existing onion-domain validation routine before the URL is added to the crawler task set. This ensures that only URLs whose hostname is a genuine .onion domain can be queued as crawler tasks."
            }
          ],
          "title": "AIL Framework Onion Module: Non-Onion URL Accepted as Crawler Task Due to Bypassed Domain Validation",
          "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 affected version range is inferred from the tag_version_boundary metadata indicating the fix commit is 24 commits before the v7.1 tag; the exact version number of the vulnerable release is not specified in the patch.",
                      "The CVSS assumes the attacker can place crafted content in a location the AIL Framework crawler will process; the specific crawling scope and configuration are not detailed in the patch.",
                      "CAPEC-126 (Parameter Tampering) is the closest available attack pattern; the actual attack is content-based URL injection rather than classic request parameter tampering, so the mapping is approximate.",
                      "The impact is assessed as Low Integrity based on the evidence that non-onion URLs are queued as crawler tasks; broader downstream consequences (e.g., SSRF-like effects) are not evidenced in the patch and are not assumed.",
                      "The commit date (24 Sep 2026) is taken as-is from the patch metadata; no independent verification of the timeline is performed."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-126",
                        "rationale": "The attacker tampers with URL parameters embedded in untrusted crawled content to bypass the application\u0027s validation logic and inject non-onion targets into the crawler task queue. CAPEC-126 is the closest available pattern describing manipulation of input parameters to achieve unintended application behavior. The mapping is approximate because the attack vector is content-based injection rather than direct request parameter manipulation, but the core mechanism (crafting input to bypass validation) aligns with this pattern."
                      }
                    ],
                    "commit": "5c8a68b3d8c7d7b03e5febe4ac5b5aca91826adb",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "terrtia"
                      }
                    ],
                    "cvssRationale": "Attack Vector is Network because the attacker publishes crafted content on the web that the framework crawls. Attack Complexity is Low because the attacker only needs to construct a URL of exactly 69 characters ending in .onion with a non-onion hostname. No special Adversary Techniques are required. Privileges Required is None because the attacker is an unauthenticated content publisher. User Interaction is None because the crawler processes the content automatically. The primary impact is Low Integrity on the vulnerable component: the crawler task queue is polluted with non-onion URLs, violating the integrity of the framework\u0027s target selection. No confidentiality or availability impact is evident from the patch. No subsequent component impact is identified in the evidence.",
                    "fixSummary": "The length-based shortcut that bypassed onion-domain validation is removed. Every extracted URL is now parsed using the standard URL domain extraction function, and the resulting hostname is validated against the existing onion-domain validation routine before the URL is added to the crawler task set. This ensures that only URLs whose hostname is a genuine .onion domain can be queued as crawler tasks.",
                    "generatedAt": "2026-09-25T13:37:37.543009Z",
                    "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": "9fbf191128229c1859f3643b5f50921cdf5f36fd70734e8f68a05e237b987d60",
                    "patchSummary": "In bin/modules/Onion.py, the conditional block that checked len(url) == 69 and url.endswith(\u0027.onion\u0027) to shortcut domain extraction (url[7:]) without calling crawlers.is_valid_onion_domain() is removed. The code is replaced with an unconditional call to crawlers.get_url_domain(url) followed by a check that the returned domain is truthy and passes crawlers.is_valid_onion_domain(domain) before adding the domain and URL to the respective sets. Net change: 2 insertions, 9 deletions in a single file.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "5c8a68b3d8c7d7b03e5febe4ac5b5aca91826adb",
                        "patchSha256": "9fbf191128229c1859f3643b5f50921cdf5f36fd70734e8f68a05e237b987d60",
                        "source": "https://github.com/ail-project/ail-framework/commit/5c8a68b3d8c7d7b03e5febe4ac5b5aca91826adb.patch",
                        "sourceUrl": "https://github.com/ail-project/ail-framework/commit/5c8a68b3d8c7d7b03e5febe4ac5b5aca91826adb.patch",
                        "subject": "chg: [security] Onion module, prevent non-onion crawler task"
                      }
                    ],
                    "source": "https://github.com/ail-project/ail-framework/commit/5c8a68b3d8c7d7b03e5febe4ac5b5aca91826adb.patch",
                    "subject": "chg: [security] Onion module, prevent non-onion crawler task",
                    "tagVersionBoundary": {
                      "commits_after_fix": 24,
                      "repository": "https://github.com/ail-project/ail-framework",
                      "tag": "v7.1",
                      "version": "7.1",
                      "version_type": "custom"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-20",
                        "rationale": "The URL input was validated using an insufficient heuristic (string length and suffix) that could be satisfied by non-onion URLs. The proper hostname parsing and onion-domain validation step was bypassed by the shortcut, allowing attacker-controlled URLs to be accepted as valid onion targets."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20276"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-100187",
        "datePublished": "2026-09-25T13:42:16.854Z",
        "dateReserved": "2026-09-25T13:42:12.578Z",
        "dateUpdated": "2026-09-25T14:49:57.208Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-100177 (GCVE-0-2026-100177)

    Vulnerability from cvelistv5 – Published: 2026-09-25 13:35 – Updated: 2026-09-25 14:55
    VLAI
    Title
    Ail Framework Crawler: Missing Cookiejar Authorization Check Allows Cross-Organization Cookiejar Attachment
    Summary
    The AIL Framework crawler task creation API (api_add_crawler_task) contained an insufficient authorization check when a user supplied a cookiejar UUID to attach to a one-shot or scheduled crawler task. The original code only verified that the cookiejar existed and, if its access level was 0, compared the cookiejar's owning user ID to the requesting user ID. It did not validate organizational boundaries, did not account for the requesting user's role. When the cookiejar level was not 0, no access check was performed at all. An authenticated user could therefore reference another organization's cookiejar by UUID and have the crawler use that organization's stored cookies (session tokens, authentication credentials) when performing web crawls, effectively leaking or exfiltrating the victim organization's session data. The vulnerability requires an authenticated user with the ability to create crawler tasks. The attacker must know or guess a valid cookiejar UUID belonging to another organization. The impact is unauthorized access to another organization's stored cookies and session data through the crawler infrastructure.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-25 14:55 UTC
    CWE
    • CWE-639 - Authorization Bypass Through User-Controlled Key
    • CWE-20 - Improper Input Validation
    References
    Impacted products
    Vendor Product Version
    ail project ail framework Affected: unspecified , < 7.1 (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-25 13:30
    Model
    qwen3.8:27b
    Input
    https://github.com/ail-project/ail-framework/commit/3773ca36658c57ce592aebe74e27c855eb64f58a.patch 43e163a1b90d…
    Confidence
    medium
    Commit Subject Patch SHA-256
    3773ca36658c chg: [security] crawler, enforce cookiejar ACL when creating 43e163a1b90d…
    Fix summary

    The cookiejar attachment path in api_add_crawler_task is now validated through the existing api_check_cookiejar_access_acl() function, which enforces organization, user, and role-based access control for the 'view' action on the referenced cookiejar. The user_role parameter is propagated from the API and UI entry points (api_rest.py, crawler_splash.py) into the ACL check. Separately, URL scheme validation is enforced unconditionally: only http and https schemes are accepted, and non-conforming URLs are rejected with a 400 error before any further processing.

    Patch summary

    In bin/lib/crawlers.py: (1) is_global_url() now returns False for any scheme other than http/https (previously returned True for data/file schemes) and handles URLs lacking a netloc by prepending http://. (2) api_validate_global_urls() now rejects non-HTTP/HTTPS schemes with a 400 error before the local-IP filter check. (3) The Cookiejar class gains a get_creator() alias. (4) The CrawlerTask.create() method validates the URL scheme. (5) api_add_crawler_task() replaces the inline level-0 user-ID comparison with a call to api_check_cookiejar_access_acl(cookiejar_uuid, user_org, user_id, user_role, action='view') and accepts a new user_role parameter. (6) api_add_crawler_capture() now calls api_validate_global_urls(). In var/www/blueprints/api_rest.py and crawler_splash.py: user_role is extracted from the authenticated session and passed to api_add_crawler_task().

    CVSS rationale

    The vulnerability is exploitable over the network (AV:N) with low complexity (AC:L) since the attacker only needs to substitute a known or guessed cookiejar UUID in an API request. No attack target manipulation is required (AT:N). An authenticated user with crawler task creation privileges is needed (PR:L). No user interaction is required (UI:N). The vulnerable component itself does not lose confidentiality, integrity, or availability (VC:N, VI:N, VA:N). However, the subsequent impact is high on confidentiality (SC:H) because the attacker gains access to another organization's stored cookies and session tokens via the crawler, which could be used to impersonate the victim on target sites. No subsequent integrity or availability impact is evident (SI:N, SA:N).

    Weakness rationale
    • CWE-639 The cookiejar UUID is a user-supplied identifier (key) that was not properly validated against the requesting user's organization and role. The old code only compared user IDs when level was 0 and skipped the check entirely otherwise, allowing cross-organization access to another user's cookiejar.
    • CWE-20 The URL scheme validation was incorrect: data: and file: schemes were treated as valid global URLs, and the scheme check was skipped when the local-IP filter was disabled. The fix enforces that only http and https schemes are accepted unconditionally.
    Attack pattern rationale
    • CAPEC-1 The attacker tampers with the cookiejar UUID parameter in the crawler task creation API request to reference a resource (cookiejar) belonging to another organization. The system failed to validate that the referenced object was accessible to the requesting user's organization. This is the closest CAPEC pattern to an IDOR-style parameter substitution; no CAPEC specifically named 'Insecure Direct Object Reference' exists, so CAPEC-1 (modifying a request parameter to access unauthorized resources) is the best available match.
    Assumptions to verify
    • The api_check_cookiejar_access_acl() function is assumed to correctly enforce organization, user, and role-based access control; its implementation is not included in this patch.
    • The cookiejar UUID is assumed to be guessable or discoverable by an authenticated user (e.g., via enumeration or information leakage); if UUIDs are truly random and unguessable, exploitability is reduced but the authorization flaw remains.
    • The CVSS assumes the primary security impact is subsequent confidentiality (access to another org's cookies/sessions) rather than direct compromise of the Ail Framework itself.
    • The CAPEC-1 mapping is the closest available pattern for an IDOR/parameter-substitution attack; no CAPEC specifically covers insecure direct object reference, so this mapping carries some uncertainty.
    • The affected version boundary is inferred from the tag v7.1 (26 commits after the fix commit), suggesting the fix landed before the v7.1 release; exact affected version range is not confirmed.
    • The URL scheme validation fix (rejecting data:/file: schemes) is treated as a secondary hardening change within the same patch set rather than a separate vulnerability.
    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-100177",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-25T14:55:38.429027Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-25T14:55:51.640Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "bin/lib/crawlers.py",
                "var/www/blueprints/api_rest.py",
                "var/www/blueprints/crawler_splash.py"
              ],
              "product": "ail framework",
              "programFiles": [
                "bin/lib/crawlers.py",
                "var/www/blueprints/api_rest.py",
                "var/www/blueprints/crawler_splash.py"
              ],
              "repo": "https://github.com/ail-project/ail-framework",
              "vendor": "ail project",
              "versions": [
                {
                  "lessThan": "7.1",
                  "status": "affected",
                  "version": "unspecified",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "terrtia"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "Jeroen Pinoy"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe AIL Framework crawler task creation API (api_add_crawler_task) contained an insufficient authorization check when a user supplied a cookiejar UUID to attach to a one-shot or scheduled crawler task. The original code only verified that the cookiejar existed and, if its access level was 0, compared the cookiejar\u0027s owning user ID to the requesting user ID. It did not validate organizational boundaries, did not account for the requesting user\u0027s role. When the cookiejar level was not 0, no access check was performed at all. An authenticated user could therefore reference another organization\u0027s cookiejar by UUID and have the crawler use that organization\u0027s stored cookies (session tokens, authentication credentials) when performing web crawls, effectively leaking or exfiltrating the victim organization\u0027s session data.\u003cbr\u003e\u003c/p\u003e\u003cp\u003eThe vulnerability requires an authenticated user with the ability to create crawler tasks. The attacker must know or guess a valid cookiejar UUID belonging to another organization. The impact is unauthorized access to another organization\u0027s stored cookies and session data through the crawler infrastructure.\u003c/p\u003e"
                }
              ],
              "value": "The AIL Framework crawler task creation API (api_add_crawler_task) contained an insufficient authorization check when a user supplied a cookiejar UUID to attach to a one-shot or scheduled crawler task. The original code only verified that the cookiejar existed and, if its access level was 0, compared the cookiejar\u0027s owning user ID to the requesting user ID. It did not validate organizational boundaries, did not account for the requesting user\u0027s role. When the cookiejar level was not 0, no access check was performed at all. An authenticated user could therefore reference another organization\u0027s cookiejar by UUID and have the crawler use that organization\u0027s stored cookies (session tokens, authentication credentials) when performing web crawls, effectively leaking or exfiltrating the victim organization\u0027s session data.\n\n\nThe vulnerability requires an authenticated user with the ability to create crawler tasks. The attacker must know or guess a valid cookiejar UUID belonging to another organization. The impact is unauthorized access to another organization\u0027s stored cookies and session data through the crawler infrastructure."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Tamper with URLs"
                }
              ]
            }
          ],
          "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-639",
                  "description": "CWE-639 Authorization Bypass Through User-Controlled Key",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-25T13:35:50.465Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/ail-project/ail-framework/commit/3773ca36658c57ce592aebe74e27c855eb64f58a"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe cookiejar attachment path in api_add_crawler_task is now validated through the existing api_check_cookiejar_access_acl() function, which enforces organization, user, and role-based access control for the \u0027view\u0027 action on the referenced cookiejar. The user_role parameter is propagated from the API and UI entry points (api_rest.py, crawler_splash.py) into the ACL check. Separately, URL scheme validation is enforced unconditionally: only http and https schemes are accepted, and non-conforming URLs are rejected with a 400 error before any further processing.\u003c/p\u003e"
                }
              ],
              "value": "The cookiejar attachment path in api_add_crawler_task is now validated through the existing api_check_cookiejar_access_acl() function, which enforces organization, user, and role-based access control for the \u0027view\u0027 action on the referenced cookiejar. The user_role parameter is propagated from the API and UI entry points (api_rest.py, crawler_splash.py) into the ACL check. Separately, URL scheme validation is enforced unconditionally: only http and https schemes are accepted, and non-conforming URLs are rejected with a 400 error before any further processing."
            }
          ],
          "title": "Ail Framework Crawler: Missing Cookiejar Authorization Check Allows Cross-Organization Cookiejar Attachment",
          "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 api_check_cookiejar_access_acl() function is assumed to correctly enforce organization, user, and role-based access control; its implementation is not included in this patch.",
                      "The cookiejar UUID is assumed to be guessable or discoverable by an authenticated user (e.g., via enumeration or information leakage); if UUIDs are truly random and unguessable, exploitability is reduced but the authorization flaw remains.",
                      "The CVSS assumes the primary security impact is subsequent confidentiality (access to another org\u0027s cookies/sessions) rather than direct compromise of the Ail Framework itself.",
                      "The CAPEC-1 mapping is the closest available pattern for an IDOR/parameter-substitution attack; no CAPEC specifically covers insecure direct object reference, so this mapping carries some uncertainty.",
                      "The affected version boundary is inferred from the tag v7.1 (26 commits after the fix commit), suggesting the fix landed before the v7.1 release; exact affected version range is not confirmed.",
                      "The URL scheme validation fix (rejecting data:/file: schemes) is treated as a secondary hardening change within the same patch set rather than a separate vulnerability."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "The attacker tampers with the cookiejar UUID parameter in the crawler task creation API request to reference a resource (cookiejar) belonging to another organization. The system failed to validate that the referenced object was accessible to the requesting user\u0027s organization. This is the closest CAPEC pattern to an IDOR-style parameter substitution; no CAPEC specifically named \u0027Insecure Direct Object Reference\u0027 exists, so CAPEC-1 (modifying a request parameter to access unauthorized resources) is the best available match."
                      }
                    ],
                    "commit": "3773ca36658c57ce592aebe74e27c855eb64f58a",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "terrtia"
                      }
                    ],
                    "cvssRationale": "The vulnerability is exploitable over the network (AV:N) with low complexity (AC:L) since the attacker only needs to substitute a known or guessed cookiejar UUID in an API request. No attack target manipulation is required (AT:N). An authenticated user with crawler task creation privileges is needed (PR:L). No user interaction is required (UI:N). The vulnerable component itself does not lose confidentiality, integrity, or availability (VC:N, VI:N, VA:N). However, the subsequent impact is high on confidentiality (SC:H) because the attacker gains access to another organization\u0027s stored cookies and session tokens via the crawler, which could be used to impersonate the victim on target sites. No subsequent integrity or availability impact is evident (SI:N, SA:N).",
                    "fixSummary": "The cookiejar attachment path in api_add_crawler_task is now validated through the existing api_check_cookiejar_access_acl() function, which enforces organization, user, and role-based access control for the \u0027view\u0027 action on the referenced cookiejar. The user_role parameter is propagated from the API and UI entry points (api_rest.py, crawler_splash.py) into the ACL check. Separately, URL scheme validation is enforced unconditionally: only http and https schemes are accepted, and non-conforming URLs are rejected with a 400 error before any further processing.",
                    "generatedAt": "2026-09-25T13:30:48.386437Z",
                    "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": "43e163a1b90d5926293d5dbd7982d46241f08d7a9d2cb0edf86c963f794afac5",
                    "patchSummary": "In bin/lib/crawlers.py: (1) is_global_url() now returns False for any scheme other than http/https (previously returned True for data/file schemes) and handles URLs lacking a netloc by prepending http://. (2) api_validate_global_urls() now rejects non-HTTP/HTTPS schemes with a 400 error before the local-IP filter check. (3) The Cookiejar class gains a get_creator() alias. (4) The CrawlerTask.create() method validates the URL scheme. (5) api_add_crawler_task() replaces the inline level-0 user-ID comparison with a call to api_check_cookiejar_access_acl(cookiejar_uuid, user_org, user_id, user_role, action=\u0027view\u0027) and accepts a new user_role parameter. (6) api_add_crawler_capture() now calls api_validate_global_urls(). In var/www/blueprints/api_rest.py and crawler_splash.py: user_role is extracted from the authenticated session and passed to api_add_crawler_task().",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "3773ca36658c57ce592aebe74e27c855eb64f58a",
                        "patchSha256": "43e163a1b90d5926293d5dbd7982d46241f08d7a9d2cb0edf86c963f794afac5",
                        "source": "https://github.com/ail-project/ail-framework/commit/3773ca36658c57ce592aebe74e27c855eb64f58a.patch",
                        "sourceUrl": "https://github.com/ail-project/ail-framework/commit/3773ca36658c57ce592aebe74e27c855eb64f58a.patch",
                        "subject": "chg: [security] crawler, enforce cookiejar ACL when creating"
                      }
                    ],
                    "source": "https://github.com/ail-project/ail-framework/commit/3773ca36658c57ce592aebe74e27c855eb64f58a.patch",
                    "subject": "chg: [security] crawler, enforce cookiejar ACL when creating",
                    "tagVersionBoundary": {
                      "commits_after_fix": 26,
                      "repository": "https://github.com/ail-project/ail-framework",
                      "tag": "v7.1",
                      "version": "7.1",
                      "version_type": "custom"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-639",
                        "rationale": "The cookiejar UUID is a user-supplied identifier (key) that was not properly validated against the requesting user\u0027s organization and role. The old code only compared user IDs when level was 0 and skipped the check entirely otherwise, allowing cross-organization access to another user\u0027s cookiejar."
                      },
                      {
                        "cweId": "CWE-20",
                        "rationale": "The URL scheme validation was incorrect: data: and file: schemes were treated as valid global URLs, and the scheme check was skipped when the local-IP filter was disabled. The fix enforces that only http and https schemes are accepted unconditionally."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20183"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-100177",
        "datePublished": "2026-09-25T13:35:50.465Z",
        "dateReserved": "2026-09-25T13:35:37.184Z",
        "dateUpdated": "2026-09-25T14:55:51.640Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-100176 (GCVE-0-2026-100176)

    Vulnerability from cvelistv5 – Published: 2026-09-25 13:29 – Updated: 2026-09-25 14:59
    VLAI
    Title
    Stored Cross-Site Scripting (XSS) in AIL Framework Username Timeline Tooltip
    Summary
    The AIL Framework's username timeline feature is vulnerable to stored cross-site scripting (XSS). Usernames imported from chats and crawled forums are stored without character restrictions. When an authenticated analyst views the username timeline, the application renders these stored usernames into the DOM using D3's html() method in the tooltip. Because the username value (d.obj) is interpolated directly into an HTML string without sanitization, a crafted username containing HTML event handlers (e.g., <img src=x onerror=alert(1)>) will execute arbitrary JavaScript in the analyst's browser when the analyst hovers over the corresponding timeline entry. The attack requires the victim to be an authenticated analyst with access to the timeline view and to interact with the malicious timeline entry (hover). Successful exploitation can lead to session hijacking, data exfiltration, or unauthorized actions performed within the analyst's authenticated session. The vulnerability resides in the client-side JavaScript file var/www/static/js/d3/timeline_basic.js.
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-25 14:56 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    References
    Impacted products
    Vendor Product Version
    ail project ail framework Affected: unspecified , < 7.1 (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-25 13:24
    Model
    qwen3.8:27b
    Input
    https://github.com/ail-project/ail-framework/commit/455dd92c4179c53204368d93681ded4b57e31643.patch 36262636a3a7…
    Confidence
    medium
    Commit Subject Patch SHA-256
    455dd92c4179 chg: [security] fix XSS in username timeline tooltip. 36262636a3a7…
    Fix summary

    The fix applies the existing sanitize_text() helper to the user-controlled username value (d.obj) immediately before it is interpolated into the D3 tooltip HTML string. This ensures that any HTML or script content embedded in the stored username is neutralized before DOM insertion, preventing script execution while preserving the tooltip's intended formatting (line breaks and date/time display).

    Patch summary

    In var/www/static/js/d3/timeline_basic.js, the single line constructing the tooltip HTML was changed from tooltip.html(`${d.obj}<br>...`) to tooltip.html(`${sanitize_text(d.obj)}<br>...`). The only modification is wrapping the untrusted d.obj variable with the sanitize_text() function call at the HTML sink, leaving the rest of the tooltip template (br tags, date formatting) unchanged.

    CVSS rationale

    AV:N: The vulnerability is in a web application accessible over the network. AC:L: The attacker only needs to craft a username with HTML/JS in a chat or forum that gets crawled; no race conditions or complex conditions are needed. AT:N: No attack on the target system is required; the malicious username is stored as part of normal data import. PR:N: The attacker does not need any account or privilege on the AIL Framework; they only need to be a user in a source chat/forum. UI:A: The victim (analyst) must actively hover over the specific timeline entry to trigger script execution. VC:H: XSS in an authenticated analyst session can expose sensitive intelligence data, session tokens, and credentials. VI:H: The attacker can perform actions as the analyst, modify data, or exfiltrate information. VA:N: No impact on availability. SC/SI/SA:N: No subsequent system impact is evidenced.

    Weakness rationale
    • CWE-79 The patch inserts a user-controlled value (username from imported chats/forums) into an HTML context via D3's html() method without sanitization. The fix adds sanitize_text() at the sink, confirming the root cause is missing output encoding/neutralization of untrusted data in an HTML context, which is the definition of CWE-79 (stored XSS variant).
    Attack pattern rationale
    • CAPEC-1 CAPEC-1 describes the general pattern of injecting client-side scripts into web pages via untrusted input. The patch evidence shows a stored username (untrusted input from chats/forums) being rendered into an HTML tooltip without sanitization, matching the stored-XSS sub-pattern of CAPEC-1. This is the closest and most direct CAPEC mapping for an XSS vulnerability where attacker-controlled data is persisted and later rendered in a victim's browser.
    Assumptions to verify
    • The UI:A (Active) user interaction metric assumes the analyst must deliberately hover over the specific timeline entry to trigger the XSS; passive rendering without hover is not evidenced in the patch.
    • The affected version boundary is inferred from the tag_version_boundary metadata (v7.1, 29 commits after fix); the exact last affected and first fixed version numbers are not explicitly stated in the patch.
    • PR:N assumes the attacker does not need an account on the AIL Framework itself, only a presence in a crawled chat or forum source; if the platform requires the attacker to be a registered user to have their username crawled, PR:L might be more appropriate.
    • The CAPEC-1 mapping is the closest available pattern for stored XSS; no more specific CAPEC ID for 'stored XSS via imported data rendered in a tooltip' exists in the CAPEC catalog.
    • The sanitize_text() helper is assumed to perform adequate HTML entity encoding or equivalent neutralization; its implementation is not shown in the patch.
    • VC:H and VI:H reflect the sensitivity of an intelligence-analysis platform where an authenticated analyst session may contain classified or highly sensitive data; if the deployment context is less sensitive, lower impact ratings could 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 4 9 medium 6
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-100176",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "total"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-25T14:56:38.970855Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-25T14:59:28.644Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "username timeline (D3 timeline_basic)"
              ],
              "product": "ail framework",
              "programFiles": [
                "var/www/static/js/d3/timeline_basic.js"
              ],
              "repo": "https://github.com/ail-project/ail-framework",
              "vendor": "ail project",
              "versions": [
                {
                  "lessThan": "7.1",
                  "status": "affected",
                  "version": "unspecified",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Aurelien Thirion"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "Jeroen Pinoy"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe AIL Framework\u0027s username timeline feature is vulnerable to stored cross-site scripting (XSS). Usernames imported from chats and crawled forums are stored without character restrictions. When an authenticated analyst views the username timeline, the application renders these stored usernames into the DOM using D3\u0027s html() method in the tooltip. Because the username value (d.obj) is interpolated directly into an HTML string without sanitization, a crafted username containing HTML event handlers (e.g., \u0026lt;img src=x onerror=alert(1)\u0026gt;) will execute arbitrary JavaScript in the analyst\u0027s browser when the analyst hovers over the corresponding timeline entry. The attack requires the victim to be an authenticated analyst with access to the timeline view and to interact with the malicious timeline entry (hover). Successful exploitation can lead to session hijacking, data exfiltration, or unauthorized actions performed within the analyst\u0027s authenticated session. The vulnerability resides in the client-side JavaScript file var/www/static/js/d3/timeline_basic.js.\u003c/p\u003e"
                }
              ],
              "value": "The AIL Framework\u0027s username timeline feature is vulnerable to stored cross-site scripting (XSS). Usernames imported from chats and crawled forums are stored without character restrictions. When an authenticated analyst views the username timeline, the application renders these stored usernames into the DOM using D3\u0027s html() method in the tooltip. Because the username value (d.obj) is interpolated directly into an HTML string without sanitization, a crafted username containing HTML event handlers (e.g., \u003cimg src=x onerror=alert(1)\u003e) will execute arbitrary JavaScript in the analyst\u0027s browser when the analyst hovers over the corresponding timeline entry. The attack requires the victim to be an authenticated analyst with access to the timeline view and to interact with the malicious timeline entry (hover). Successful exploitation can lead to session hijacking, data exfiltration, or unauthorized actions performed within the analyst\u0027s authenticated session. The vulnerability resides in the client-side JavaScript file var/www/static/js/d3/timeline_basic.js."
            }
          ],
          "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": "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: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-79",
                  "description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-25T13:29:17.333Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/ail-project/ail-framework/commit/455dd92c4179c53204368d93681ded4b57e31643"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix applies the existing sanitize_text() helper to the user-controlled username value (d.obj) immediately before it is interpolated into the D3 tooltip HTML string. This ensures that any HTML or script content embedded in the stored username is neutralized before DOM insertion, preventing script execution while preserving the tooltip\u0027s intended formatting (line breaks and date/time display).\u003c/p\u003e"
                }
              ],
              "value": "The fix applies the existing sanitize_text() helper to the user-controlled username value (d.obj) immediately before it is interpolated into the D3 tooltip HTML string. This ensures that any HTML or script content embedded in the stored username is neutralized before DOM insertion, preventing script execution while preserving the tooltip\u0027s intended formatting (line breaks and date/time display)."
            }
          ],
          "title": "Stored Cross-Site Scripting (XSS) in AIL Framework Username Timeline Tooltip",
          "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 UI:A (Active) user interaction metric assumes the analyst must deliberately hover over the specific timeline entry to trigger the XSS; passive rendering without hover is not evidenced in the patch.",
                      "The affected version boundary is inferred from the tag_version_boundary metadata (v7.1, 29 commits after fix); the exact last affected and first fixed version numbers are not explicitly stated in the patch.",
                      "PR:N assumes the attacker does not need an account on the AIL Framework itself, only a presence in a crawled chat or forum source; if the platform requires the attacker to be a registered user to have their username crawled, PR:L might be more appropriate.",
                      "The CAPEC-1 mapping is the closest available pattern for stored XSS; no more specific CAPEC ID for \u0027stored XSS via imported data rendered in a tooltip\u0027 exists in the CAPEC catalog.",
                      "The sanitize_text() helper is assumed to perform adequate HTML entity encoding or equivalent neutralization; its implementation is not shown in the patch.",
                      "VC:H and VI:H reflect the sensitivity of an intelligence-analysis platform where an authenticated analyst session may contain classified or highly sensitive data; if the deployment context is less sensitive, lower impact ratings could apply."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "CAPEC-1 describes the general pattern of injecting client-side scripts into web pages via untrusted input. The patch evidence shows a stored username (untrusted input from chats/forums) being rendered into an HTML tooltip without sanitization, matching the stored-XSS sub-pattern of CAPEC-1. This is the closest and most direct CAPEC mapping for an XSS vulnerability where attacker-controlled data is persisted and later rendered in a victim\u0027s browser."
                      }
                    ],
                    "commit": "455dd92c4179c53204368d93681ded4b57e31643",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "terrtia"
                      }
                    ],
                    "cvssRationale": "AV:N: The vulnerability is in a web application accessible over the network. AC:L: The attacker only needs to craft a username with HTML/JS in a chat or forum that gets crawled; no race conditions or complex conditions are needed. AT:N: No attack on the target system is required; the malicious username is stored as part of normal data import. PR:N: The attacker does not need any account or privilege on the AIL Framework; they only need to be a user in a source chat/forum. UI:A: The victim (analyst) must actively hover over the specific timeline entry to trigger script execution. VC:H: XSS in an authenticated analyst session can expose sensitive intelligence data, session tokens, and credentials. VI:H: The attacker can perform actions as the analyst, modify data, or exfiltrate information. VA:N: No impact on availability. SC/SI/SA:N: No subsequent system impact is evidenced.",
                    "fixSummary": "The fix applies the existing sanitize_text() helper to the user-controlled username value (d.obj) immediately before it is interpolated into the D3 tooltip HTML string. This ensures that any HTML or script content embedded in the stored username is neutralized before DOM insertion, preventing script execution while preserving the tooltip\u0027s intended formatting (line breaks and date/time display).",
                    "generatedAt": "2026-09-25T13:24:29.029450Z",
                    "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": "36262636a3a75bbee1ac4f863ce7a5ce7939eb2e21fed5ede98403d38c29ec40",
                    "patchSummary": "In var/www/static/js/d3/timeline_basic.js, the single line constructing the tooltip HTML was changed from tooltip.html(`${d.obj}\u003cbr\u003e...`) to tooltip.html(`${sanitize_text(d.obj)}\u003cbr\u003e...`). The only modification is wrapping the untrusted d.obj variable with the sanitize_text() function call at the HTML sink, leaving the rest of the tooltip template (br tags, date formatting) unchanged.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "455dd92c4179c53204368d93681ded4b57e31643",
                        "patchSha256": "36262636a3a75bbee1ac4f863ce7a5ce7939eb2e21fed5ede98403d38c29ec40",
                        "source": "https://github.com/ail-project/ail-framework/commit/455dd92c4179c53204368d93681ded4b57e31643.patch",
                        "sourceUrl": "https://github.com/ail-project/ail-framework/commit/455dd92c4179c53204368d93681ded4b57e31643.patch",
                        "subject": "chg: [security] fix XSS in username timeline tooltip."
                      }
                    ],
                    "source": "https://github.com/ail-project/ail-framework/commit/455dd92c4179c53204368d93681ded4b57e31643.patch",
                    "subject": "chg: [security] fix XSS in username timeline tooltip.",
                    "tagVersionBoundary": {
                      "commits_after_fix": 29,
                      "repository": "https://github.com/ail-project/ail-framework",
                      "tag": "v7.1",
                      "version": "7.1",
                      "version_type": "custom"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "The patch inserts a user-controlled value (username from imported chats/forums) into an HTML context via D3\u0027s html() method without sanitization. The fix adds sanitize_text() at the sink, confirming the root cause is missing output encoding/neutralization of untrusted data in an HTML context, which is the definition of CWE-79 (stored XSS variant)."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20279"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-100176",
        "datePublished": "2026-09-25T13:29:17.333Z",
        "dateReserved": "2026-09-25T13:29:14.017Z",
        "dateUpdated": "2026-09-25T14:59:28.644Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-100174 (GCVE-0-2026-100174)

    Vulnerability from cvelistv5 – Published: 2026-09-25 13:22 – Updated: 2026-09-25 15:14
    VLAI
    Title
    Stored Cross-Site Scripting (XSS) in AIL Framework Tag Selector via Unescaped Tag Names
    Summary
    The AIL Framework tag selector component (var/www/static/js/tags.js) is vulnerable to stored cross-site scripting (XSS). A user with the ability to create a custom tag could embed an HTML payload containing JavaScript event handlers (e.g., <img src=x onerror=alert(1)> or <svg onload=...>) in the tag name. When another authenticated user opened a page containing the tag selector, the malicious tag name was inserted into the DOM using jQuery's html property, causing the embedded script to execute in the victim's browser context. The vulnerable code paths affected both the suggestion/combo-item rendering (_renderComboItems) and the selected-tag rendering logic. In both cases, the display value derived from the tag's displayField was passed directly to the html property of a jQuery element constructor, which parses and inserts the string as raw HTML rather than as text. Preconditions: the attacker must have an authenticated account with permission to create custom tags, and the victim must be an authenticated user who views a page that renders the tag selector with the attacker's stored tag. The attack is stored (persistent) and does not require the victim to perform any action beyond loading the page. Security impact: successful exploitation allows arbitrary JavaScript execution in the victim's browser within the application's origin, potentially leading to session hijacking, unauthorized data access, form manipulation, or further client-side attacks.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-25 15:14 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    • CWE-94 - Improper Control of Generation of Code ('Code Injection')
    References
    Impacted products
    Vendor Product Version
    ail project ail framework Affected: 0 , < 7.1 (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-25 13:16
    Model
    qwen3.8:27b
    Input
    https://github.com/ail-project/ail-framework/commit/b2d0ed05f6cf79b2312a3f1f923d0d1a5d7a9edb.patch 2d147dabcc9b…
    Confidence
    medium
    Commit Subject Patch SHA-256
    b2d0ed05f6cf chg: [security] prevent stored XSS in 2d147dabcc9b…
    Fix summary

    The fix ensures that tag names and display values are rendered as plain text rather than as HTML when no custom renderer is explicitly configured. In the suggestion rendering path, the default (non-renderer) case now uses jQuery's .text() method, which HTML-escapes the content. In the selection rendering path, the default case uses document.createTextNode() to insert the value as a text node. Custom renderers, which are developer-supplied and trusted to produce safe HTML, continue to use .html() or .prepend() with raw HTML. The eval() call was also replaced with JSON.parse() to eliminate a code-injection vector.

    Patch summary

    In var/www/static/js/tags.js: (1) Replaced eval(data) with JSON.parse(data) for parsing array-like data strings. (2) In _renderComboItems, introduced a hasRenderer flag; when no custom renderer is set, the displayed value is inserted via resultItemEl.text(displayed) instead of the html property in the jQuery constructor. (3) In the selection rendering block, introduced a hasSelectionRenderer flag; when no custom selection renderer is set, the value is prepended as a text node via document.createTextNode(selectedItemHtml) instead of being set through the html property. (4) The comma separator for text-mode selections is now appended as a text node rather than concatenated into an HTML string.

    CVSS rationale

    AV:N: The vulnerability is exploitable over the network via a web application. AC:L: No race conditions or special timing are required; the payload is stored and triggers on page load. AT:N: No manipulation of the attack target is needed; the stored payload executes automatically. PR:L: The attacker needs a low-privilege authenticated account with permission to create custom tags. UI:P: The victim passively interacts by loading a page that contains the tag selector; no active click or download is required. VC:L: The XSS can read data from the victim's session and page context. VI:L: The XSS can modify page content and submit forms. VA:N: No availability impact is evident. SC:L: The compromised session can access other resources within the same origin. SI:L: The attacker can modify data through the victim's authenticated session. SA:N: No availability impact on subsequent components.

    Weakness rationale
    • CWE-79 The patch explicitly addresses stored XSS: user-controlled tag names were inserted into the DOM as HTML via jQuery's html property without escaping. The fix renders these values as text nodes, which is the canonical remediation for CWE-79. The commit subject line also explicitly states 'prevent stored XSS'.
    • CWE-94 The replacement of eval(data) with JSON.parse(data) addresses a secondary code-injection weakness where a crafted data string could execute arbitrary JavaScript. This is a contributing factor but the primary vulnerability is the stored XSS in tag rendering.
    Attack pattern rationale
    • CAPEC-66 CAPEC-66 describes the general XSS attack pattern where attacker-controlled input is reflected or stored and later rendered as executable content in a victim's browser. This patch fixes a stored XSS variant where malicious tag names are persisted and rendered as HTML. The mapping is direct and well-supported by the commit message and code changes. No more specific CAPEC entry for stored XSS in a tag/selector widget exists in the CAPEC catalog, making CAPEC-66 the closest and most appropriate match.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary metadata indicating the fix commit is 31 commits before the v7.1 tag; exact version boundaries are not explicitly stated in the patch.
    • The UI:P (Passive) rating assumes the victim only needs to load a page containing the tag selector; if the application requires the victim to explicitly open a specific dialog or widget, UI:A (Active) could be more appropriate.
    • The CAPEC-66 mapping is the closest available pattern; no CAPEC entry specifically covers stored XSS in a tag-selector UI component, so the general XSS pattern is used.
    • The PR:L rating assumes that creating a custom tag requires only a basic authenticated account; if tag creation requires elevated privileges, PR:H would be more appropriate.
    • The eval() to JSON.parse() change is treated as a secondary hardening fix within the same patch set; the primary vulnerability addressed is the stored XSS in tag rendering.
    • No specific reporter or finder is identified in the patch metadata or commit message; only the remediation developer (commit author) is credited.
    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-100174",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-25T15:14:24.607198Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-25T15:14:51.969Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "tag selector (tags.js)"
              ],
              "product": "ail framework",
              "programFiles": [
                "var/www/static/js/tags.js"
              ],
              "repo": "https://github.com/ail-project/ail-framework",
              "vendor": "ail project",
              "versions": [
                {
                  "lessThan": "7.1",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Aurelien Thirion"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "Jeroen Pinoy"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe AIL Framework tag selector component (var/www/static/js/tags.js) is vulnerable to stored cross-site scripting (XSS). A user with the ability to create a custom tag could embed an HTML payload containing JavaScript event handlers (e.g., \u0026lt;img src=x onerror=alert(1)\u0026gt; or \u0026lt;svg onload=...\u0026gt;) in the tag name. When another authenticated user opened a page containing the tag selector, the malicious tag name was inserted into the DOM using jQuery\u0027s html property, causing the embedded script to execute in the victim\u0027s browser context.\u003c/p\u003e\u003cp\u003eThe vulnerable code paths affected both the suggestion/combo-item rendering (_renderComboItems) and the selected-tag rendering logic. In both cases, the display value derived from the tag\u0027s displayField was passed directly to the html property of a jQuery element constructor, which parses and inserts the string as raw HTML rather than as text.\u003c/p\u003e\u003cp\u003ePreconditions: the attacker must have an authenticated account with permission to create custom tags, and the victim must be an authenticated user who views a page that renders the tag selector with the attacker\u0027s stored tag. The attack is stored (persistent) and does not require the victim to perform any action beyond loading the page.\u003c/p\u003e\u003cp\u003eSecurity impact: successful exploitation allows arbitrary JavaScript execution in the victim\u0027s browser within the application\u0027s origin, potentially leading to session hijacking, unauthorized data access, form manipulation, or further client-side attacks.\u003c/p\u003e"
                }
              ],
              "value": "The AIL Framework tag selector component (var/www/static/js/tags.js) is vulnerable to stored cross-site scripting (XSS). A user with the ability to create a custom tag could embed an HTML payload containing JavaScript event handlers (e.g., \u003cimg src=x onerror=alert(1)\u003e or \u003csvg onload=...\u003e) in the tag name. When another authenticated user opened a page containing the tag selector, the malicious tag name was inserted into the DOM using jQuery\u0027s html property, causing the embedded script to execute in the victim\u0027s browser context.\n\nThe vulnerable code paths affected both the suggestion/combo-item rendering (_renderComboItems) and the selected-tag rendering logic. In both cases, the display value derived from the tag\u0027s displayField was passed directly to the html property of a jQuery element constructor, which parses and inserts the string as raw HTML rather than as text.\n\nPreconditions: the attacker must have an authenticated account with permission to create custom tags, and the victim must be an authenticated user who views a page that renders the tag selector with the attacker\u0027s stored tag. The attack is stored (persistent) and does not require the victim to perform any action beyond loading the page.\n\nSecurity impact: successful exploitation allows arbitrary JavaScript execution in the victim\u0027s browser within the application\u0027s origin, potentially leading to session hijacking, unauthorized data access, form manipulation, or further client-side attacks."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-66",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-66 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 During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-94",
                  "description": "CWE-94 Improper Control of Generation of Code (\u0027Code Injection\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-25T13:22:38.669Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/ail-project/ail-framework/commit/b2d0ed05f6cf79b2312a3f1f923d0d1a5d7a9edb"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix ensures that tag names and display values are rendered as plain text rather than as HTML when no custom renderer is explicitly configured. In the suggestion rendering path, the default (non-renderer) case now uses jQuery\u0027s .text() method, which HTML-escapes the content. In the selection rendering path, the default case uses document.createTextNode() to insert the value as a text node. Custom renderers, which are developer-supplied and trusted to produce safe HTML, continue to use .html() or .prepend() with raw HTML. The eval() call was also replaced with JSON.parse() to eliminate a code-injection vector.\u003c/p\u003e"
                }
              ],
              "value": "The fix ensures that tag names and display values are rendered as plain text rather than as HTML when no custom renderer is explicitly configured. In the suggestion rendering path, the default (non-renderer) case now uses jQuery\u0027s .text() method, which HTML-escapes the content. In the selection rendering path, the default case uses document.createTextNode() to insert the value as a text node. Custom renderers, which are developer-supplied and trusted to produce safe HTML, continue to use .html() or .prepend() with raw HTML. The eval() call was also replaced with JSON.parse() to eliminate a code-injection vector."
            }
          ],
          "title": "Stored Cross-Site Scripting (XSS) in AIL Framework Tag Selector via Unescaped Tag Names",
          "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 affected version range is inferred from the tag_version_boundary metadata indicating the fix commit is 31 commits before the v7.1 tag; exact version boundaries are not explicitly stated in the patch.",
                      "The UI:P (Passive) rating assumes the victim only needs to load a page containing the tag selector; if the application requires the victim to explicitly open a specific dialog or widget, UI:A (Active) could be more appropriate.",
                      "The CAPEC-66 mapping is the closest available pattern; no CAPEC entry specifically covers stored XSS in a tag-selector UI component, so the general XSS pattern is used.",
                      "The PR:L rating assumes that creating a custom tag requires only a basic authenticated account; if tag creation requires elevated privileges, PR:H would be more appropriate.",
                      "The eval() to JSON.parse() change is treated as a secondary hardening fix within the same patch set; the primary vulnerability addressed is the stored XSS in tag rendering.",
                      "No specific reporter or finder is identified in the patch metadata or commit message; only the remediation developer (commit author) is credited."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-66",
                        "rationale": "CAPEC-66 describes the general XSS attack pattern where attacker-controlled input is reflected or stored and later rendered as executable content in a victim\u0027s browser. This patch fixes a stored XSS variant where malicious tag names are persisted and rendered as HTML. The mapping is direct and well-supported by the commit message and code changes. No more specific CAPEC entry for stored XSS in a tag/selector widget exists in the CAPEC catalog, making CAPEC-66 the closest and most appropriate match."
                      }
                    ],
                    "commit": "b2d0ed05f6cf79b2312a3f1f923d0d1a5d7a9edb",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "terrtia"
                      }
                    ],
                    "cvssRationale": "AV:N: The vulnerability is exploitable over the network via a web application. AC:L: No race conditions or special timing are required; the payload is stored and triggers on page load. AT:N: No manipulation of the attack target is needed; the stored payload executes automatically. PR:L: The attacker needs a low-privilege authenticated account with permission to create custom tags. UI:P: The victim passively interacts by loading a page that contains the tag selector; no active click or download is required. VC:L: The XSS can read data from the victim\u0027s session and page context. VI:L: The XSS can modify page content and submit forms. VA:N: No availability impact is evident. SC:L: The compromised session can access other resources within the same origin. SI:L: The attacker can modify data through the victim\u0027s authenticated session. SA:N: No availability impact on subsequent components.",
                    "fixSummary": "The fix ensures that tag names and display values are rendered as plain text rather than as HTML when no custom renderer is explicitly configured. In the suggestion rendering path, the default (non-renderer) case now uses jQuery\u0027s .text() method, which HTML-escapes the content. In the selection rendering path, the default case uses document.createTextNode() to insert the value as a text node. Custom renderers, which are developer-supplied and trusted to produce safe HTML, continue to use .html() or .prepend() with raw HTML. The eval() call was also replaced with JSON.parse() to eliminate a code-injection vector.",
                    "generatedAt": "2026-09-25T13:16:06.156442Z",
                    "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": "2d147dabcc9bebce7722917d80f13e49a10f9a2a4089ec6207cce9edb9187f77",
                    "patchSummary": "In var/www/static/js/tags.js: (1) Replaced eval(data) with JSON.parse(data) for parsing array-like data strings. (2) In _renderComboItems, introduced a hasRenderer flag; when no custom renderer is set, the displayed value is inserted via resultItemEl.text(displayed) instead of the html property in the jQuery constructor. (3) In the selection rendering block, introduced a hasSelectionRenderer flag; when no custom selection renderer is set, the value is prepended as a text node via document.createTextNode(selectedItemHtml) instead of being set through the html property. (4) The comma separator for text-mode selections is now appended as a text node rather than concatenated into an HTML string.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "b2d0ed05f6cf79b2312a3f1f923d0d1a5d7a9edb",
                        "patchSha256": "2d147dabcc9bebce7722917d80f13e49a10f9a2a4089ec6207cce9edb9187f77",
                        "source": "https://github.com/ail-project/ail-framework/commit/b2d0ed05f6cf79b2312a3f1f923d0d1a5d7a9edb.patch",
                        "sourceUrl": "https://github.com/ail-project/ail-framework/commit/b2d0ed05f6cf79b2312a3f1f923d0d1a5d7a9edb.patch",
                        "subject": "chg: [security] prevent stored XSS in"
                      }
                    ],
                    "source": "https://github.com/ail-project/ail-framework/commit/b2d0ed05f6cf79b2312a3f1f923d0d1a5d7a9edb.patch",
                    "subject": "chg: [security] prevent stored XSS in",
                    "tagVersionBoundary": {
                      "commits_after_fix": 31,
                      "repository": "https://github.com/ail-project/ail-framework",
                      "tag": "v7.1",
                      "version": "7.1",
                      "version_type": "custom"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "The patch explicitly addresses stored XSS: user-controlled tag names were inserted into the DOM as HTML via jQuery\u0027s html property without escaping. The fix renders these values as text nodes, which is the canonical remediation for CWE-79. The commit subject line also explicitly states \u0027prevent stored XSS\u0027."
                      },
                      {
                        "cweId": "CWE-94",
                        "rationale": "The replacement of eval(data) with JSON.parse(data) addresses a secondary code-injection weakness where a crafted data string could execute arbitrary JavaScript. This is a contributing factor but the primary vulnerability is the stored XSS in tag rendering."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20269"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-100174",
        "datePublished": "2026-09-25T13:22:38.669Z",
        "dateReserved": "2026-09-25T13:22:15.197Z",
        "dateUpdated": "2026-09-25T15:14:51.969Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-100172 (GCVE-0-2026-100172)

    Vulnerability from cvelistv5 – Published: 2026-09-25 13:13 – Updated: 2026-09-25 15:19
    VLAI
    Title
    Stored XSS in AIL Framework extracted-match popovers via unescaped dynamic values in HTML-enabled data-content attributes
    Summary
    The AIL Framework (ail-project/ail-framework) contains a stored cross-site scripting (XSS) vulnerability in two Jinja2 templates that render popovers for matched, tracked, or tagged content: var/www/templates/chats_explorer/block_message.html and var/www/templates/objects/item/show_item.html. In both templates, dynamic values associated with this content, including icon color, icon style, icon glyph, subtype, identifier, name, description, and matched value, are interpolated directly into the data-content HTML attribute of Bootstrap popover elements without appropriate output encoding. Because the popovers are configured with data-html="true", the content is interpreted as HTML in the victim's browser. An authenticated attacker who can influence matched, tracked, or tagged content may inject arbitrary HTML or JavaScript into these values. When a victim displays the affected popover, the injected markup may execute in the victim's session, potentially enabling data exfiltration or actions with the victim's privileges. The vulnerability is classified as stored XSS because the malicious payload can persist in the affected match, tracking, or tag-related data and be delivered to users who view the affected content.
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-25 15:15 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    References
    Impacted products
    Vendor Product Version
    ail project ail framework Affected: unspecified , < 7.1 (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-25 12:56
    Model
    qwen3.8:27b
    Input
    https://github.com/ail-project/ail-framework/commit/ee63a0a96646790255e038f5ca5dd0ab5fe98db2.patch bd188338f882…
    Confidence
    medium
    Commit Subject Patch SHA-256
    ee63a0a96646 chg: [security] fix XSS in show item and message popover of bd188338f882…
    Fix summary

    The fix applies double HTML-escaping (Jinja2 forceescape|forceescape) to every dynamic value interpolated into the HTML-enabled data-content attribute of the popover elements in both templates. Double-escaping is required because the values must survive both the outer HTML attribute context and the inner HTML parsing performed by the popover plugin. This neutralizes any HTML or script injection from the extracted-match fields.

    Patch summary

    In block_message.html and show_item.html, the Jinja2 expressions for extracted_matches fields (icon color, icon style, icon, subtype, id, name, description) and the matched value r[1] are each suffixed with |forceescape|forceescape. No other logic, routing, or configuration changes are made. Two lines changed in total (one per file).

    CVSS rationale

    AV:N: web application reachable over the network. AC:L: crafting a message or item with a malicious extracted-match value requires no special race or timing. AT:N: no manipulation of the attack target is needed. PR:L: the attacker must be an authenticated user capable of creating or modifying chat messages or items. UI:P: the victim must passively interact (hover over the element) to trigger the popover rendering; no click or explicit action is required. VC:H: the injected script can read session cookies, DOM data, and API responses in the victim's browser. VI:H: the script can perform authenticated actions on behalf of the victim (create, modify, delete data). VA:N: no direct denial-of-service impact is evident. SC/SI/SA:N: the subcomponent (the AIL Framework server) is not directly compromised; the impact is confined to the victim's browser session.

    Weakness rationale
    • CWE-79 Dynamic values from extracted-match data are interpolated into an HTML-enabled attribute without output encoding, allowing script injection. The fix adds forceescape, confirming the root cause is missing output encoding in an HTML context. CWE-79 is the precise weakness.
    Attack pattern rationale
    • CAPEC-1 The patch directly addresses stored XSS: attacker-controlled content is persisted in application data (chat messages, items) and rendered as executable HTML in a victim's browser via an unescaped data-content attribute. CAPEC-1 is the canonical attack pattern for XSS and is the closest match. No uncertainty in this mapping.
    Assumptions to verify
    • The AIL Framework requires authenticated access to create or modify chat messages and items; PR:L is assumed based on the application being a threat-intelligence platform with user accounts.
    • The extracted-match data (icon color, style, subtype, id, name, description) can be influenced by an authenticated user through normal application workflows (e.g., submitting content that the extraction pipeline processes).
    • The popover is triggered on hover (data-trigger="hover"), classified as passive user interaction (UI:P).
    • The tag v7.1 boundary with 143 commits after the fix suggests the fix landed before v7.1, but exact affected version ranges are not confirmed by the patch alone.
    • CAPEC-1 is selected as the closest standard attack pattern; no more specific CAPEC for stored XSS in HTML attributes exists in the CAPEC catalog.
    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-100172",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "total"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-25T15:15:12.313075Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-25T15:19:12.598Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "chats_explorer (block_message.html)",
                "objects/item (show_item.html)"
              ],
              "product": "ail framework",
              "programFiles": [
                "var/www/templates/chats_explorer/block_message.html",
                "var/www/templates/objects/item/show_item.html"
              ],
              "repo": "https://github.com/ail-project/ail-framework",
              "vendor": "ail project",
              "versions": [
                {
                  "lessThan": "7.1",
                  "status": "affected",
                  "version": "unspecified",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Aurelien Thirion"
            },
            {
              "lang": "en",
              "type": "finder",
              "value": "Jeroen Pinoy"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe AIL Framework (ail-project/ail-framework) contains a stored cross-site scripting (XSS) vulnerability in two Jinja2 templates that render popovers for matched, tracked, or tagged content: var/www/templates/chats_explorer/block_message.html and var/www/templates/objects/item/show_item.html. In both templates, dynamic values associated with this content, including icon color, icon style, icon glyph, subtype, identifier, name, description, and matched value, are interpolated directly into the data-content HTML attribute of Bootstrap popover elements without appropriate output encoding. Because the popovers are configured with data-html=\"true\", the content is interpreted as HTML in the victim\u0027s browser. An authenticated attacker who can influence matched, tracked, or tagged content may inject arbitrary HTML or JavaScript into these values. When a victim displays the affected popover, the injected markup may execute in the victim\u0027s session, potentially enabling data exfiltration or actions with the victim\u0027s privileges. The vulnerability is classified as stored XSS because the malicious payload can persist in the affected match, tracking, or tag-related data and be delivered to users who view the affected content.\u003c/p\u003e"
                }
              ],
              "value": "The AIL Framework (ail-project/ail-framework) contains a stored cross-site scripting (XSS) vulnerability in two Jinja2 templates that render popovers for matched, tracked, or tagged content: var/www/templates/chats_explorer/block_message.html and var/www/templates/objects/item/show_item.html. In both templates, dynamic values associated with this content, including icon color, icon style, icon glyph, subtype, identifier, name, description, and matched value, are interpolated directly into the data-content HTML attribute of Bootstrap popover elements without appropriate output encoding. Because the popovers are configured with data-html=\"true\", the content is interpreted as HTML in the victim\u0027s browser. An authenticated attacker who can influence matched, tracked, or tagged content may inject arbitrary HTML or JavaScript into these values. When a victim displays the affected popover, the injected markup may execute in the victim\u0027s session, potentially enabling data exfiltration or actions with the victim\u0027s privileges. The vulnerability is classified as stored XSS because the malicious payload can persist in the affected match, tracking, or tag-related data and be delivered to users who view the affected content."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Cross Site Scripting (XSS)"
                }
              ]
            }
          ],
          "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": "NONE",
                "subIntegrityImpact": "NONE",
                "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: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-79",
                  "description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-25T13:13:56.996Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/ail-project/ail-framework/commit/ee63a0a96646790255e038f5ca5dd0ab5fe98db2"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix applies double HTML-escaping (Jinja2 forceescape|forceescape) to every dynamic value interpolated into the HTML-enabled data-content attribute of the popover elements in both templates. Double-escaping is required because the values must survive both the outer HTML attribute context and the inner HTML parsing performed by the popover plugin. This neutralizes any HTML or script injection from the extracted-match fields.\u003c/p\u003e"
                }
              ],
              "value": "The fix applies double HTML-escaping (Jinja2 forceescape|forceescape) to every dynamic value interpolated into the HTML-enabled data-content attribute of the popover elements in both templates. Double-escaping is required because the values must survive both the outer HTML attribute context and the inner HTML parsing performed by the popover plugin. This neutralizes any HTML or script injection from the extracted-match fields."
            }
          ],
          "title": "Stored XSS in AIL Framework extracted-match popovers via unescaped dynamic values in HTML-enabled data-content attributes",
          "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 AIL Framework requires authenticated access to create or modify chat messages and items; PR:L is assumed based on the application being a threat-intelligence platform with user accounts.",
                      "The extracted-match data (icon color, style, subtype, id, name, description) can be influenced by an authenticated user through normal application workflows (e.g., submitting content that the extraction pipeline processes).",
                      "The popover is triggered on hover (data-trigger=\"hover\"), classified as passive user interaction (UI:P).",
                      "The tag v7.1 boundary with 143 commits after the fix suggests the fix landed before v7.1, but exact affected version ranges are not confirmed by the patch alone.",
                      "CAPEC-1 is selected as the closest standard attack pattern; no more specific CAPEC for stored XSS in HTML attributes exists in the CAPEC catalog."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "The patch directly addresses stored XSS: attacker-controlled content is persisted in application data (chat messages, items) and rendered as executable HTML in a victim\u0027s browser via an unescaped data-content attribute. CAPEC-1 is the canonical attack pattern for XSS and is the closest match. No uncertainty in this mapping."
                      }
                    ],
                    "commit": "ee63a0a96646790255e038f5ca5dd0ab5fe98db2",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "terrtia"
                      }
                    ],
                    "cvssRationale": "AV:N: web application reachable over the network. AC:L: crafting a message or item with a malicious extracted-match value requires no special race or timing. AT:N: no manipulation of the attack target is needed. PR:L: the attacker must be an authenticated user capable of creating or modifying chat messages or items. UI:P: the victim must passively interact (hover over the element) to trigger the popover rendering; no click or explicit action is required. VC:H: the injected script can read session cookies, DOM data, and API responses in the victim\u0027s browser. VI:H: the script can perform authenticated actions on behalf of the victim (create, modify, delete data). VA:N: no direct denial-of-service impact is evident. SC/SI/SA:N: the subcomponent (the AIL Framework server) is not directly compromised; the impact is confined to the victim\u0027s browser session.",
                    "fixSummary": "The fix applies double HTML-escaping (Jinja2 forceescape|forceescape) to every dynamic value interpolated into the HTML-enabled data-content attribute of the popover elements in both templates. Double-escaping is required because the values must survive both the outer HTML attribute context and the inner HTML parsing performed by the popover plugin. This neutralizes any HTML or script injection from the extracted-match fields.",
                    "generatedAt": "2026-09-25T12:56:24.137641Z",
                    "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": "bd188338f8828ab59743776228d2991b51a3f83b870dedf073a54c6139ad9e26",
                    "patchSummary": "In block_message.html and show_item.html, the Jinja2 expressions for extracted_matches fields (icon color, icon style, icon, subtype, id, name, description) and the matched value r[1] are each suffixed with |forceescape|forceescape. No other logic, routing, or configuration changes are made. Two lines changed in total (one per file).",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "ee63a0a96646790255e038f5ca5dd0ab5fe98db2",
                        "patchSha256": "bd188338f8828ab59743776228d2991b51a3f83b870dedf073a54c6139ad9e26",
                        "source": "https://github.com/ail-project/ail-framework/commit/ee63a0a96646790255e038f5ca5dd0ab5fe98db2.patch",
                        "sourceUrl": "https://github.com/ail-project/ail-framework/commit/ee63a0a96646790255e038f5ca5dd0ab5fe98db2.patch",
                        "subject": "chg: [security] fix XSS in show item and message popover of"
                      }
                    ],
                    "source": "https://github.com/ail-project/ail-framework/commit/ee63a0a96646790255e038f5ca5dd0ab5fe98db2.patch",
                    "subject": "chg: [security] fix XSS in show item and message popover of",
                    "tagVersionBoundary": {
                      "commits_after_fix": 143,
                      "repository": "https://github.com/ail-project/ail-framework",
                      "tag": "v7.1",
                      "version": "7.1",
                      "version_type": "custom"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "Dynamic values from extracted-match data are interpolated into an HTML-enabled attribute without output encoding, allowing script injection. The fix adds forceescape, confirming the root cause is missing output encoding in an HTML context. CWE-79 is the precise weakness."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20239"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-100172",
        "datePublished": "2026-09-25T13:13:56.996Z",
        "dateReserved": "2026-09-25T13:13:52.747Z",
        "dateUpdated": "2026-09-25T15:19:12.598Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-97898 (GCVE-0-2026-97898)

    Vulnerability from cvelistv5 – Published: 2026-09-25 10:07 – Updated: 2026-09-25 12:29 Exclusively Hosted Service
    VLAI
    Title
    Broken authorization in Akia keyless entry lets an authenticated guest unlock other rooms
    Summary
    Insecure Direct Object Reference / missing object-level authorization in the Akia keyless entry cloud service. The unlock action is relying on a client-supplied room/door identifier that is not properly authorized server-side against the authenticated guest's booking. An authenticated guest could unlock rooms other than their own, resulting in unauthorized physical access to guest rooms at an affected property. As of 19th September 2026 the service is no more vulnerable to this attack (feedback received by the reporter).  The attack is remote but the effect is local to an affected property.
    SSVC
    Exploitation: none Automatable: yes Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-25 12:18 UTC
    CWE
    • CWE-862 - Missing Authorization
    • CWE-639 - Authorization Bypass Through User-Controlled Key
    References
    Impacted products
    Vendor Product Version
    akia akia Affected: 0 , < 2026.10.19 (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-97898",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-25T12:18:28.132095Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-25T12:29:34.364Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "product": "akia",
              "vendor": "akia",
              "versions": [
                {
                  "lessThan": "2026.10.19",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Philipp Br\u00fcgger"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cdiv\u003eInsecure Direct Object Reference / missing object-level authorization in the Akia keyless entry cloud service. The unlock action is relying on a client-supplied room/door identifier that is not properly authorized server-side against the authenticated guest\u0027s booking. An authenticated guest could unlock rooms other than their own, resulting in unauthorized physical access to guest rooms at an affected property.\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cdiv\u003eAs of 19th September 2026 the service is no more vulnerable to this attack (feedback received by the reporter).\u0026nbsp;\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cdiv\u003eThe attack is remote but the effect is local to an affected property.\u0026nbsp;\u003c/div\u003e\u003cbr\u003e"
                }
              ],
              "value": "Insecure Direct Object Reference / missing object-level authorization in the Akia keyless entry cloud service. The unlock action is relying on a client-supplied room/door identifier that is not properly authorized server-side against the authenticated guest\u0027s booking. An authenticated guest could unlock rooms other than their own, resulting in unauthorized physical access to guest rooms at an affected property.\n\n\n\n\nAs of 19th September 2026 the service is no more vulnerable to this attack (feedback received by the reporter).\u00a0\n\n\n\n\nThe attack is remote but the effect is local to an affected property."
            }
          ],
          "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": 8.4,
                "baseSeverity": "HIGH",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "ACTIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:H/VI:L/VA:N/SC:H/SI:H/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-25T10:07:35.224Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "tags": [
                "product"
              ],
              "url": "https://www.akia.com/platform/keyless-entry"
            }
          ],
          "source": {
            "discovery": "UNKNOWN"
          },
          "tags": [
            "exclusively-hosted-service"
          ],
          "title": "Broken authorization in Akia keyless entry lets an authenticated guest unlock other rooms",
          "x_gcve": [
            {
              "recordType": "advisory",
              "vulnId": "gcve-1-2026-20108"
            }
          ],
          "x_generator": {
            "engine": "Vulnogram 0.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-97898",
        "datePublished": "2026-09-25T10:07:35.224Z",
        "dateReserved": "2026-09-25T10:07:22.362Z",
        "dateUpdated": "2026-09-25T12:29:34.364Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-97863 (GCVE-0-2026-97863)

    Vulnerability from cvelistv5 – Published: 2026-09-25 08:03 – Updated: 2026-09-25 13:19
    VLAI
    Title
    misp-modules: Shell Command Injection in MISP cisco_firesight_manager_ACL_rule_export Module via Unescaped Attribute Values
    Summary
    The cisco_firesight_manager_ACL_rule_export module in misp-modules generates a shell script (.sh) that authenticates to and calls the Cisco fireSIGHT Manager API. The module interpolates configuration values (IP address, login, password, domain ID, policy ID) and MISP attribute values (destination IPs, URLs, event info comments) directly into single-quoted shell string assignments without any escaping or sanitization. Because the values are placed inside single-quoted shell strings, any value containing a single-quote character (e.g., a crafted ip-dst or url attribute value submitted to MISP) breaks out of the quoting context, allowing an attacker to inject arbitrary shell commands into the exported script. A security analyst who subsequently executes the generated .sh file unmodified would run the injected commands with their own privileges, potentially exposing fireSIGHT Manager credentials, modifying ACL rules, or compromising the analyst workstation. Additionally, the module contained a secondary defect where the variable 'config' was only assigned inside a conditional block but referenced unconditionally afterward, causing a NameError (denial of service) when the request payload lacked a 'config' key. The vulnerability requires the attacker to have the ability to submit MISP events or attributes containing a single-quote character and the victim to execute the exported script. No authentication bypass is required beyond standard MISP event-submission privileges.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-25 13:18 UTC
    CWE
    • CWE-78 - Improper Neutralization of Special Elements used in a Command ("Command Injection")
    References
    Impacted products
    Vendor Product Version
    misp misp-modules Affected: 0 , ≤ 3.0.10 (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-25 07:48
    Model
    qwen3.8:27b
    Input
    https://github.com/elhoim/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748.patch 9c34349775d0…
    Confidence
    high
    Commit Subject Patch SHA-256
    625b54908efb fix: [cisco_firesight_manager_ACL_rule_export] shell-escape 9c34349775d0…
    Fix summary

    All user-controlled and configuration values interpolated into the generated shell script are now passed through Python's shlex.quote() function, which produces a safely quoted string that cannot be broken out of by embedded shell metacharacters. For the JSON access-rule block that embeds multiple attribute values within a single shell assignment, the JSON content is first assembled as plain text and then the entire assembled string is shlex-quoted once, preventing stray quote characters from corrupting the outer quoting. The 'config' variable is now initialized to an empty dictionary before the conditional assignment, eliminating the NameError.

    Patch summary

    Added 'import shlex' at the top of the module. Replaced direct .format() interpolation of config values (fmc_ip_addr, fmc_login, fmc_pass, domain_id, acpolicy_id) with shlex.quote()-wrapped values. Refactored the BLOCK_JSON_TMPL to separate the JSON content template (BLOCK_JSON_CONTENT_TMPL) from the shell assignment template; the JSON content is formatted first with raw attribute values, then the resulting string is passed through shlex.quote() before being substituted into the shell assignment. Initialized 'config = {}' before the 'if "config" in request:' block to prevent NameError.

    CVSS rationale

    AV:N: The attacker submits crafted MISP attribute values over the network to a MISP instance. AC:L: Injecting a single-quote character into an attribute value is trivial and requires no race conditions or special timing. AT:N: No special data manipulation or prior access to the target system is needed beyond submitting an event. PR:L: The attacker needs only basic MISP user privileges to create or modify events/attributes. UI:A: The victim analyst must actively execute the generated .sh file for the injected commands to run. VC:N, VI:N, VA:N: The MISP instance itself is not directly compromised; the impact is on the downstream system where the script executes. SC:H: The injected commands can exfiltrate fireSIGHT Manager credentials and analyst system data. SI:H: Arbitrary command execution allows modification of ACL rules, system files, or other integrity-critical resources. SA:H: Injected commands can disrupt or destroy the analyst workstation or fireSIGHT Manager availability.

    Weakness rationale
    • CWE-78 The module constructs a shell script by interpolating untrusted values (MISP attribute values, configuration fields) into single-quoted shell strings without escaping. A single-quote character in any interpolated value breaks the quoting and allows arbitrary shell command injection. This is a textbook command injection via insufficient output encoding in a generated shell script.
    Attack pattern rationale
    • CAPEC-88 The attack pattern involves an attacker supplying input containing shell metacharacters (specifically a single quote) that is incorporated into a shell command or script without proper sanitization, resulting in execution of attacker-controlled commands. The patch confirms the vulnerable pattern: values are interpolated into single-quoted shell assignments, and the fix is to apply shlex.quote() to neutralize shell metacharacters. This is the closest and most specific CAPEC mapping for the observed vulnerability.
    Assumptions to verify
    • The CVSS UI metric is set to A (Active) because the victim analyst must deliberately execute the generated .sh file; CVSS v4.0 does not use the v3.x 'R' value.
    • PR is set to L assuming the attacker holds a basic MISP user role sufficient to create or modify events and attributes; the patch does not specify exact role requirements.
    • SC, SI, SA are rated H based on the potential for arbitrary command execution on the analyst workstation and the fireSIGHT Manager; actual impact depends on the analyst's local privileges and the fireSIGHT Manager's exposure.
    • The CAPEC-88 mapping is the closest available pattern; the vulnerability is specifically an output-encoding failure in generated shell script rather than direct command-line injection, but CAPEC-88 is the narrowest defensible match.
    • No specific affected or fixed version numbers are available from the patch metadata; the commit date (2026-08-31) is the only temporal anchor.
    • The secondary NameError bug (config variable) is a minor denial-of-service issue included in the same patch but is not the primary security concern.
    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-97863",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-25T13:18:10.409406Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-25T13:19:52.508Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://github.com/MISP/misp-modules",
              "defaultStatus": "unaffected",
              "modules": [
                "cisco_firesight_manager_ACL_rule_export"
              ],
              "product": "misp-modules",
              "programFiles": [
                "misp_modules/modules/export_mod/cisco_firesight_manager_ACL_rule_export.py"
              ],
              "repo": "https://github.com/misp/misp-modules",
              "vendor": "misp",
              "versions": [
                {
                  "lessThanOrEqual": "3.0.10",
                  "status": "affected",
                  "version": "0",
                  "versionType": "semver"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "elhoim"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 5"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe cisco_firesight_manager_ACL_rule_export module in misp-modules generates a shell script (.sh) that authenticates to and calls the Cisco fireSIGHT Manager API. The module interpolates configuration values (IP address, login, password, domain ID, policy ID) and MISP attribute values (destination IPs, URLs, event info comments) directly into single-quoted shell string assignments without any escaping or sanitization. Because the values are placed inside single-quoted shell strings, any value containing a single-quote character (e.g., a crafted ip-dst or url attribute value submitted to MISP) breaks out of the quoting context, allowing an attacker to inject arbitrary shell commands into the exported script. A security analyst who subsequently executes the generated .sh file unmodified would run the injected commands with their own privileges, potentially exposing fireSIGHT Manager credentials, modifying ACL rules, or compromising the analyst workstation. Additionally, the module contained a secondary defect where the variable \u0027config\u0027 was only assigned inside a conditional block but referenced unconditionally afterward, causing a NameError (denial of service) when the request payload lacked a \u0027config\u0027 key. The vulnerability requires the attacker to have the ability to submit MISP events or attributes containing a single-quote character and the victim to execute the exported script. No authentication bypass is required beyond standard MISP event-submission privileges.\u003c/p\u003e"
                }
              ],
              "value": "The cisco_firesight_manager_ACL_rule_export module in misp-modules generates a shell script (.sh) that authenticates to and calls the Cisco fireSIGHT Manager API. The module interpolates configuration values (IP address, login, password, domain ID, policy ID) and MISP attribute values (destination IPs, URLs, event info comments) directly into single-quoted shell string assignments without any escaping or sanitization. Because the values are placed inside single-quoted shell strings, any value containing a single-quote character (e.g., a crafted ip-dst or url attribute value submitted to MISP) breaks out of the quoting context, allowing an attacker to inject arbitrary shell commands into the exported script. A security analyst who subsequently executes the generated .sh file unmodified would run the injected commands with their own privileges, potentially exposing fireSIGHT Manager credentials, modifying ACL rules, or compromising the analyst workstation. Additionally, the module contained a secondary defect where the variable \u0027config\u0027 was only assigned inside a conditional block but referenced unconditionally afterward, causing a NameError (denial of service) when the request payload lacked a \u0027config\u0027 key. The vulnerability requires the attacker to have the ability to submit MISP events or attributes containing a single-quote character and the victim to execute the exported script. No authentication bypass is required beyond standard MISP event-submission privileges."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-88",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-88 Shell Command Injection"
                }
              ]
            }
          ],
          "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": "HIGH",
                "subConfidentialityImpact": "HIGH",
                "subIntegrityImpact": "HIGH",
                "userInteraction": "ACTIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "NONE",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-78",
                  "description": "CWE-78 Improper Neutralization of Special Elements used in a Command (\"Command Injection\")",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-25T09:50:00.869Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/misp/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eAll user-controlled and configuration values interpolated into the generated shell script are now passed through Python\u0027s shlex.quote() function, which produces a safely quoted string that cannot be broken out of by embedded shell metacharacters. For the JSON access-rule block that embeds multiple attribute values within a single shell assignment, the JSON content is first assembled as plain text and then the entire assembled string is shlex-quoted once, preventing stray quote characters from corrupting the outer quoting. The \u0027config\u0027 variable is now initialized to an empty dictionary before the conditional assignment, eliminating the NameError.\u003c/p\u003e"
                }
              ],
              "value": "All user-controlled and configuration values interpolated into the generated shell script are now passed through Python\u0027s shlex.quote() function, which produces a safely quoted string that cannot be broken out of by embedded shell metacharacters. For the JSON access-rule block that embeds multiple attribute values within a single shell assignment, the JSON content is first assembled as plain text and then the entire assembled string is shlex-quoted once, preventing stray quote characters from corrupting the outer quoting. The \u0027config\u0027 variable is now initialized to an empty dictionary before the conditional assignment, eliminating the NameError."
            }
          ],
          "source": {
            "discovery": "UNKNOWN"
          },
          "title": "misp-modules: Shell Command Injection in MISP cisco_firesight_manager_ACL_rule_export Module via Unescaped Attribute Values",
          "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 CVSS UI metric is set to A (Active) because the victim analyst must deliberately execute the generated .sh file; CVSS v4.0 does not use the v3.x \u0027R\u0027 value.",
                      "PR is set to L assuming the attacker holds a basic MISP user role sufficient to create or modify events and attributes; the patch does not specify exact role requirements.",
                      "SC, SI, SA are rated H based on the potential for arbitrary command execution on the analyst workstation and the fireSIGHT Manager; actual impact depends on the analyst\u0027s local privileges and the fireSIGHT Manager\u0027s exposure.",
                      "The CAPEC-88 mapping is the closest available pattern; the vulnerability is specifically an output-encoding failure in generated shell script rather than direct command-line injection, but CAPEC-88 is the narrowest defensible match.",
                      "No specific affected or fixed version numbers are available from the patch metadata; the commit date (2026-08-31) is the only temporal anchor.",
                      "The secondary NameError bug (config variable) is a minor denial-of-service issue included in the same patch but is not the primary security concern."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-88",
                        "rationale": "The attack pattern involves an attacker supplying input containing shell metacharacters (specifically a single quote) that is incorporated into a shell command or script without proper sanitization, resulting in execution of attacker-controlled commands. The patch confirms the vulnerable pattern: values are interpolated into single-quoted shell assignments, and the fix is to apply shlex.quote() to neutralize shell metacharacters. This is the closest and most specific CAPEC mapping for the observed vulnerability."
                      }
                    ],
                    "commit": "625b54908efbd6acc8343aa3370d401dd370e748",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "elhoim"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Opus 5"
                      }
                    ],
                    "cvssRationale": "AV:N: The attacker submits crafted MISP attribute values over the network to a MISP instance. AC:L: Injecting a single-quote character into an attribute value is trivial and requires no race conditions or special timing. AT:N: No special data manipulation or prior access to the target system is needed beyond submitting an event. PR:L: The attacker needs only basic MISP user privileges to create or modify events/attributes. UI:A: The victim analyst must actively execute the generated .sh file for the injected commands to run. VC:N, VI:N, VA:N: The MISP instance itself is not directly compromised; the impact is on the downstream system where the script executes. SC:H: The injected commands can exfiltrate fireSIGHT Manager credentials and analyst system data. SI:H: Arbitrary command execution allows modification of ACL rules, system files, or other integrity-critical resources. SA:H: Injected commands can disrupt or destroy the analyst workstation or fireSIGHT Manager availability.",
                    "draft": false,
                    "fixSummary": "All user-controlled and configuration values interpolated into the generated shell script are now passed through Python\u0027s shlex.quote() function, which produces a safely quoted string that cannot be broken out of by embedded shell metacharacters. For the JSON access-rule block that embeds multiple attribute values within a single shell assignment, the JSON content is first assembled as plain text and then the entire assembled string is shlex-quoted once, preventing stray quote characters from corrupting the outer quoting. The \u0027config\u0027 variable is now initialized to an empty dictionary before the conditional assignment, eliminating the NameError.",
                    "generatedAt": "2026-09-25T07:48:15.163752Z",
                    "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": "9c34349775d058188a7b9a4d44ff873fd285faf0ddda00b46aadbaa72f3b4e6e",
                    "patchSummary": "Added \u0027import shlex\u0027 at the top of the module. Replaced direct .format() interpolation of config values (fmc_ip_addr, fmc_login, fmc_pass, domain_id, acpolicy_id) with shlex.quote()-wrapped values. Refactored the BLOCK_JSON_TMPL to separate the JSON content template (BLOCK_JSON_CONTENT_TMPL) from the shell assignment template; the JSON content is formatted first with raw attribute values, then the resulting string is passed through shlex.quote() before being substituted into the shell assignment. Initialized \u0027config = {}\u0027 before the \u0027if \"config\" in request:\u0027 block to prevent NameError.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "625b54908efbd6acc8343aa3370d401dd370e748",
                        "patchSha256": "9c34349775d058188a7b9a4d44ff873fd285faf0ddda00b46aadbaa72f3b4e6e",
                        "source": "https://github.com/elhoim/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748.patch",
                        "sourceUrl": "https://github.com/elhoim/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748.patch",
                        "subject": "fix: [cisco_firesight_manager_ACL_rule_export] shell-escape"
                      }
                    ],
                    "source": "https://github.com/elhoim/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748.patch",
                    "subject": "fix: [cisco_firesight_manager_ACL_rule_export] shell-escape",
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-78",
                        "rationale": "The module constructs a shell script by interpolating untrusted values (MISP attribute values, configuration fields) into single-quoted shell strings without escaping. A single-quote character in any interpolated value breaks the quoting and allows arbitrary shell command injection. This is a textbook command injection via insufficient output encoding in a generated shell script."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "gcve-1-2026-20190"
            }
          ],
          "x_generator": {
            "engine": "Vulnogram 0.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-97863",
        "datePublished": "2026-09-25T08:03:24.441Z",
        "dateReserved": "2026-09-25T08:02:32.714Z",
        "dateUpdated": "2026-09-25T13:19:52.508Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95806 (GCVE-0-2026-95806)

    Vulnerability from cvelistv5 – Published: 2026-09-22 15:09 – Updated: 2026-09-22 15:54
    VLAI
    Title
    MISP: PHP phar stream wrapper enables deserialization and code execution via caller-influenced filesystem paths
    Summary
    MISP ships with PHP's phar stream wrapper registered in both its web entry point and its console entry point.  The phar stream wrapper causes PHP to treat a phar archive as a directory, which has two security consequences:    - any filesystem operation on a caller-influenced path that resolves to a phar archive triggers an implicit unserialize() call, creating a deserialization sink;  - a relocated application root can reach executable code inside an uploaded phar file, enabling arbitrary code execution as the web user. No component of MISP, the vendored CakePHP framework, or any runtime-loaded library reads or constructs phar archives. The wrapper therefore serves no legitimate purpose in the MISP runtime and exists solely as an available primitive for an attacker who can influence a filesystem path argument.
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:53 UTC
    CWE
    • CWE-502 - Deserialization of Untrusted Data
    • CWE-74 - Improper Neutralization of Special Elements in Output Used by a Downstream Component
    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 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-22 15:01
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/08fa755b6.patch f4fc3223e642…
    Confidence
    medium
    Commit Subject Patch SHA-256
    08fa755b6363 chg: [internal] Unregister the phar stream wrapper in the f4fc3223e642…
    Fix summary

    The phar stream wrapper is unregistered via stream_wrapper_unregister('phar') at the top of both the web and console entry points, before any framework bootstrap or application code executes. Because no MISP component, CakePHP, or runtime library requires the phar wrapper, removing it eliminates the implicit unserialize() sink and the directory-like phar archive behavior without functional impact. This closes the deserialization and code-execution primitive application-wide, independent of whether individual callers validate their path arguments.

    Patch summary

    Two files are modified. In app/Console/cake.php and app/webroot/index.php, a 14-line block is inserted immediately after the file header comment and before any existing logic. The block checks whether 'phar' is present in stream_get_wrappers() and, if so, calls stream_wrapper_unregister('phar'). A docblock comment explains the security rationale: the wrapper turns filesystem calls on caller-influenced paths into unserialize() sinks and allows a relocated application root to reach code inside an uploaded file. No other code is changed; the total diff is 28 insertions across the two files.

    CVSS rationale

    AV:N: The vulnerability is reachable through the web entry point (app/webroot/index.php), making it network-accessible. AC:H: Exploitation requires crafting a valid phar archive with a malicious serialized payload and identifying a code path where a caller-influenced filesystem argument resolves to that archive; the commit describes this as an 'argument-injection exploit,' implying non-trivial path manipulation. AT:N: No specific attack-target conditions are indicated. PR:L: MISP is a threat-intelligence platform that typically requires authenticated access; the commit references 'the web user' context, suggesting the attacker operates within the application's privilege boundary. UI:N: No user interaction is required. VC/VI/VA:H: Successful exploitation results in arbitrary code execution as the web user, compromising confidentiality, integrity, and availability of the MISP instance. SC/SI/SA:N: No evidence of impact on subsequent or other components beyond the MISP instance itself.

    Weakness rationale
    • CWE-502 The phar stream wrapper causes PHP to invoke unserialize() implicitly whenever a filesystem operation resolves to a phar archive. An attacker who can influence the path argument (e.g., via argument injection) can supply a crafted phar file, triggering deserialization of attacker-controlled data and leading to code execution. This is the primary and most specific weakness.
    • CWE-74 The phar stream wrapper is a special element of the PHP runtime that was not neutralized (unregistered) in the MISP entry points. Its presence allows downstream filesystem calls to be subverted into deserialization sinks. This is a secondary, broader characterization of the same issue.
    Attack pattern rationale
    • CAPEC-570 The core attack mechanism is that the phar stream wrapper turns a filesystem call on a caller-influenced path into an implicit unserialize() invocation. An attacker crafts a phar archive containing a malicious serialized payload and causes the application to perform a filesystem operation on that path, triggering deserialization and code execution. CAPEC-570 is the closest match. Uncertainty: the exact injection vector (which specific MISP endpoint or console command accepts the path) is not detailed in the patch, but the deserialization sink is explicitly described in the commit message.
    • CAPEC-100 The phar stream wrapper is a trusted, built-in PHP component that the attacker leverages in the MISP runtime environment where it serves no legitimate purpose. The attacker does not need to exploit a flaw in the wrapper itself; rather, its mere presence in the runtime provides the primitive. This is a secondary mapping; CAPEC-570 is preferred as the primary because it more precisely describes the deserialization mechanism.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary (v2.5.47, 42 commits after fix), suggesting the fix is included in v2.5.47 and earlier versions are affected. The explicit context lists affected_version and fixed_version as null, so the exact boundary is uncertain.
    • PR:L is assumed because MISP is an authenticated threat-intelligence platform; however, the patch does not explicitly state whether the vulnerable code path requires authentication. If the argument-injection vector is reachable unauthenticated, PR should be N.
    • AC:H is assumed because crafting a valid phar archive and identifying the correct code path for the filesystem call is non-trivial; the commit describes it as an 'argument-injection exploit,' implying specific conditions must be met.
    • The CAPEC-570 mapping is based on the commit message's explicit description of the phar wrapper as an 'unserialize() sink'; the exact MISP endpoint or console command that accepts the attacker-influenced path is not identified in the patch.
    • The commit message references 'the job-argument guard reverted,' implying a prior guard existed and was removed, making the phar wrapper the remaining defense. The exact prior guard is not described in this patch.
    • The Co-Authored-By line lists 'Claude Opus 5 (1M context)' as a co-author; this is recorded in the metadata as a remediation developer but is an AI assistant, not a human contributor. It is excluded from credits to avoid attributing a CVE credit to a non-human entity.
    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-95806",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "total"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:53:57.690631Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:54:08.956Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Console/cake.php",
                "app/webroot/index.php"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Console/cake.php",
                "app/webroot/index.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 ships with PHP\u0027s phar stream wrapper registered in both its web entry point and its console entry point.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe phar stream wrapper causes PHP to treat a phar archive as a directory, which has two security consequences:\u0026nbsp;\u2003\u003c/p\u003e\u2003-\u0026nbsp;any filesystem operation on a caller-influenced path that resolves to a phar archive triggers an implicit unserialize() call, creating a deserialization sink;\u003cbr\u003e\u003cdiv\u003e\u2003-\u0026nbsp;a relocated application root can reach executable code inside an uploaded phar file, enabling arbitrary code execution as the web user.\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cp\u003eNo component of MISP, the vendored CakePHP framework, or any runtime-loaded library reads or constructs phar archives. The wrapper therefore serves no legitimate purpose in the MISP runtime and exists solely as an available primitive for an attacker who can influence a filesystem path argument.\u0026nbsp;\u003c/p\u003e"
                }
              ],
              "value": "MISP ships with PHP\u0027s phar stream wrapper registered in both its web entry point and its console entry point.\u00a0\n\nThe phar stream wrapper causes PHP to treat a phar archive as a directory, which has two security consequences:\u00a0\u2003\n\n\u2003-\u00a0any filesystem operation on a caller-influenced path that resolves to a phar archive triggers an implicit unserialize() call, creating a deserialization sink;\n\u2003-\u00a0a relocated application root can reach executable code inside an uploaded phar file, enabling arbitrary code execution as the web user.\n\n\n\n\nNo component of MISP, the vendored CakePHP framework, or any runtime-loaded library reads or constructs phar archives. The wrapper therefore serves no legitimate purpose in the MISP runtime and exists solely as an available primitive for an attacker who can influence a filesystem path argument."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-570",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-570 Deserialization of Untrusted Data"
                }
              ]
            },
            {
              "capecId": "CAPEC-100",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-100 Leveraging Trusted Components in an Untrusted Environment"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "HIGH",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 7.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:H/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-502",
                  "description": "CWE-502 Deserialization of Untrusted Data",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-74",
                  "description": "CWE-74 Improper Neutralization of Special Elements in Output Used by a Downstream Component",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T15:09:09.738Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/08fa755b6"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe phar stream wrapper is unregistered via stream_wrapper_unregister(\u0027phar\u0027) at the top of both the web and console entry points, before any framework bootstrap or application code executes. Because no MISP component, CakePHP, or runtime library requires the phar wrapper, removing it eliminates the implicit unserialize() sink and the directory-like phar archive behavior without functional impact. This closes the deserialization and code-execution primitive application-wide, independent of whether individual callers validate their path arguments.\u003c/p\u003e"
                }
              ],
              "value": "The phar stream wrapper is unregistered via stream_wrapper_unregister(\u0027phar\u0027) at the top of both the web and console entry points, before any framework bootstrap or application code executes. Because no MISP component, CakePHP, or runtime library requires the phar wrapper, removing it eliminates the implicit unserialize() sink and the directory-like phar archive behavior without functional impact. This closes the deserialization and code-execution primitive application-wide, independent of whether individual callers validate their path arguments."
            }
          ],
          "title": "MISP: PHP phar stream wrapper enables deserialization and code execution via caller-influenced filesystem paths",
          "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 range is inferred from the tag_version_boundary (v2.5.47, 42 commits after fix), suggesting the fix is included in v2.5.47 and earlier versions are affected. The explicit context lists affected_version and fixed_version as null, so the exact boundary is uncertain.",
                      "PR:L is assumed because MISP is an authenticated threat-intelligence platform; however, the patch does not explicitly state whether the vulnerable code path requires authentication. If the argument-injection vector is reachable unauthenticated, PR should be N.",
                      "AC:H is assumed because crafting a valid phar archive and identifying the correct code path for the filesystem call is non-trivial; the commit describes it as an \u0027argument-injection exploit,\u0027 implying specific conditions must be met.",
                      "The CAPEC-570 mapping is based on the commit message\u0027s explicit description of the phar wrapper as an \u0027unserialize() sink\u0027; the exact MISP endpoint or console command that accepts the attacker-influenced path is not identified in the patch.",
                      "The commit message references \u0027the job-argument guard reverted,\u0027 implying a prior guard existed and was removed, making the phar wrapper the remaining defense. The exact prior guard is not described in this patch.",
                      "The Co-Authored-By line lists \u0027Claude Opus 5 (1M context)\u0027 as a co-author; this is recorded in the metadata as a remediation developer but is an AI assistant, not a human contributor. It is excluded from credits to avoid attributing a CVE credit to a non-human entity."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-570",
                        "rationale": "The core attack mechanism is that the phar stream wrapper turns a filesystem call on a caller-influenced path into an implicit unserialize() invocation. An attacker crafts a phar archive containing a malicious serialized payload and causes the application to perform a filesystem operation on that path, triggering deserialization and code execution. CAPEC-570 is the closest match. Uncertainty: the exact injection vector (which specific MISP endpoint or console command accepts the path) is not detailed in the patch, but the deserialization sink is explicitly described in the commit message."
                      },
                      {
                        "capecId": "CAPEC-100",
                        "rationale": "The phar stream wrapper is a trusted, built-in PHP component that the attacker leverages in the MISP runtime environment where it serves no legitimate purpose. The attacker does not need to exploit a flaw in the wrapper itself; rather, its mere presence in the runtime provides the primitive. This is a secondary mapping; CAPEC-570 is preferred as the primary because it more precisely describes the deserialization mechanism."
                      }
                    ],
                    "commit": "08fa755b6363ec0b7194d97ea36800ae8eb8f919",
                    "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 vulnerability is reachable through the web entry point (app/webroot/index.php), making it network-accessible. AC:H: Exploitation requires crafting a valid phar archive with a malicious serialized payload and identifying a code path where a caller-influenced filesystem argument resolves to that archive; the commit describes this as an \u0027argument-injection exploit,\u0027 implying non-trivial path manipulation. AT:N: No specific attack-target conditions are indicated. PR:L: MISP is a threat-intelligence platform that typically requires authenticated access; the commit references \u0027the web user\u0027 context, suggesting the attacker operates within the application\u0027s privilege boundary. UI:N: No user interaction is required. VC/VI/VA:H: Successful exploitation results in arbitrary code execution as the web user, compromising confidentiality, integrity, and availability of the MISP instance. SC/SI/SA:N: No evidence of impact on subsequent or other components beyond the MISP instance itself.",
                    "fixSummary": "The phar stream wrapper is unregistered via stream_wrapper_unregister(\u0027phar\u0027) at the top of both the web and console entry points, before any framework bootstrap or application code executes. Because no MISP component, CakePHP, or runtime library requires the phar wrapper, removing it eliminates the implicit unserialize() sink and the directory-like phar archive behavior without functional impact. This closes the deserialization and code-execution primitive application-wide, independent of whether individual callers validate their path arguments.",
                    "generatedAt": "2026-09-22T15:01:21.211955Z",
                    "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": "f4fc3223e6421557e1c03c2182cfaa2b0c17a1a20870c71214708034faf1350f",
                    "patchSummary": "Two files are modified. In app/Console/cake.php and app/webroot/index.php, a 14-line block is inserted immediately after the file header comment and before any existing logic. The block checks whether \u0027phar\u0027 is present in stream_get_wrappers() and, if so, calls stream_wrapper_unregister(\u0027phar\u0027). A docblock comment explains the security rationale: the wrapper turns filesystem calls on caller-influenced paths into unserialize() sinks and allows a relocated application root to reach code inside an uploaded file. No other code is changed; the total diff is 28 insertions across the two files.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "08fa755b6363ec0b7194d97ea36800ae8eb8f919",
                        "patchSha256": "f4fc3223e6421557e1c03c2182cfaa2b0c17a1a20870c71214708034faf1350f",
                        "source": "https://github.com/MISP/MISP/commit/08fa755b6.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/08fa755b6.patch",
                        "subject": "chg: [internal] Unregister the phar stream wrapper in the"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/08fa755b6.patch",
                    "subject": "chg: [internal] Unregister the phar stream wrapper in the",
                    "tagVersionBoundary": {
                      "commits_after_fix": 42,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-502",
                        "rationale": "The phar stream wrapper causes PHP to invoke unserialize() implicitly whenever a filesystem operation resolves to a phar archive. An attacker who can influence the path argument (e.g., via argument injection) can supply a crafted phar file, triggering deserialization of attacker-controlled data and leading to code execution. This is the primary and most specific weakness."
                      },
                      {
                        "cweId": "CWE-74",
                        "rationale": "The phar stream wrapper is a special element of the PHP runtime that was not neutralized (unregistered) in the MISP entry points. Its presence allows downstream filesystem calls to be subverted into deserialization sinks. This is a secondary, broader characterization of the same issue."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20263"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95806",
        "datePublished": "2026-09-22T15:09:09.738Z",
        "dateReserved": "2026-09-22T15:09:04.977Z",
        "dateUpdated": "2026-09-22T15:54:08.956Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95805 (GCVE-0-2026-95805)

    Vulnerability from cvelistv5 – Published: 2026-09-22 14:59 – Updated: 2026-09-22 15:53
    VLAI
    Title
    MISP ACLComponent: Typo in previewEventAttributes ACL key bypasses intended access restriction
    Summary
    A typo in the MISP ACLComponent access control configuration caused the ACL rule for the previewEventAttributes action to reference the permission string 'theming_enabled*' (with a trailing asterisk) instead of the correct 'theming_enabled'. In the MISP ACL system, the array values define which role or permission grants access to a given controller action. The adjacent entry previewEventObjects correctly uses ['theming_enabled'], confirming the intended restriction. The malformed key 'theming_enabled*' does not match any valid permission identifier, causing the access control check for previewEventAttributes to malfunction. Depending on the ACL evaluation logic, this could result in either unauthorized users gaining access to the previewEventAttributes endpoint (authorization bypass) or legitimate users being denied access (availability impact).  The previewEventAttributes endpoint exposes event attribute data within MISP so an authorization bypass could expose sensitive indicator and attribute data to users who should not have access.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:53 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 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-22 14:55
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/5ac8d1e4d.patch c102952ebfab…
    Confidence
    medium
    Commit Subject Patch SHA-256
    5ac8d1e4dea7 fix: [ACL] typo in previewEventAttributes key c102952ebfab…
    Fix summary

    The fix corrects the ACL permission key for the previewEventAttributes action from the malformed string 'theming_enabled*' to the correct 'theming_enabled', restoring the intended access control restriction so that only users holding the theming_enabled permission can invoke the endpoint, consistent with the adjacent previewEventObjects entry.

    Patch summary

    In app/Controller/Component/ACLComponent.php (line 473), the ACL array value for the 'previewEventAttributes' key was changed from ['theming_enabled*'] to ['theming_enabled'], removing the erroneous trailing asterisk that made the permission string non-matching. One line changed, one insertion, one deletion.

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: The vulnerability is a static typo in configuration; no race or complex condition is needed. AT:N: No attack target manipulation required. PR:L: The attacker must be an authenticated MISP user to reach the endpoint. UI:N: No victim interaction needed. VC:L: If the ACL bypass is confirmed, an unauthorized user could view event attribute data (limited confidentiality impact). VI:N and VA:N: No integrity or availability impact is evident from the patch. SC/SI/SA:N: No secondary system impact. The overall severity is Low, reflecting a single-endpoint access control misconfiguration with limited data exposure.

    Weakness rationale
    • CWE-285 The ACL rule for previewEventAttributes contained a typo ('theming_enabled*') that prevented the authorization check from matching the intended permission, causing the access control mechanism to not enforce the restriction as designed. This is a direct failure of the authorization logic due to a misconfigured rule.
    Attack pattern rationale
    • CAPEC-126 The closest plausible attack pattern is Forced Browsing, where an attacker accesses a resource (the previewEventAttributes endpoint) that should be restricted by the ACL. The typo in the ACL key may cause the authorization check to fail to deny access, effectively allowing a user without the theming_enabled permission to reach the endpoint. Uncertainty: the exact ACL evaluation behavior on a non-matching rule (default-deny vs. default-allow) is not visible in the patch, so it is also possible the typo causes a denial rather than a bypass. CAPEC-126 is selected as the best available match for an access-control bypass via misconfiguration.
    Assumptions to verify
    • The exact ACL evaluation behavior when a permission string does not match any valid role (default-deny vs. default-allow) is not visible in the patch; the CVSS assumes the more security-relevant interpretation (authorization bypass) but a denial-of-service interpretation is also possible.
    • The affected version range is inferred from the tag boundary v2.5.47 (227 commits after the fix); the exact first affected version is not stated in the patch.
    • The CAPEC-126 mapping is the closest available pattern; the actual attack is a configuration typo rather than an active browsing technique, so the mapping is approximate.
    • The security impact is assumed to be limited to the previewEventAttributes endpoint; no evidence in the patch suggests other endpoints or data stores are affected.
    • The CVSS assumes the endpoint exposes event attribute data viewable by unauthorized users; the actual data sensitivity depends on MISP deployment configuration.
    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-95805",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:53:31.726592Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:53:42.092Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "ACLComponent"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/Component/ACLComponent.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": "Thomas Lacroix"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eA typo in the MISP ACLComponent access control configuration caused the ACL rule for the previewEventAttributes action to reference the permission string \u0027theming_enabled*\u0027 (with a trailing asterisk) instead of the correct \u0027theming_enabled\u0027. In the MISP ACL system, the array values define which role or permission grants access to a given controller action. The adjacent entry previewEventObjects correctly uses [\u0027theming_enabled\u0027], confirming the intended restriction. The malformed key \u0027theming_enabled*\u0027 does not match any valid permission identifier, causing the access control check for previewEventAttributes to malfunction. Depending on the ACL evaluation logic, this could result in either unauthorized users gaining access to the previewEventAttributes endpoint (authorization bypass) or legitimate users being denied access (availability impact).\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe previewEventAttributes endpoint exposes event attribute data within MISP so an authorization bypass could expose sensitive indicator and attribute data to users who should not have access.\u003c/p\u003e"
                }
              ],
              "value": "A typo in the MISP ACLComponent access control configuration caused the ACL rule for the previewEventAttributes action to reference the permission string \u0027theming_enabled*\u0027 (with a trailing asterisk) instead of the correct \u0027theming_enabled\u0027. In the MISP ACL system, the array values define which role or permission grants access to a given controller action. The adjacent entry previewEventObjects correctly uses [\u0027theming_enabled\u0027], confirming the intended restriction. The malformed key \u0027theming_enabled*\u0027 does not match any valid permission identifier, causing the access control check for previewEventAttributes to malfunction. Depending on the ACL evaluation logic, this could result in either unauthorized users gaining access to the previewEventAttributes endpoint (authorization bypass) or legitimate users being denied access (availability impact).\u00a0\n\nThe previewEventAttributes endpoint exposes event attribute data within MISP so an authorization bypass could expose sensitive indicator and attribute data to users who should not have access."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-126",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-126 Forced Browsing"
                }
              ]
            }
          ],
          "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-285",
                  "description": "CWE-285 Improper Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T14:59:22.041Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/5ac8d1e4d"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix corrects the ACL permission key for the previewEventAttributes action from the malformed string \u0027theming_enabled*\u0027 to the correct \u0027theming_enabled\u0027, restoring the intended access control restriction so that only users holding the theming_enabled permission can invoke the endpoint, consistent with the adjacent previewEventObjects entry.\u003c/p\u003e"
                }
              ],
              "value": "The fix corrects the ACL permission key for the previewEventAttributes action from the malformed string \u0027theming_enabled*\u0027 to the correct \u0027theming_enabled\u0027, restoring the intended access control restriction so that only users holding the theming_enabled permission can invoke the endpoint, consistent with the adjacent previewEventObjects entry."
            }
          ],
          "title": "MISP ACLComponent: Typo in previewEventAttributes ACL key bypasses intended access restriction",
          "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 ACL evaluation behavior when a permission string does not match any valid role (default-deny vs. default-allow) is not visible in the patch; the CVSS assumes the more security-relevant interpretation (authorization bypass) but a denial-of-service interpretation is also possible.",
                      "The affected version range is inferred from the tag boundary v2.5.47 (227 commits after the fix); the exact first affected version is not stated in the patch.",
                      "The CAPEC-126 mapping is the closest available pattern; the actual attack is a configuration typo rather than an active browsing technique, so the mapping is approximate.",
                      "The security impact is assumed to be limited to the previewEventAttributes endpoint; no evidence in the patch suggests other endpoints or data stores are affected.",
                      "The CVSS assumes the endpoint exposes event attribute data viewable by unauthorized users; the actual data sensitivity depends on MISP deployment configuration."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-126",
                        "rationale": "The closest plausible attack pattern is Forced Browsing, where an attacker accesses a resource (the previewEventAttributes endpoint) that should be restricted by the ACL. The typo in the ACL key may cause the authorization check to fail to deny access, effectively allowing a user without the theming_enabled permission to reach the endpoint. Uncertainty: the exact ACL evaluation behavior on a non-matching rule (default-deny vs. default-allow) is not visible in the patch, so it is also possible the typo causes a denial rather than a bypass. CAPEC-126 is selected as the best available match for an access-control bypass via misconfiguration."
                      }
                    ],
                    "commit": "5ac8d1e4dea72f71bec3789350b748f0ad21c42c",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Thomas Lacroix"
                      }
                    ],
                    "cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: The vulnerability is a static typo in configuration; no race or complex condition is needed. AT:N: No attack target manipulation required. PR:L: The attacker must be an authenticated MISP user to reach the endpoint. UI:N: No victim interaction needed. VC:L: If the ACL bypass is confirmed, an unauthorized user could view event attribute data (limited confidentiality impact). VI:N and VA:N: No integrity or availability impact is evident from the patch. SC/SI/SA:N: No secondary system impact. The overall severity is Low, reflecting a single-endpoint access control misconfiguration with limited data exposure.",
                    "fixSummary": "The fix corrects the ACL permission key for the previewEventAttributes action from the malformed string \u0027theming_enabled*\u0027 to the correct \u0027theming_enabled\u0027, restoring the intended access control restriction so that only users holding the theming_enabled permission can invoke the endpoint, consistent with the adjacent previewEventObjects entry.",
                    "generatedAt": "2026-09-22T14:55:18.958107Z",
                    "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": "c102952ebfaba16a0d028044d1bc0ab063381442b99de01bfc592144f2de9cc5",
                    "patchSummary": "In app/Controller/Component/ACLComponent.php (line 473), the ACL array value for the \u0027previewEventAttributes\u0027 key was changed from [\u0027theming_enabled*\u0027] to [\u0027theming_enabled\u0027], removing the erroneous trailing asterisk that made the permission string non-matching. One line changed, one insertion, one deletion.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "5ac8d1e4dea72f71bec3789350b748f0ad21c42c",
                        "patchSha256": "c102952ebfaba16a0d028044d1bc0ab063381442b99de01bfc592144f2de9cc5",
                        "source": "https://github.com/MISP/MISP/commit/5ac8d1e4d.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/5ac8d1e4d.patch",
                        "subject": "fix: [ACL] typo in previewEventAttributes key"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/5ac8d1e4d.patch",
                    "subject": "fix: [ACL] typo in previewEventAttributes key",
                    "tagVersionBoundary": {
                      "commits_after_fix": 227,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-285",
                        "rationale": "The ACL rule for previewEventAttributes contained a typo (\u0027theming_enabled*\u0027) that prevented the authorization check from matching the intended permission, causing the access control mechanism to not enforce the restriction as designed. This is a direct failure of the authorization logic due to a misconfigured rule."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20240"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95805",
        "datePublished": "2026-09-22T14:59:22.041Z",
        "dateReserved": "2026-09-22T14:59:19.797Z",
        "dateUpdated": "2026-09-22T15:53:42.092Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95754 (GCVE-0-2026-95754)

    Vulnerability from cvelistv5 – Published: 2026-09-22 14:53 – Updated: 2026-09-22 15:53
    VLAI
    Title
    MISP: Disabled-user check ineffective in pre-authentication TOTP login branch
    Summary
    In MISP's UsersController login() method, the pre-authentication database query used for the TOTP (two-factor authentication) verification branch did not include the User.disabled column in its SELECT fields list. The query selected only User.password, User.totp, and User.hotp_counter. When the TOTP branch subsequently accessed $unauth_user['User']['disabled'], the key was absent from the result set, producing a PHP 'Undefined array key' warning and causing the expression to evaluate as null (falsy). As a result, the disabled-user guard in the TOTP branch was effectively a no-op: a disabled, TOTP-enrolled user could proceed to the TOTP verification step rather than being rejected at that point.  The commit message explicitly states this was 'harmless in practice' because the subsequent identify() call re-validates the user and would still reject a disabled account.  The practical security impact is therefore minimal, limited to a very small information-disclosure difference in the login response (a TOTP prompt is presented instead of an immediate rejection) and a PHP warning in application logs.
    SSVC
    Exploitation: none Automatable: yes Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:53 UTC
    CWE
    • CWE-285 - Improper Authentication
    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 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-22 14:51
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/3df982ab1.patch 8ddba4461463…
    Confidence
    medium
    Commit Subject Patch SHA-256
    3df982ab192e fix: [login] Fetch User.disabled in the pre-auth TOTP lookup 8ddba4461463…
    Fix summary

    The fix adds User.disabled to the fields array of the pre-authentication find() query so that the disabled-user check in the TOTP branch reads the actual column value and correctly rejects disabled users before they reach the TOTP verification step, restoring the intended guard behavior.

    Patch summary

    A single-line change in app/Controller/UsersController.php appends 'User.disabled' to the fields list of the pre-authentication User find() query in the login() method (line 1385), ensuring the disabled flag is present in the result set when the TOTP branch evaluates it.

    CVSS rationale

    The vulnerability is reachable over the network (AV:N) via the web login endpoint with low complexity (AC:L), no attack target (AT:N), no prior privileges (PR:N), and no user interaction (UI:N). The only potential impact is a very minor confidentiality difference: a disabled, TOTP-enrolled user receives a TOTP prompt instead of an immediate rejection, which could marginally aid account-status enumeration (VC:L). There is no integrity or availability impact (VI:N, VA:N) and no secondary impacts (SC:N, SI:N, SA:N) because the subsequent identify() call still enforces the disabled-user check. The commit message explicitly characterizes the issue as 'harmless in practice.'

    Weakness rationale
    • CWE-285 The disabled-user check in the TOTP login branch was ineffective because the required column was not fetched, allowing a disabled user to pass that guard. The subsequent identify() call still enforced the check, limiting the impact. CWE-285 is the narrowest defensible mapping for an authentication-state check that does not function as intended.
    Attack pattern rationale
    • CAPEC-1 The closest plausible CAPEC is Brute Force, as the scenario involves an attacker attempting to authenticate using known credentials of a disabled, TOTP-enrolled account. The disabled-user guard that should have blocked the attempt at the TOTP branch was ineffective, allowing the attempt to proceed one step further than intended. This mapping is uncertain because the vulnerability does not enable a full authentication bypass (identify() still rejects the user) and the primary effect is a minor information-disclosure difference in the login response rather than a successful brute-force attack.
    Assumptions to verify
    • The commit message states the issue is 'harmless in practice' because identify() re-checks the user; this advisory treats the security impact as minimal (minor information disclosure only).
    • The TOTP feature was introduced in 2023 per the commit message; the exact affected version range is not specified in the patch. The tag boundary v2.5.47 is used as an upper bound for the affected range but is not confirmed as the exact fixed version.
    • CAPEC-1 (Brute Force) is the closest available attack pattern; the actual scenario is a minor authentication-guard bypass rather than a full brute-force attack, so the mapping is approximate.
    • CVSS VC:L is assigned for the marginal information-disclosure difference in the login response; if the CNA determines no meaningful confidentiality impact exists, VC:N would be more appropriate, resulting in a score of 0.0.
    • The PHP version behavior (Warning vs Notice vs Error for undefined array keys) may vary, but in all supported PHP versions the code continues execution with a null value, so the security analysis is unaffected.
    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-95754",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:53:03.966908Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:53:14.911Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "UsersController (login method",
                "TOTP branch)"
              ],
              "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": "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\u003eIn MISP\u0027s UsersController login() method, the pre-authentication database query used for the TOTP (two-factor authentication) verification branch did not include the User.disabled column in its SELECT fields list. The query selected only User.password, User.totp, and User.hotp_counter. When the TOTP branch subsequently accessed $unauth_user[\u0027User\u0027][\u0027disabled\u0027], the key was absent from the result set, producing a PHP \u0027Undefined array key\u0027 warning and causing the expression to evaluate as null (falsy). As a result, the disabled-user guard in the TOTP branch was effectively a no-op: a disabled, TOTP-enrolled user could proceed to the TOTP verification step rather than being rejected at that point.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe commit message explicitly states this was \u0027harmless in practice\u0027 because the subsequent identify() call re-validates the user and would still reject a disabled account.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe practical security impact is therefore minimal, limited to a very small information-disclosure difference in the login response (a TOTP prompt is presented instead of an immediate rejection) and a PHP warning in application logs.\u003c/p\u003e"
                }
              ],
              "value": "In MISP\u0027s UsersController login() method, the pre-authentication database query used for the TOTP (two-factor authentication) verification branch did not include the User.disabled column in its SELECT fields list. The query selected only User.password, User.totp, and User.hotp_counter. When the TOTP branch subsequently accessed $unauth_user[\u0027User\u0027][\u0027disabled\u0027], the key was absent from the result set, producing a PHP \u0027Undefined array key\u0027 warning and causing the expression to evaluate as null (falsy). As a result, the disabled-user guard in the TOTP branch was effectively a no-op: a disabled, TOTP-enrolled user could proceed to the TOTP verification step rather than being rejected at that point.\u00a0\n\nThe commit message explicitly states this was \u0027harmless in practice\u0027 because the subsequent identify() call re-validates the user and would still reject a disabled account.\u00a0\n\nThe practical security impact is therefore minimal, limited to a very small information-disclosure difference in the login response (a TOTP prompt is presented instead of an immediate rejection) and a PHP warning in application logs."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Brute Force"
                }
              ]
            }
          ],
          "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: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-285",
                  "description": "CWE-285 Improper Authentication",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T14:53:56.006Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/3df982ab1"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix adds User.disabled to the fields array of the pre-authentication find() query so that the disabled-user check in the TOTP branch reads the actual column value and correctly rejects disabled users before they reach the TOTP verification step, restoring the intended guard behavior.\u003c/p\u003e"
                }
              ],
              "value": "The fix adds User.disabled to the fields array of the pre-authentication find() query so that the disabled-user check in the TOTP branch reads the actual column value and correctly rejects disabled users before they reach the TOTP verification step, restoring the intended guard behavior."
            }
          ],
          "title": "MISP: Disabled-user check ineffective in pre-authentication TOTP login branch",
          "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 commit message states the issue is \u0027harmless in practice\u0027 because identify() re-checks the user; this advisory treats the security impact as minimal (minor information disclosure only).",
                      "The TOTP feature was introduced in 2023 per the commit message; the exact affected version range is not specified in the patch. The tag boundary v2.5.47 is used as an upper bound for the affected range but is not confirmed as the exact fixed version.",
                      "CAPEC-1 (Brute Force) is the closest available attack pattern; the actual scenario is a minor authentication-guard bypass rather than a full brute-force attack, so the mapping is approximate.",
                      "CVSS VC:L is assigned for the marginal information-disclosure difference in the login response; if the CNA determines no meaningful confidentiality impact exists, VC:N would be more appropriate, resulting in a score of 0.0.",
                      "The PHP version behavior (Warning vs Notice vs Error for undefined array keys) may vary, but in all supported PHP versions the code continues execution with a null value, so the security analysis is unaffected."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "The closest plausible CAPEC is Brute Force, as the scenario involves an attacker attempting to authenticate using known credentials of a disabled, TOTP-enrolled account. The disabled-user guard that should have blocked the attempt at the TOTP branch was ineffective, allowing the attempt to proceed one step further than intended. This mapping is uncertain because the vulnerability does not enable a full authentication bypass (identify() still rejects the user) and the primary effect is a minor information-disclosure difference in the login response rather than a successful brute-force attack."
                      }
                    ],
                    "commit": "3df982ab192e05f5369d62af5674c7a874b32756",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Fable 5.1"
                      }
                    ],
                    "cvssRationale": "The vulnerability is reachable over the network (AV:N) via the web login endpoint with low complexity (AC:L), no attack target (AT:N), no prior privileges (PR:N), and no user interaction (UI:N). The only potential impact is a very minor confidentiality difference: a disabled, TOTP-enrolled user receives a TOTP prompt instead of an immediate rejection, which could marginally aid account-status enumeration (VC:L). There is no integrity or availability impact (VI:N, VA:N) and no secondary impacts (SC:N, SI:N, SA:N) because the subsequent identify() call still enforces the disabled-user check. The commit message explicitly characterizes the issue as \u0027harmless in practice.\u0027",
                    "fixSummary": "The fix adds User.disabled to the fields array of the pre-authentication find() query so that the disabled-user check in the TOTP branch reads the actual column value and correctly rejects disabled users before they reach the TOTP verification step, restoring the intended guard behavior.",
                    "generatedAt": "2026-09-22T14:51:29.308929Z",
                    "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": "8ddba4461463bf2e5b115b4bdd168f91b246f1fcd796dc4da8873ed8da2397c0",
                    "patchSummary": "A single-line change in app/Controller/UsersController.php appends \u0027User.disabled\u0027 to the fields list of the pre-authentication User find() query in the login() method (line 1385), ensuring the disabled flag is present in the result set when the TOTP branch evaluates it.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "3df982ab192e05f5369d62af5674c7a874b32756",
                        "patchSha256": "8ddba4461463bf2e5b115b4bdd168f91b246f1fcd796dc4da8873ed8da2397c0",
                        "source": "https://github.com/MISP/MISP/commit/3df982ab1.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/3df982ab1.patch",
                        "subject": "fix: [login] Fetch User.disabled in the pre-auth TOTP lookup"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/3df982ab1.patch",
                    "subject": "fix: [login] Fetch User.disabled in the pre-auth TOTP lookup",
                    "tagVersionBoundary": {
                      "commits_after_fix": 271,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-285",
                        "rationale": "The disabled-user check in the TOTP login branch was ineffective because the required column was not fetched, allowing a disabled user to pass that guard. The subsequent identify() call still enforced the check, limiting the impact. CWE-285 is the narrowest defensible mapping for an authentication-state check that does not function as intended."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20024"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95754",
        "datePublished": "2026-09-22T14:53:56.006Z",
        "dateReserved": "2026-09-22T14:53:53.341Z",
        "dateUpdated": "2026-09-22T15:53:14.911Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95703 (GCVE-0-2026-95703)

    Vulnerability from cvelistv5 – Published: 2026-09-22 14:49 – Updated: 2026-09-22 15:00
    VLAI
    Title
    MISP OrganisationsController File Existence and Image-Type Oracle via Forged Upload tmp_name
    Summary
    In MISP, the OrganisationsController::__uploadLogo method processed a caller-supplied tmp_name value with filesystem probes (file_exists, MIME type detection, EXIF reading) before verifying that the value corresponded to a genuine PHP file upload via is_uploaded_file. An authenticated site-admin user could supply an arbitrary server file path as the tmp_name parameter. The application would then probe that path and return distinct validation error messages depending on whether the file existed and what its image type was, effectively creating a file-existence and image-type oracle against the server filesystem. The vulnerability requires site-admin privileges and does not allow arbitrary file read, code execution, or modification; the impact is limited to disclosure of whether a given path exists on the server and, for image files, their type.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 14:59 UTC
    CWE
    • CWE-200 - Exposure of Sensitive Information to an Unauthorized Actor
    • 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 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-22 14:45
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/12eaadc9e.patch 175abb34a19c…
    Confidence
    medium
    Commit Subject Patch SHA-256
    12eaadc9e28b fix: [organisation] Reject a forged upload path in the 175abb34a19c…
    Fix summary

    The is_uploaded_file() guard is hoisted to execute immediately after the basic size/error check and before any filesystem probe (file_exists, MIME detection, EXIF reading). If the tmp_name is empty or does not correspond to a genuine PHP upload, the method returns false early, preventing any filesystem interaction with an attacker-controlled path and eliminating the information oracle.

    Patch summary

    In app/Controller/OrganisationsController.php, six lines are inserted inside __uploadLogo() after the existing size/error check. The added block checks whether $logo['tmp_name'] is empty or fails is_uploaded_file(), and if so, returns false immediately. A comment explains that only a genuine PHP upload may reach the subsequent filesystem probes. No other logic is modified.

    CVSS rationale

    AV:N: exploited over the network via the MISP web interface. AC:L: the attack is a simple parameter substitution with no race or timing requirement. AT:N: no attack-target manipulation is needed. PR:H: the commit message explicitly states this is a site-admin-only issue. UI:N: no victim interaction beyond the admin's own request. VC:L: limited confidentiality impact — disclosure of file existence and image type on the server, but no file content is read. VI:N, VA:N: no integrity or availability impact. SC:N, SI:N, SA:N: no secondary-component impact.

    Weakness rationale
    • CWE-200 The primary security impact is the disclosure of file existence and image type on the server through differential error messages, which constitutes sensitive information exposure to an authenticated (but not fully privileged) actor.
    • CWE-20 The root cause is that the caller-supplied tmp_name value was used in filesystem operations without first validating that it originated from a genuine PHP file upload (is_uploaded_file check was performed too late or not at all before the probes).
    Attack pattern rationale
    • CAPEC-126 The attacker manipulates the tmp_name parameter of the upload form to point to an arbitrary server file path, causing the application to probe that path and leak information through its responses. This is the closest CAPEC pattern to the observed attack: tampering with a request parameter to trigger unintended server-side behavior. Uncertainty: no CAPEC pattern specifically covers file-existence oracles via forged upload paths, so CAPEC-126 is the best available match.
    Assumptions to verify
    • The commit message states the issue is 'site-admin-only'; this is taken as the required privilege level (PR:H) without independent verification of MISP's role model.
    • The tag_version_boundary indicates v2.5.47 with 48 commits after the fix, suggesting the fix landed shortly after v2.5.47, but no explicit fixed version tag is provided; the affected range is therefore marked as less_than 2.5.47 with low confidence.
    • The CAPEC-126 mapping is the closest available pattern; no CAPEC specifically describes a file-existence oracle via forged upload parameters, so the mapping is approximate.
    • The commit message references a similar pattern in the event-report picture upload; whether that path was also fixed in this or a separate commit is not determined by this patch alone.
    • The 'found during the internal review' statement in the commit message is treated as a generic internal process note; no specific finder is credited because the metadata explicitly lists finders as empty.
    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-95703",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T14:59:43.387710Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:00:15.086Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "OrganisationsController"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/OrganisationsController.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"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eIn MISP, the OrganisationsController::__uploadLogo method processed a caller-supplied tmp_name value with filesystem probes (file_exists, MIME type detection, EXIF reading) before verifying that the value corresponded to a genuine PHP file upload via is_uploaded_file. An authenticated site-admin user could supply an arbitrary server file path as the tmp_name parameter. The application would then probe that path and return distinct validation error messages depending on whether the file existed and what its image type was, effectively creating a file-existence and image-type oracle against the server filesystem.\u003c/p\u003e\u003cp\u003eThe vulnerability requires site-admin privileges and does not allow arbitrary file read, code execution, or modification; the impact is limited to disclosure of whether a given path exists on the server and, for image files, their type.\u0026nbsp;\u003c/p\u003e"
                }
              ],
              "value": "In MISP, the OrganisationsController::__uploadLogo method processed a caller-supplied tmp_name value with filesystem probes (file_exists, MIME type detection, EXIF reading) before verifying that the value corresponded to a genuine PHP file upload via is_uploaded_file. An authenticated site-admin user could supply an arbitrary server file path as the tmp_name parameter. The application would then probe that path and return distinct validation error messages depending on whether the file existed and what its image type was, effectively creating a file-existence and image-type oracle against the server filesystem.\n\nThe vulnerability requires site-admin privileges and does not allow arbitrary file read, code execution, or modification; the impact is limited to disclosure of whether a given path exists on the server and, for image files, their type."
            }
          ],
          "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": 5.1,
                "baseSeverity": "MEDIUM",
                "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: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-200",
                  "description": "CWE-200 Exposure of Sensitive Information to an Unauthorized Actor",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T14:49:42.588Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/12eaadc9e"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe is_uploaded_file() guard is hoisted to execute immediately after the basic size/error check and before any filesystem probe (file_exists, MIME detection, EXIF reading). If the tmp_name is empty or does not correspond to a genuine PHP upload, the method returns false early, preventing any filesystem interaction with an attacker-controlled path and eliminating the information oracle.\u003c/p\u003e"
                }
              ],
              "value": "The is_uploaded_file() guard is hoisted to execute immediately after the basic size/error check and before any filesystem probe (file_exists, MIME detection, EXIF reading). If the tmp_name is empty or does not correspond to a genuine PHP upload, the method returns false early, preventing any filesystem interaction with an attacker-controlled path and eliminating the information oracle."
            }
          ],
          "title": "MISP OrganisationsController File Existence and Image-Type Oracle via Forged Upload tmp_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": "full",
                      "scope": "record",
                      "tags": [
                        "ai-computer-assisted:llm-generated",
                        "ai-computer-assisted:classification"
                      ]
                    }
                  ]
                },
                "bcp-05-x-02": {
                  "x_patch2vuln": {
                    "assumptions": [
                      "The commit message states the issue is \u0027site-admin-only\u0027; this is taken as the required privilege level (PR:H) without independent verification of MISP\u0027s role model.",
                      "The tag_version_boundary indicates v2.5.47 with 48 commits after the fix, suggesting the fix landed shortly after v2.5.47, but no explicit fixed version tag is provided; the affected range is therefore marked as less_than 2.5.47 with low confidence.",
                      "The CAPEC-126 mapping is the closest available pattern; no CAPEC specifically describes a file-existence oracle via forged upload parameters, so the mapping is approximate.",
                      "The commit message references a similar pattern in the event-report picture upload; whether that path was also fixed in this or a separate commit is not determined by this patch alone.",
                      "The \u0027found during the internal review\u0027 statement in the commit message is treated as a generic internal process note; no specific finder is credited because the metadata explicitly lists finders as empty."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-126",
                        "rationale": "The attacker manipulates the tmp_name parameter of the upload form to point to an arbitrary server file path, causing the application to probe that path and leak information through its responses. This is the closest CAPEC pattern to the observed attack: tampering with a request parameter to trigger unintended server-side behavior. Uncertainty: no CAPEC pattern specifically covers file-existence oracles via forged upload paths, so CAPEC-126 is the best available match."
                      }
                    ],
                    "commit": "12eaadc9e28bdb7fc723faa2f006eaaa13c4ffdb",
                    "confidence": "medium",
                    "credits": [
                      {
                        "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 MISP web interface. AC:L: the attack is a simple parameter substitution with no race or timing requirement. AT:N: no attack-target manipulation is needed. PR:H: the commit message explicitly states this is a site-admin-only issue. UI:N: no victim interaction beyond the admin\u0027s own request. VC:L: limited confidentiality impact \u2014 disclosure of file existence and image type on the server, but no file content is read. VI:N, VA:N: no integrity or availability impact. SC:N, SI:N, SA:N: no secondary-component impact.",
                    "fixSummary": "The is_uploaded_file() guard is hoisted to execute immediately after the basic size/error check and before any filesystem probe (file_exists, MIME detection, EXIF reading). If the tmp_name is empty or does not correspond to a genuine PHP upload, the method returns false early, preventing any filesystem interaction with an attacker-controlled path and eliminating the information oracle.",
                    "generatedAt": "2026-09-22T14:45:44.315009Z",
                    "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": "175abb34a19cd998d66ca5363124749b640d7b922547e5d3aff8bd4e4239dfa7",
                    "patchSummary": "In app/Controller/OrganisationsController.php, six lines are inserted inside __uploadLogo() after the existing size/error check. The added block checks whether $logo[\u0027tmp_name\u0027] is empty or fails is_uploaded_file(), and if so, returns false immediately. A comment explains that only a genuine PHP upload may reach the subsequent filesystem probes. No other logic is modified.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "12eaadc9e28bdb7fc723faa2f006eaaa13c4ffdb",
                        "patchSha256": "175abb34a19cd998d66ca5363124749b640d7b922547e5d3aff8bd4e4239dfa7",
                        "source": "https://github.com/MISP/MISP/commit/12eaadc9e.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/12eaadc9e.patch",
                        "subject": "fix: [organisation] Reject a forged upload path in the"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/12eaadc9e.patch",
                    "subject": "fix: [organisation] Reject a forged upload path in the",
                    "tagVersionBoundary": {
                      "commits_after_fix": 48,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-200",
                        "rationale": "The primary security impact is the disclosure of file existence and image type on the server through differential error messages, which constitutes sensitive information exposure to an authenticated (but not fully privileged) actor."
                      },
                      {
                        "cweId": "CWE-20",
                        "rationale": "The root cause is that the caller-supplied tmp_name value was used in filesystem operations without first validating that it originated from a genuine PHP file upload (is_uploaded_file check was performed too late or not at all before the probes)."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20270"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95703",
        "datePublished": "2026-09-22T14:49:42.588Z",
        "dateReserved": "2026-09-22T14:49:37.648Z",
        "dateUpdated": "2026-09-22T15:00:15.086Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95701 (GCVE-0-2026-95701)

    Vulnerability from cvelistv5 – Published: 2026-09-22 14:44 – Updated: 2026-09-22 14:59
    VLAI
    Title
    MISP Path Traversal via Organization Name in Org-Statistics Logo Check
    Summary
    In MISP, the __statisticsOrgs method in UsersController.php used the organization name directly as a file-system path component when checking for the existence of an organization logo image. The original code called file_exists() with a path constructed as APP . 'webroot' . DS . 'img' . DS . 'orgs' . DS . $k . '.png', where $k is the organization name. Because the referenced directory (app/webroot/img/orgs) no longer exists in current MISP deployments (org logos were relocated to files/img/orgs), the check was functionally dead and never triggered. However, the underlying pattern—concatenating an attacker-influenced organization name into a file path without sanitization—constitutes a path traversal weakness. An organization name containing directory traversal sequences (e.g., '../../../../etc/passwd') would, if the target directory existed, allow an authenticated user with the ability to create or rename an organization to probe for the existence of arbitrary files on the server.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 14:59 UTC
    CWE
    • CWE-22 - Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
    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 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-22 14:38
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/a2f7cba6e.patch 79f69959d0bc…
    Confidence
    medium
    Commit Subject Patch SHA-256
    a2f7cba6e74b fix: [ui] Point the org-statistics logo flag at the live 79f69959d0bc…
    Fix summary

    The fix corrects the logo directory path from the obsolete app/webroot/img/orgs to the current files/img/orgs location, expands the lookup to cover id, name, and uuid fields across png and svg extensions (mirroring the getOrgLogo helper), and adds a security guard: the candidate path is resolved with realpath() and verified via str_starts_with() against the resolved base directory, so any organization name containing traversal sequences (../) that would resolve outside files/img/orgs is rejected.

    Patch summary

    In app/Controller/UsersController.php __statisticsOrgs(): (1) added 'uuid' to the Organisation query fields; (2) replaced the single file_exists() call against APP/webroot/img/orgs/$k.png with a nested loop over fields [id, name, uuid] and extensions [png, svg]; (3) for each candidate, called realpath() on the full path and compared it with str_starts_with() against the realpath of the base directory (APP/files/img/orgs/), setting the logo flag only when the resolved path is confirmed to be inside that directory; (4) added a break 2 to exit both loops once a match is found.

    CVSS rationale

    AV:N – MISP is a network-accessible web application. AC:L – the traversal sequence in an org name is straightforward to construct. AT:N – no special target-side conditions beyond the org name being stored. PR:H – the attacker must have sufficient privileges to create or rename an organization (typically admin or org-admin role). UI:N – no user interaction required; the check fires server-side during statistics rendering. VC:L – the impact is limited to file-existence disclosure (boolean oracle); file contents are not read. VI:N, VA:N – no integrity or availability impact. SC/SI/SA:N – no secondary-system impact. Note: the vulnerability was latent in practice because the referenced directory did not exist, but the code pattern was exploitable if the directory were present or restored.

    Weakness rationale
    • CWE-22 The organization name (an attacker-influenced string) was concatenated directly into a file-system path for a file_exists() check without any sanitization or directory-confinement validation. The fix explicitly guards against '../' sequences escaping the intended directory, confirming the weakness is path traversal.
    Attack pattern rationale
    • CAPEC-1 The attack pattern involves manipulating a string value (the organization name) to inject path traversal sequences (../) that cause the application to reference files outside the intended directory. CAPEC-1 is the closest match because the core technique is crafting a string input to alter the application's file-path resolution. Uncertainty: CAPEC-126 (Leveraging Unintended Functionality) could also apply since the logo-existence check was an unintended side channel, but CAPEC-1 more directly describes the string-manipulation mechanism.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary (v2.5.47, 50 commits after fix); the exact fixed release tag is not stated in the patch metadata, so 'less_than 2.5.47' is an approximation and may need CNA confirmation.
    • The vulnerability was latent in deployed instances because the referenced directory (app/webroot/img/orgs) did not exist; the CVSS reflects the code-level weakness rather than a confirmed active exploit.
    • PR:H assumes that creating or renaming an organization requires elevated privileges (admin or org-admin); if MISP allows lower-privileged users to set org names, PR could be lower.
    • CAPEC-1 (String Manipulation) is the closest available pattern; the exact CAPEC for path traversal via a stored string field is not explicitly enumerated in the CAPEC catalog, so this is a best-effort mapping.
    • 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-95701",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T14:59:24.647249Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T14:59:46.097Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "UsersController::__statisticsOrgs"
              ],
              "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"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Claude Opus 4.8"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eIn MISP, the __statisticsOrgs method in UsersController.php used the organization name directly as a file-system path component when checking for the existence of an organization logo image. The original code called file_exists() with a path constructed as APP . \u0027webroot\u0027 . DS . \u0027img\u0027 . DS . \u0027orgs\u0027 . DS . $k . \u0027.png\u0027, where $k is the organization name. Because the referenced directory (app/webroot/img/orgs) no longer exists in current MISP deployments (org logos were relocated to files/img/orgs), the check was functionally dead and never triggered. However, the underlying pattern\u2014concatenating an attacker-influenced organization name into a file path without sanitization\u2014constitutes a path traversal weakness. An organization name containing directory traversal sequences (e.g., \u0027../../../../etc/passwd\u0027) would, if the target directory existed, allow an authenticated user with the ability to create or rename an organization to probe for the existence of arbitrary files on the server.\u003c/p\u003e"
                }
              ],
              "value": "In MISP, the __statisticsOrgs method in UsersController.php used the organization name directly as a file-system path component when checking for the existence of an organization logo image. The original code called file_exists() with a path constructed as APP . \u0027webroot\u0027 . DS . \u0027img\u0027 . DS . \u0027orgs\u0027 . DS . $k . \u0027.png\u0027, where $k is the organization name. Because the referenced directory (app/webroot/img/orgs) no longer exists in current MISP deployments (org logos were relocated to files/img/orgs), the check was functionally dead and never triggered. However, the underlying pattern\u2014concatenating an attacker-influenced organization name into a file path without sanitization\u2014constitutes a path traversal weakness. An organization name containing directory traversal sequences (e.g., \u0027../../../../etc/passwd\u0027) would, if the target directory existed, allow an authenticated user with the ability to create or rename an organization to probe for the existence of arbitrary files on the server."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 String Manipulation"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 5.1,
                "baseSeverity": "MEDIUM",
                "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: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-22",
                  "description": "CWE-22 Improper Limitation of a Pathname to a Restricted Directory (\u0027Path Traversal\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T14:44:21.916Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/a2f7cba6e"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix corrects the logo directory path from the obsolete app/webroot/img/orgs to the current files/img/orgs location, expands the lookup to cover id, name, and uuid fields across png and svg extensions (mirroring the getOrgLogo helper), and adds a security guard: the candidate path is resolved with realpath() and verified via str_starts_with() against the resolved base directory, so any organization name containing traversal sequences (../) that would resolve outside files/img/orgs is rejected.\u003c/p\u003e"
                }
              ],
              "value": "The fix corrects the logo directory path from the obsolete app/webroot/img/orgs to the current files/img/orgs location, expands the lookup to cover id, name, and uuid fields across png and svg extensions (mirroring the getOrgLogo helper), and adds a security guard: the candidate path is resolved with realpath() and verified via str_starts_with() against the resolved base directory, so any organization name containing traversal sequences (../) that would resolve outside files/img/orgs is rejected."
            }
          ],
          "title": "MISP Path Traversal via Organization Name in Org-Statistics Logo Check",
          "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 range is inferred from the tag_version_boundary (v2.5.47, 50 commits after fix); the exact fixed release tag is not stated in the patch metadata, so \u0027less_than 2.5.47\u0027 is an approximation and may need CNA confirmation.",
                      "The vulnerability was latent in deployed instances because the referenced directory (app/webroot/img/orgs) did not exist; the CVSS reflects the code-level weakness rather than a confirmed active exploit.",
                      "PR:H assumes that creating or renaming an organization requires elevated privileges (admin or org-admin); if MISP allows lower-privileged users to set org names, PR could be lower.",
                      "CAPEC-1 (String Manipulation) is the closest available pattern; the exact CAPEC for path traversal via a stored string field is not explicitly enumerated in the CAPEC catalog, so this is a best-effort mapping.",
                      "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-1",
                        "rationale": "The attack pattern involves manipulating a string value (the organization name) to inject path traversal sequences (../) that cause the application to reference files outside the intended directory. CAPEC-1 is the closest match because the core technique is crafting a string input to alter the application\u0027s file-path resolution. Uncertainty: CAPEC-126 (Leveraging Unintended Functionality) could also apply since the logo-existence check was an unintended side channel, but CAPEC-1 more directly describes the string-manipulation mechanism."
                      }
                    ],
                    "commit": "a2f7cba6e74b791e30013f10720dadbc4117d989",
                    "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 traversal sequence in an org name is straightforward to construct. AT:N \u2013 no special target-side conditions beyond the org name being stored. PR:H \u2013 the attacker must have sufficient privileges to create or rename an organization (typically admin or org-admin role). UI:N \u2013 no user interaction required; the check fires server-side during statistics rendering. VC:L \u2013 the impact is limited to file-existence disclosure (boolean oracle); file contents are not read. VI:N, VA:N \u2013 no integrity or availability impact. SC/SI/SA:N \u2013 no secondary-system impact. Note: the vulnerability was latent in practice because the referenced directory did not exist, but the code pattern was exploitable if the directory were present or restored.",
                    "fixSummary": "The fix corrects the logo directory path from the obsolete app/webroot/img/orgs to the current files/img/orgs location, expands the lookup to cover id, name, and uuid fields across png and svg extensions (mirroring the getOrgLogo helper), and adds a security guard: the candidate path is resolved with realpath() and verified via str_starts_with() against the resolved base directory, so any organization name containing traversal sequences (../) that would resolve outside files/img/orgs is rejected.",
                    "generatedAt": "2026-09-22T14:38:57.879793Z",
                    "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": "79f69959d0bcac7da9eea5e1dcd7edc108868ea8382a8e477d3c72e749f06a37",
                    "patchSummary": "In app/Controller/UsersController.php __statisticsOrgs(): (1) added \u0027uuid\u0027 to the Organisation query fields; (2) replaced the single file_exists() call against APP/webroot/img/orgs/$k.png with a nested loop over fields [id, name, uuid] and extensions [png, svg]; (3) for each candidate, called realpath() on the full path and compared it with str_starts_with() against the realpath of the base directory (APP/files/img/orgs/), setting the logo flag only when the resolved path is confirmed to be inside that directory; (4) added a break 2 to exit both loops once a match is found.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "a2f7cba6e74b791e30013f10720dadbc4117d989",
                        "patchSha256": "79f69959d0bcac7da9eea5e1dcd7edc108868ea8382a8e477d3c72e749f06a37",
                        "source": "https://github.com/MISP/MISP/commit/a2f7cba6e.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/a2f7cba6e.patch",
                        "subject": "fix: [ui] Point the org-statistics logo flag at the live"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/a2f7cba6e.patch",
                    "subject": "fix: [ui] Point the org-statistics logo flag at the live",
                    "tagVersionBoundary": {
                      "commits_after_fix": 50,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-22",
                        "rationale": "The organization name (an attacker-influenced string) was concatenated directly into a file-system path for a file_exists() check without any sanitization or directory-confinement validation. The fix explicitly guards against \u0027../\u0027 sequences escaping the intended directory, confirming the weakness is path traversal."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20065"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95701",
        "datePublished": "2026-09-22T14:44:21.916Z",
        "dateReserved": "2026-09-22T14:44:19.514Z",
        "dateUpdated": "2026-09-22T14:59:46.097Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95698 (GCVE-0-2026-95698)

    Vulnerability from cvelistv5 – Published: 2026-09-22 14:36 – Updated: 2026-09-22 15:04
    VLAI
    Title
    MISP Path Traversal in OrgImgHelper findOrgImage via Crafted Organization Name
    Summary
    The findOrgImage method in MISP's OrgImgHelper constructs a filesystem path by concatenating a user-supplied organization identifier with a fixed image directory and a file extension, then calls file_exists() on the resulting path. The organization name field is attacker-controllable through event import, which sets Org.name. Because no validation was performed on the field value before path construction, an organization name containing directory traversal sequences (e.g., ../../etc/passwd) would cause the path to resolve outside the intended org-image directory.  This yields two security impacts:   - an arbitrary file existence oracle, since file_exists() returns a boolean for any path the process can access.  - an arbitrary file read limited to files with .png or .svg extensions, because the resolved filename is returned and subsequently rendered or served to the requesting user. The vulnerability requires an authenticated user with the ability to create or import events that set the organization name.
    SSVC
    Exploitation: none Automatable: yes Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:03 UTC
    CWE
    • CWE-22 - Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
    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 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-22 14:32
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/e00986075.patch 646ef716ac7a…
    Confidence
    high
    Commit Subject Patch SHA-256
    e00986075acf fix: [security] Reject path traversal in the org-logo 646ef716ac7a…
    Fix summary

    The fix adds input validation in findOrgImage so that each organization identifier value (id, name, uuid) is checked to be a non-empty plain filename component. Values containing path separators (detected via basename comparison) or dot-dot sequences are rejected, preventing the constructed path from escaping the designated org-image directory. The validated value is then used in the file_exists call and the returned image reference.

    Patch summary

    In app/View/Helper/OrgImgHelper.php, the findOrgImage method now casts each field value to a string and rejects it if it is empty, if basename($value) does not equal $value (indicating embedded path separators), or if it contains the substring '..'. The previously unvalidated $options[$field] is replaced with the validated $value in both the file_exists() call and the assignment to $image. Ten lines added, two lines removed in a single file.

    CVSS rationale

    AV:N: MISP is a network-accessible web application; the org name is set via API/event import over the network. AC:L: The attacker simply includes ../ in an org name during a normal import operation; no race or complex condition is needed. AT:N: No manipulation of the target beyond normal input is required. PR:L: The attacker must be an authenticated MISP user with permission to create or import events that set the organization name. UI:N: No victim interaction is required; the traversal occurs server-side during view rendering. VC:L: The attacker gains a file-existence oracle and can read .png/.svg files outside the intended directory, a limited but real confidentiality breach. VI:N, VA:N: No integrity or availability impact is evidenced. SC:N, SI:N, SA:N: No secondary impacts are indicated by the patch or commit message.

    Weakness rationale
    • CWE-22 The vulnerability is a textbook path traversal: a user-controlled string (org name) is concatenated into a filesystem path without sanitization, allowing the resolved path to escape the intended directory. The fix explicitly rejects path separators and dot-dot sequences, confirming the root cause is missing path confinement.
    Attack pattern rationale
    • CAPEC-126 CAPEC-126 describes an attacker manipulating path components in a request to access files or directories outside the intended scope. This matches the vulnerability exactly: the org name field is manipulated to include ../ sequences, causing the server to probe and potentially read files outside the org-image directory. The mapping is direct and unambiguous.
    Assumptions to verify
    • The affected version boundary is inferred from the nearest git tag v2.5.47 with 51 commits after the fix; the exact last-affected and first-fixed release numbers are not explicitly stated in the patch metadata.
    • PR:L assumes the attacker needs an authenticated MISP account with event-import or org-creation privileges; the patch does not specify the exact permission level required.
    • The confidentiality impact is rated Low because the file read and existence oracle are limited to files with .png or .svg extensions; a broader arbitrary file read is not possible through this code path.
    • CAPEC-126 is selected as the closest match; no uncertainty is noted because the attack pattern (path traversal via crafted filename) maps directly to this CAPEC entry.
    • The commit date (2026-09-16) is taken at face value from the patch metadata; no independent verification of the timeline 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 6 9 high 5
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-95698",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:03:36.684296Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:04:08.199Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/View/Helper/OrgImgHelper.php"
              ],
              "product": "MISP",
              "programFiles": [
                "app/View/Helper/OrgImgHelper.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\u003eThe findOrgImage method in MISP\u0027s OrgImgHelper constructs a filesystem path by concatenating a user-supplied organization identifier with a fixed image directory and a file extension, then calls file_exists() on the resulting path. The organization name field is attacker-controllable through event import, which sets Org.name. Because no validation was performed on the field value before path construction, an organization name containing directory traversal sequences (e.g., ../../etc/passwd) would cause the path to resolve outside the intended org-image directory.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThis yields two security impacts:\u0026nbsp;\u003c/p\u003e\u2003- an arbitrary file existence oracle, since file_exists() returns a boolean for any path the process can access.\u003cbr\u003e\u003cdiv\u003e\u2003-\u0026nbsp;an arbitrary file read limited to files with .png or .svg extensions, because the resolved filename is returned and subsequently rendered or served to the requesting user.\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cp\u003eThe vulnerability requires an authenticated user with the ability to create or import events that set the organization name.\u003c/p\u003e"
                }
              ],
              "value": "The findOrgImage method in MISP\u0027s OrgImgHelper constructs a filesystem path by concatenating a user-supplied organization identifier with a fixed image directory and a file extension, then calls file_exists() on the resulting path. The organization name field is attacker-controllable through event import, which sets Org.name. Because no validation was performed on the field value before path construction, an organization name containing directory traversal sequences (e.g., ../../etc/passwd) would cause the path to resolve outside the intended org-image directory.\u00a0\n\nThis yields two security impacts:\u00a0\n\n\u2003- an arbitrary file existence oracle, since file_exists() returns a boolean for any path the process can access.\n\u2003-\u00a0an arbitrary file read limited to files with .png or .svg extensions, because the resolved filename is returned and subsequently rendered or served to the requesting user.\n\n\n\n\nThe vulnerability requires an authenticated user with the ability to create or import events that set the organization name."
            }
          ],
          "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": 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-22",
                  "description": "CWE-22 Improper Limitation of a Pathname to a Restricted Directory (\u0027Path Traversal\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T14:36:35.043Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/e00986075"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix adds input validation in findOrgImage so that each organization identifier value (id, name, uuid) is checked to be a non-empty plain filename component. Values containing path separators (detected via basename comparison) or dot-dot sequences are rejected, preventing the constructed path from escaping the designated org-image directory. The validated value is then used in the file_exists call and the returned image reference.\u003c/p\u003e"
                }
              ],
              "value": "The fix adds input validation in findOrgImage so that each organization identifier value (id, name, uuid) is checked to be a non-empty plain filename component. Values containing path separators (detected via basename comparison) or dot-dot sequences are rejected, preventing the constructed path from escaping the designated org-image directory. The validated value is then used in the file_exists call and the returned image reference."
            }
          ],
          "title": "MISP Path Traversal in OrgImgHelper findOrgImage via Crafted Organization 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": "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 nearest git tag v2.5.47 with 51 commits after the fix; the exact last-affected and first-fixed release numbers are not explicitly stated in the patch metadata.",
                      "PR:L assumes the attacker needs an authenticated MISP account with event-import or org-creation privileges; the patch does not specify the exact permission level required.",
                      "The confidentiality impact is rated Low because the file read and existence oracle are limited to files with .png or .svg extensions; a broader arbitrary file read is not possible through this code path.",
                      "CAPEC-126 is selected as the closest match; no uncertainty is noted because the attack pattern (path traversal via crafted filename) maps directly to this CAPEC entry.",
                      "The commit date (2026-09-16) is taken at face value from the patch metadata; no independent verification of the timeline was performed."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-126",
                        "rationale": "CAPEC-126 describes an attacker manipulating path components in a request to access files or directories outside the intended scope. This matches the vulnerability exactly: the org name field is manipulated to include ../ sequences, causing the server to probe and potentially read files outside the org-image directory. The mapping is direct and unambiguous."
                      }
                    ],
                    "commit": "e00986075acf47257030caa0298fad7b730a764c",
                    "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: MISP is a network-accessible web application; the org name is set via API/event import over the network. AC:L: The attacker simply includes ../ in an org name during a normal import operation; no race or complex condition is needed. AT:N: No manipulation of the target beyond normal input is required. PR:L: The attacker must be an authenticated MISP user with permission to create or import events that set the organization name. UI:N: No victim interaction is required; the traversal occurs server-side during view rendering. VC:L: The attacker gains a file-existence oracle and can read .png/.svg files outside the intended directory, a limited but real confidentiality breach. VI:N, VA:N: No integrity or availability impact is evidenced. SC:N, SI:N, SA:N: No secondary impacts are indicated by the patch or commit message.",
                    "fixSummary": "The fix adds input validation in findOrgImage so that each organization identifier value (id, name, uuid) is checked to be a non-empty plain filename component. Values containing path separators (detected via basename comparison) or dot-dot sequences are rejected, preventing the constructed path from escaping the designated org-image directory. The validated value is then used in the file_exists call and the returned image reference.",
                    "generatedAt": "2026-09-22T14:32:54.822056Z",
                    "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": "646ef716ac7a2ad0525154af9e0a6a7ffac9739a4f4d7114994521ae57d93fbd",
                    "patchSummary": "In app/View/Helper/OrgImgHelper.php, the findOrgImage method now casts each field value to a string and rejects it if it is empty, if basename($value) does not equal $value (indicating embedded path separators), or if it contains the substring \u0027..\u0027. The previously unvalidated $options[$field] is replaced with the validated $value in both the file_exists() call and the assignment to $image. Ten lines added, two lines removed in a single file.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "e00986075acf47257030caa0298fad7b730a764c",
                        "patchSha256": "646ef716ac7a2ad0525154af9e0a6a7ffac9739a4f4d7114994521ae57d93fbd",
                        "source": "https://github.com/MISP/MISP/commit/e00986075.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/e00986075.patch",
                        "subject": "fix: [security] Reject path traversal in the org-logo"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/e00986075.patch",
                    "subject": "fix: [security] Reject path traversal in the org-logo",
                    "tagVersionBoundary": {
                      "commits_after_fix": 51,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-22",
                        "rationale": "The vulnerability is a textbook path traversal: a user-controlled string (org name) is concatenated into a filesystem path without sanitization, allowing the resolved path to escape the intended directory. The fix explicitly rejects path separators and dot-dot sequences, confirming the root cause is missing path confinement."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20266"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95698",
        "datePublished": "2026-09-22T14:36:35.043Z",
        "dateReserved": "2026-09-22T14:36:33.476Z",
        "dateUpdated": "2026-09-22T15:04:08.199Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95697 (GCVE-0-2026-95697)

    Vulnerability from cvelistv5 – Published: 2026-09-22 14:31 – Updated: 2026-09-22 15:06
    VLAI
    Title
    MISP: Insufficient Authorization Allows Sharing Group Editors to Overwrite Organization Metadata
    Summary
    MISP contains an authorization flaw in the Organisation model's captureOrg method. When the $force parameter is set to true, the method unconditionally overwrites organization metadata fields without verifying that the invoking user holds sufficient privileges. A user with a sharing group (SG) editor role can trigger this code path, allowing them to modify organization metadata that should be restricted to site administrators or users with sync permissions. According to the commit message, this could lead to blueprint-based sharing group manipulation, meaning an attacker with SG editor access could alter organizational attributes in ways that influence how sharing groups and blueprints behave across the MISP instance.  The vulnerability requires an authenticated user with at least SG editor privileges and network access to the MISP web interface. The impact is primarily on the integrity of organization records and, potentially, on the integrity of sharing group configurations derived from those records.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:06 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 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-22 14:23
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/f3ec974ee.patch 63108ba85f58…
    Confidence
    medium
    Commit Subject Patch SHA-256
    f3ec974ee2d7 fix: [security] overwrite of org metadata by sg editors 63108ba85f58…
    Fix summary

    The fix adds an authorization check to the captureOrg method so that the forced overwrite of organization metadata fields is only permitted when the invoking user holds either the site_admin permission or the sync permission. This ensures that low-privilege roles such as sharing group editors can no longer trigger the metadata overwrite path, closing the authorization gap.

    Patch summary

    In app/Model/Organisation.php, the condition guarding the forced overwrite of organization metadata fields (type, date_created, date_modified, nationality, sector, contacts) was changed from a simple 'if ($force)' check to 'if ($force && (!empty($user['Role']['perm_site_admin']) || !empty($user['Role']['perm_sync'])))'. This one-line change adds a role-based authorization requirement so that only site administrators or sync-permitted users can execute the metadata overwrite when $force is true.

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: The attack requires only calling the existing captureOrg function with $force=true; no race conditions or complex bypasses are needed. AT:N: No user interaction or attack tooling beyond normal API usage is required. PR:L: The attacker needs an authenticated account with at least SG editor privileges, which is a low-privilege role in MISP. UI:N: No victim interaction is required. VC:N: No confidentiality impact is evident from the patch. VI:H: Organization metadata (type, nationality, sector, contacts, dates) can be arbitrarily modified, representing high integrity impact on the vulnerable component. VA:N: No availability impact. SC:N: No direct confidentiality impact on other systems. SI:H: The commit message explicitly notes the issue 'could lead to blueprint based SG manipulation,' indicating integrity impact extends to sharing group configurations in the broader MISP ecosystem. SA:N: No availability impact on other systems.

    Weakness rationale
    • CWE-862 The captureOrg method performed a privileged operation (overwriting organization metadata) based solely on the $force flag without verifying that the authenticated user held the necessary permission (site_admin or sync). The authorization check was entirely absent for this code path, which is the definition of a missing authorization vulnerability.
    Attack pattern rationale
    • CAPEC-100 The closest plausible CAPEC is Parameter Tampering: an authenticated user with a lower-privilege role (SG editor) invokes the captureOrg function with the $force parameter set to true, triggering a code path that was intended only for higher-privilege users. The user manipulates a function parameter to cause unintended privileged behavior. This mapping is approximate because the core issue is a missing authorization check rather than classic parameter tampering, but no CAPEC entry more precisely describes an authenticated user exploiting a missing permission gate via a boolean flag.
    Assumptions to verify
    • The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.47, 139 commits after fix), suggesting the fix landed in or before v2.5.47. The exact first affected version is not specified in the patch.
    • The 'blueprint based SG manipulation' impact mentioned in the commit message is taken at face value for the SI:H rating; the patch itself only shows the org metadata overwrite fix and does not include code demonstrating the SG manipulation path.
    • CAPEC-100 (Parameter Tampering) is the closest available mapping; the vulnerability is more precisely a missing authorization check (CWE-862) than a classic parameter tampering scenario, but no CAPEC entry directly models 'authenticated user exploits missing permission gate via a boolean flag.'
    • The PR:L rating assumes that SG editor is a low-privilege role in MISP's permission hierarchy; the patch references perm_site_admin and perm_sync as the required higher-level permissions, implying SG editor is below that level.
    • No specific MISP version range is confirmed beyond the v2.5.47 tag boundary; earlier versions may or may not be affected depending on when the captureOrg method was introduced.
    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-95697",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:06:23.172470Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:06:43.859Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "Organisation model (app/Model/Organisation.php)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Model/Organisation.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\u003eMISP contains an authorization flaw in the Organisation model\u0027s captureOrg method. When the $force parameter is set to true, the method unconditionally overwrites organization metadata fields without verifying that the invoking user holds sufficient privileges. A user with a sharing group (SG) editor role can trigger this code path, allowing them to modify organization metadata that should be restricted to site administrators or users with sync permissions.\u003c/p\u003e\u003cp\u003eAccording to the commit message, this could lead to blueprint-based sharing group manipulation, meaning an attacker with SG editor access could alter organizational attributes in ways that influence how sharing groups and blueprints behave across the MISP instance.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe vulnerability requires an authenticated user with at least SG editor privileges and network access to the MISP web interface. The impact is primarily on the integrity of organization records and, potentially, on the integrity of sharing group configurations derived from those records.\u003c/p\u003e"
                }
              ],
              "value": "MISP contains an authorization flaw in the Organisation model\u0027s captureOrg method. When the $force parameter is set to true, the method unconditionally overwrites organization metadata fields without verifying that the invoking user holds sufficient privileges. A user with a sharing group (SG) editor role can trigger this code path, allowing them to modify organization metadata that should be restricted to site administrators or users with sync permissions.\n\nAccording to the commit message, this could lead to blueprint-based sharing group manipulation, meaning an attacker with SG editor access could alter organizational attributes in ways that influence how sharing groups and blueprints behave across the MISP instance.\u00a0\n\nThe vulnerability requires an authenticated user with at least SG editor privileges and network access to the MISP web interface. The impact is primarily on the integrity of organization records and, potentially, on the integrity of sharing group configurations derived from those records."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-100",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-100 Parameter Tampering"
                }
              ]
            }
          ],
          "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": "LOW",
                "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:L/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-862",
                  "description": "CWE-862 Missing Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T14:31:25.876Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/f3ec974ee"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix adds an authorization check to the captureOrg method so that the forced overwrite of organization metadata fields is only permitted when the invoking user holds either the site_admin permission or the sync permission. This ensures that low-privilege roles such as sharing group editors can no longer trigger the metadata overwrite path, closing the authorization gap.\u003c/p\u003e"
                }
              ],
              "value": "The fix adds an authorization check to the captureOrg method so that the forced overwrite of organization metadata fields is only permitted when the invoking user holds either the site_admin permission or the sync permission. This ensures that low-privilege roles such as sharing group editors can no longer trigger the metadata overwrite path, closing the authorization gap."
            }
          ],
          "title": "MISP: Insufficient Authorization Allows Sharing Group Editors to Overwrite Organization Metadata",
          "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, 139 commits after fix), suggesting the fix landed in or before v2.5.47. The exact first affected version is not specified in the patch.",
                      "The \u0027blueprint based SG manipulation\u0027 impact mentioned in the commit message is taken at face value for the SI:H rating; the patch itself only shows the org metadata overwrite fix and does not include code demonstrating the SG manipulation path.",
                      "CAPEC-100 (Parameter Tampering) is the closest available mapping; the vulnerability is more precisely a missing authorization check (CWE-862) than a classic parameter tampering scenario, but no CAPEC entry directly models \u0027authenticated user exploits missing permission gate via a boolean flag.\u0027",
                      "The PR:L rating assumes that SG editor is a low-privilege role in MISP\u0027s permission hierarchy; the patch references perm_site_admin and perm_sync as the required higher-level permissions, implying SG editor is below that level.",
                      "No specific MISP version range is confirmed beyond the v2.5.47 tag boundary; earlier versions may or may not be affected depending on when the captureOrg method was introduced."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-100",
                        "rationale": "The closest plausible CAPEC is Parameter Tampering: an authenticated user with a lower-privilege role (SG editor) invokes the captureOrg function with the $force parameter set to true, triggering a code path that was intended only for higher-privilege users. The user manipulates a function parameter to cause unintended privileged behavior. This mapping is approximate because the core issue is a missing authorization check rather than classic parameter tampering, but no CAPEC entry more precisely describes an authenticated user exploiting a missing permission gate via a boolean flag."
                      }
                    ],
                    "commit": "f3ec974ee2d72d77311dbb364c70f1aee83a58c2",
                    "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 calling the existing captureOrg function with $force=true; no race conditions or complex bypasses are needed. AT:N: No user interaction or attack tooling beyond normal API usage is required. PR:L: The attacker needs an authenticated account with at least SG editor privileges, which is a low-privilege role in MISP. UI:N: No victim interaction is required. VC:N: No confidentiality impact is evident from the patch. VI:H: Organization metadata (type, nationality, sector, contacts, dates) can be arbitrarily modified, representing high integrity impact on the vulnerable component. VA:N: No availability impact. SC:N: No direct confidentiality impact on other systems. SI:H: The commit message explicitly notes the issue \u0027could lead to blueprint based SG manipulation,\u0027 indicating integrity impact extends to sharing group configurations in the broader MISP ecosystem. SA:N: No availability impact on other systems.",
                    "fixSummary": "The fix adds an authorization check to the captureOrg method so that the forced overwrite of organization metadata fields is only permitted when the invoking user holds either the site_admin permission or the sync permission. This ensures that low-privilege roles such as sharing group editors can no longer trigger the metadata overwrite path, closing the authorization gap.",
                    "generatedAt": "2026-09-22T14:23:51.691782Z",
                    "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": "63108ba85f58bd5ec8318ea052879e536aaa83464f8ff4f90ef1d386913dc835",
                    "patchSummary": "In app/Model/Organisation.php, the condition guarding the forced overwrite of organization metadata fields (type, date_created, date_modified, nationality, sector, contacts) was changed from a simple \u0027if ($force)\u0027 check to \u0027if ($force \u0026\u0026 (!empty($user[\u0027Role\u0027][\u0027perm_site_admin\u0027]) || !empty($user[\u0027Role\u0027][\u0027perm_sync\u0027])))\u0027. This one-line change adds a role-based authorization requirement so that only site administrators or sync-permitted users can execute the metadata overwrite when $force is true.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "f3ec974ee2d72d77311dbb364c70f1aee83a58c2",
                        "patchSha256": "63108ba85f58bd5ec8318ea052879e536aaa83464f8ff4f90ef1d386913dc835",
                        "source": "https://github.com/MISP/MISP/commit/f3ec974ee.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/f3ec974ee.patch",
                        "subject": "fix: [security] overwrite of org metadata by sg editors"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/f3ec974ee.patch",
                    "subject": "fix: [security] overwrite of org metadata by sg editors",
                    "tagVersionBoundary": {
                      "commits_after_fix": 139,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-862",
                        "rationale": "The captureOrg method performed a privileged operation (overwriting organization metadata) based solely on the $force flag without verifying that the authenticated user held the necessary permission (site_admin or sync). The authorization check was entirely absent for this code path, which is the definition of a missing authorization vulnerability."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20182"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95697",
        "datePublished": "2026-09-22T14:31:25.876Z",
        "dateReserved": "2026-09-22T14:31:23.351Z",
        "dateUpdated": "2026-09-22T15:06:43.859Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95693 (GCVE-0-2026-95693)

    Vulnerability from cvelistv5 – Published: 2026-09-22 14:22 – Updated: 2026-09-22 15:09
    VLAI
    Title
    MISP Information Disclosure via Forged Upload Path
    Summary
    In MISP, the EventReport::uploadPicture method in processed a caller-supplied tmp_name field by invoking file_exists(), mime_content_type(), and exif_imagetype() on the supplied path before verifying that the value was a genuine PHP upload via is_uploaded_file(). An authenticated user holding the perm_add permission could supply an arbitrary filesystem path as the tmp_name value. The application would then probe that path and return distinct validation error messages depending on whether the file existed, its MIME type, or its image format. By observing the differing error responses, an attacker could enumerate the existence of files at arbitrary paths on the MISP server and determine their type.  This constitutes an information disclosure vulnerability: the server's filesystem layout and file types are leaked to any user with the perm_add role without requiring administrative access.  The vulnerability does not allow reading file contents, writing files, or executing code, but it can aid further attacks by revealing sensitive file locations (e.g., configuration files, private keys, or other artifacts) present on the host.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:09 UTC
    CWE
    • CWE-200 - Exposure of Sensitive Information to an Unauthorized Actor
    • CWE-22 - Improper Limitation of a Pathname to a Restricted Directory (Path Traversal)
    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 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-22 14:16
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/9a2a4acfe.patch 0a64cbcd6700…
    Confidence
    medium
    Commit Subject Patch SHA-256
    9a2a4acfe71e fix: [security] Reject a forged upload path in the 0a64cbcd6700…
    Fix summary

    The fix introduces an early validation gate in EventReport::uploadPicture that checks is_uploaded_file() on the supplied tmp_name before any filesystem-probing functions (file_exists, mime_content_type, exif_imagetype) are invoked. If the value is not a genuine PHP upload, the method immediately returns a generic error message, preventing the attacker from using the endpoint as an oracle for filesystem enumeration.

    Patch summary

    In app/Model/EventReport.php, eight lines are inserted at the top of the upload-processing block (after the size/error check). The added code verifies that $picture['tmp_name'] is non-empty and passes is_uploaded_file(). If either condition fails, a generic 'File was not uploaded correctly' error is appended to $saveResult['errors'] and the function returns early, before pathinfo, file_exists, mime_content_type, or exif_imagetype are ever called on the untrusted path.

    CVSS rationale

    AV:N: MISP is a web application accessed over the network. AC:L: The attack requires only crafting a request with a different tmp_name value; no race conditions or complex setup are needed. AT:N: No prior user interaction or attack complexity beyond the request is required. PR:L: The attacker needs an authenticated account with the perm_add permission, which is a low-privilege role in MISP (not admin). UI:N: No victim interaction is required. VC:L: File existence and type information is disclosed, but file contents are not readable. VI:N, VA:N: No integrity or availability impact. SC:N, SI:N, SA:N: No impact on subsequent components.

    Weakness rationale
    • CWE-200 The primary security impact is the disclosure of filesystem state (file existence and type) through distinct error messages, which is a classic information exposure weakness. The attacker does not read file contents but learns metadata about arbitrary paths.
    • CWE-22 The caller-supplied tmp_name was used as a filesystem path without restricting it to the upload directory. Although the impact here is information disclosure rather than full file read/write, the root cause is the lack of path restriction, making CWE-22 a contributing weakness.
    Attack pattern rationale
    • CAPEC-177 The attacker manipulates the tmp_name parameter to reference file paths outside the intended upload directory, causing the server to probe arbitrary locations. Although the observable effect is information disclosure rather than full file read, the mechanism is path traversal: the application uses an untrusted path string to access the filesystem. CAPEC-177 is the closest available pattern; the uncertainty is that the impact is limited to metadata disclosure rather than full traversal read, but no more specific CAPEC exists for 'path probing via error-message oracle'.
    Assumptions to verify
    • The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.47, 49 commits after fix), suggesting versions prior to the fix commit are vulnerable. No explicit version range is stated in the patch.
    • PR:L is assumed because the commit message specifies 'any perm_add user', which is a non-admin role in MISP. The exact privilege level mapping to CVSS PR is an assumption.
    • VC:L is assigned because the disclosure is limited to file existence and type metadata, not full file contents. If the information disclosed is considered more sensitive in a specific deployment, VC could be rated higher.
    • CAPEC-177 (Path Traversal) is the closest available pattern; the actual impact is an information-disclosure oracle rather than a full traversal read, so the mapping is approximate.
    • The Co-Authored-By line credits an AI assistant (Claude Opus 4.8) as a remediation developer. This is recorded as supplied in the metadata but is atypical for CVE credit.
    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-95693",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:09:40.847048Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:09:48.685Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "EventReport"
              ],
              "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": "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\u003eIn MISP, the EventReport::uploadPicture method in processed a caller-supplied tmp_name field by invoking file_exists(), mime_content_type(), and exif_imagetype() on the supplied path before verifying that the value was a genuine PHP upload via is_uploaded_file(). An authenticated user holding the perm_add permission could supply an arbitrary filesystem path as the tmp_name value. The application would then probe that path and return distinct validation error messages depending on whether the file existed, its MIME type, or its image format. By observing the differing error responses, an attacker could enumerate the existence of files at arbitrary paths on the MISP server and determine their type.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThis constitutes an information disclosure vulnerability: the server\u0027s filesystem layout and file types are leaked to any user with the perm_add role without requiring administrative access.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe vulnerability does not allow reading file contents, writing files, or executing code, but it can aid further attacks by revealing sensitive file locations (e.g., configuration files, private keys, or other artifacts) present on the host.\u003c/p\u003e"
                }
              ],
              "value": "In MISP, the EventReport::uploadPicture method in processed a caller-supplied tmp_name field by invoking file_exists(), mime_content_type(), and exif_imagetype() on the supplied path before verifying that the value was a genuine PHP upload via is_uploaded_file(). An authenticated user holding the perm_add permission could supply an arbitrary filesystem path as the tmp_name value. The application would then probe that path and return distinct validation error messages depending on whether the file existed, its MIME type, or its image format. By observing the differing error responses, an attacker could enumerate the existence of files at arbitrary paths on the MISP server and determine their type.\u00a0\n\nThis constitutes an information disclosure vulnerability: the server\u0027s filesystem layout and file types are leaked to any user with the perm_add role without requiring administrative access.\u00a0\n\nThe vulnerability does not allow reading file contents, writing files, or executing code, but it can aid further attacks by revealing sensitive file locations (e.g., configuration files, private keys, or other artifacts) present on the host."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-177",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-177 Path Traversal"
                }
              ]
            }
          ],
          "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-200",
                  "description": "CWE-200 Exposure of Sensitive Information to an Unauthorized Actor",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-22",
                  "description": "CWE-22 Improper Limitation of a Pathname to a Restricted Directory (Path Traversal)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T14:22:28.896Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/9a2a4acfe"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces an early validation gate in EventReport::uploadPicture that checks is_uploaded_file() on the supplied tmp_name before any filesystem-probing functions (file_exists, mime_content_type, exif_imagetype) are invoked. If the value is not a genuine PHP upload, the method immediately returns a generic error message, preventing the attacker from using the endpoint as an oracle for filesystem enumeration.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces an early validation gate in EventReport::uploadPicture that checks is_uploaded_file() on the supplied tmp_name before any filesystem-probing functions (file_exists, mime_content_type, exif_imagetype) are invoked. If the value is not a genuine PHP upload, the method immediately returns a generic error message, preventing the attacker from using the endpoint as an oracle for filesystem enumeration."
            }
          ],
          "title": "MISP Information Disclosure via Forged Upload Path",
          "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, 49 commits after fix), suggesting versions prior to the fix commit are vulnerable. No explicit version range is stated in the patch.",
                      "PR:L is assumed because the commit message specifies \u0027any perm_add user\u0027, which is a non-admin role in MISP. The exact privilege level mapping to CVSS PR is an assumption.",
                      "VC:L is assigned because the disclosure is limited to file existence and type metadata, not full file contents. If the information disclosed is considered more sensitive in a specific deployment, VC could be rated higher.",
                      "CAPEC-177 (Path Traversal) is the closest available pattern; the actual impact is an information-disclosure oracle rather than a full traversal read, so the mapping is approximate.",
                      "The Co-Authored-By line credits an AI assistant (Claude Opus 4.8) as a remediation developer. This is recorded as supplied in the metadata but is atypical for CVE credit."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-177",
                        "rationale": "The attacker manipulates the tmp_name parameter to reference file paths outside the intended upload directory, causing the server to probe arbitrary locations. Although the observable effect is information disclosure rather than full file read, the mechanism is path traversal: the application uses an untrusted path string to access the filesystem. CAPEC-177 is the closest available pattern; the uncertainty is that the impact is limited to metadata disclosure rather than full traversal read, but no more specific CAPEC exists for \u0027path probing via error-message oracle\u0027."
                      }
                    ],
                    "commit": "9a2a4acfe71eaacfe9305a89483d45772edf16b4",
                    "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: MISP is a web application accessed over the network. AC:L: The attack requires only crafting a request with a different tmp_name value; no race conditions or complex setup are needed. AT:N: No prior user interaction or attack complexity beyond the request is required. PR:L: The attacker needs an authenticated account with the perm_add permission, which is a low-privilege role in MISP (not admin). UI:N: No victim interaction is required. VC:L: File existence and type information is disclosed, but file contents are not readable. VI:N, VA:N: No integrity or availability impact. SC:N, SI:N, SA:N: No impact on subsequent components.",
                    "fixSummary": "The fix introduces an early validation gate in EventReport::uploadPicture that checks is_uploaded_file() on the supplied tmp_name before any filesystem-probing functions (file_exists, mime_content_type, exif_imagetype) are invoked. If the value is not a genuine PHP upload, the method immediately returns a generic error message, preventing the attacker from using the endpoint as an oracle for filesystem enumeration.",
                    "generatedAt": "2026-09-22T14:16:43.440374Z",
                    "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": "0a64cbcd67009e5af0b74721071bfaf4a36c3cac59e13128eaae04545009886a",
                    "patchSummary": "In app/Model/EventReport.php, eight lines are inserted at the top of the upload-processing block (after the size/error check). The added code verifies that $picture[\u0027tmp_name\u0027] is non-empty and passes is_uploaded_file(). If either condition fails, a generic \u0027File was not uploaded correctly\u0027 error is appended to $saveResult[\u0027errors\u0027] and the function returns early, before pathinfo, file_exists, mime_content_type, or exif_imagetype are ever called on the untrusted path.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "9a2a4acfe71eaacfe9305a89483d45772edf16b4",
                        "patchSha256": "0a64cbcd67009e5af0b74721071bfaf4a36c3cac59e13128eaae04545009886a",
                        "source": "https://github.com/MISP/MISP/commit/9a2a4acfe.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/9a2a4acfe.patch",
                        "subject": "fix: [security] Reject a forged upload path in the"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/9a2a4acfe.patch",
                    "subject": "fix: [security] Reject a forged upload path in the",
                    "tagVersionBoundary": {
                      "commits_after_fix": 49,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-200",
                        "rationale": "The primary security impact is the disclosure of filesystem state (file existence and type) through distinct error messages, which is a classic information exposure weakness. The attacker does not read file contents but learns metadata about arbitrary paths."
                      },
                      {
                        "cweId": "CWE-22",
                        "rationale": "The caller-supplied tmp_name was used as a filesystem path without restricting it to the upload directory. Although the impact here is information disclosure rather than full file read/write, the root cause is the lack of path restriction, making CWE-22 a contributing weakness."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20218"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95693",
        "datePublished": "2026-09-22T14:22:28.896Z",
        "dateReserved": "2026-09-22T14:22:26.180Z",
        "dateUpdated": "2026-09-22T15:09:48.685Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95685 (GCVE-0-2026-95685)

    Vulnerability from cvelistv5 – Published: 2026-09-22 14:13 – Updated: 2026-09-22 15:13
    VLAI
    Title
    MISP Missing Authorization on replaceSuggestionInReport Event Report Action
    Summary
    MISP contains an access control flaw in the EventReports functionality. The replaceSuggestionInReport action, which allows modification of suggestion content within an event report, was incorrectly mapped to the wildcard permission ('*') in the ACLComponent, making it accessible to any authenticated user regardless of their assigned permissions. All analogous report-modification actions correctly required the perm_add permission, while read-only actions such as downloadAsPDF appropriately used the wildcard.  An authenticated user without the perm_add permission could invoke the replaceSuggestionInReport endpoint to alter report suggestion data, violating the intended authorization model.  This constitutes an improper authorization weakness that could lead to unauthorized modification of event report content, potentially corrupting shared threat intelligence data or injecting misleading information into reports relied upon by other analysts and automated consumers.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:13 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 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-22 14:08
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/66aebfb1a.patch 4dbeb3f23f82…
    Confidence
    medium
    Commit Subject Patch SHA-256
    66aebfb1a1e5 fix: [ACL] tightening of eventreports 4dbeb3f23f82…
    Fix summary

    The ACL mapping for the replaceSuggestionInReport action was corrected from the wildcard permission ('*') to the perm_add permission, aligning it with all other report-modification actions and ensuring that only users explicitly granted the add permission can invoke the action.

    Patch summary

    In app/Controller/Component/ACLComponent.php, a single-line change was made in the event reports ACL array: the permission requirement for the 'replaceSuggestionInReport' key was changed from array('*') to array('perm_add'), restricting the action to users with the perm_add privilege.

    CVSS rationale

    The vulnerability is exploitable over the network (AV:N) via a simple HTTP request to the MISP API or web interface (AC:L). No attack target manipulation is required (AT:N). The attacker must be an authenticated user with at least basic access but without perm_add (PR:L). No user interaction is needed (UI:N). The primary impact is on the integrity of the vulnerable system's event report data (VI:H), as an unauthorized user can modify report suggestions. Confidentiality and availability impacts are not directly evidenced (VC:N, VA:N). No secondary system impact is indicated (SC:N, SI:N, SA:N).

    Weakness rationale
    • CWE-862 The replaceSuggestionInReport action was accessible to all authenticated users (wildcard '*') when it should have required the perm_add permission. The authorization check was effectively missing for this specific action, allowing any authenticated user to perform a privileged operation.
    Attack pattern rationale
    • CAPEC-126 The attacker invokes the replaceSuggestionInReport endpoint directly (e.g., via API or URL manipulation) relying on the fact that the ACL layer permits the action for all authenticated users. The attack pattern of accessing a resource or action the user is not authorized to perform by directly requesting it matches Forced Browsing. Uncertainty: the exact request vector (REST API vs. web UI) is not specified in the patch, but the underlying mechanism of bypassing intended authorization by directly calling the endpoint is consistent with this pattern.
    Assumptions to verify
    • The affected version range is inferred from the tag boundary (v2.5.47, 136 commits after fix); the exact last vulnerable version is not explicitly stated in the patch metadata.
    • The CVSS VI:H rating assumes that modifying report suggestions constitutes a significant integrity impact on the MISP instance's threat intelligence data; if the practical impact is considered lower, VI:M may be more appropriate.
    • The CAPEC-126 mapping is the closest available pattern; the exact exploitation vector (REST API call vs. web form submission) is not specified in the patch, but the core mechanism of unauthorized action invocation is consistent.
    • The patch does not include the full ACLComponent context, so the exact set of users affected (e.g., whether 'perm_add' is a common or rare permission in typical MISP deployments) is not fully determinable.
    • No authentication bypass is implied; the attacker must already be an authenticated MISP 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-95685",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:13:31.472359Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:13:38.313Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "EventReports",
                "ACLComponent"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/Component/ACLComponent.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\u003eMISP contains an access control flaw in the EventReports functionality. The replaceSuggestionInReport action, which allows modification of suggestion content within an event report, was incorrectly mapped to the wildcard permission (\u0027*\u0027) in the ACLComponent, making it accessible to any authenticated user regardless of their assigned permissions. All analogous report-modification actions correctly required the perm_add permission, while read-only actions such as downloadAsPDF appropriately used the wildcard.\u0026nbsp;\u003c/p\u003e\u003cp\u003eAn authenticated user without the perm_add permission could invoke the replaceSuggestionInReport endpoint to alter report suggestion data, violating the intended authorization model.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThis constitutes an improper authorization weakness that could lead to unauthorized modification of event report content, potentially corrupting shared threat intelligence data or injecting misleading information into reports relied upon by other analysts and automated consumers.\u003c/p\u003e"
                }
              ],
              "value": "MISP contains an access control flaw in the EventReports functionality. The replaceSuggestionInReport action, which allows modification of suggestion content within an event report, was incorrectly mapped to the wildcard permission (\u0027*\u0027) in the ACLComponent, making it accessible to any authenticated user regardless of their assigned permissions. All analogous report-modification actions correctly required the perm_add permission, while read-only actions such as downloadAsPDF appropriately used the wildcard.\u00a0\n\nAn authenticated user without the perm_add permission could invoke the replaceSuggestionInReport endpoint to alter report suggestion data, violating the intended authorization model.\u00a0\n\nThis constitutes an improper authorization weakness that could lead to unauthorized modification of event report content, potentially corrupting shared threat intelligence data or injecting misleading information into reports relied upon by other analysts and automated consumers."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-126",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-126 Forced Browsing"
                }
              ]
            }
          ],
          "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-862",
                  "description": "CWE-862 Missing Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T14:13:26.670Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/66aebfb1a"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe ACL mapping for the replaceSuggestionInReport action was corrected from the wildcard permission (\u0027*\u0027) to the perm_add permission, aligning it with all other report-modification actions and ensuring that only users explicitly granted the add permission can invoke the action.\u003c/p\u003e"
                }
              ],
              "value": "The ACL mapping for the replaceSuggestionInReport action was corrected from the wildcard permission (\u0027*\u0027) to the perm_add permission, aligning it with all other report-modification actions and ensuring that only users explicitly granted the add permission can invoke the action."
            }
          ],
          "title": "MISP Missing Authorization on replaceSuggestionInReport Event Report Action",
          "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 range is inferred from the tag boundary (v2.5.47, 136 commits after fix); the exact last vulnerable version is not explicitly stated in the patch metadata.",
                      "The CVSS VI:H rating assumes that modifying report suggestions constitutes a significant integrity impact on the MISP instance\u0027s threat intelligence data; if the practical impact is considered lower, VI:M may be more appropriate.",
                      "The CAPEC-126 mapping is the closest available pattern; the exact exploitation vector (REST API call vs. web form submission) is not specified in the patch, but the core mechanism of unauthorized action invocation is consistent.",
                      "The patch does not include the full ACLComponent context, so the exact set of users affected (e.g., whether \u0027perm_add\u0027 is a common or rare permission in typical MISP deployments) is not fully determinable.",
                      "No authentication bypass is implied; the attacker must already be an authenticated MISP user."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-126",
                        "rationale": "The attacker invokes the replaceSuggestionInReport endpoint directly (e.g., via API or URL manipulation) relying on the fact that the ACL layer permits the action for all authenticated users. The attack pattern of accessing a resource or action the user is not authorized to perform by directly requesting it matches Forced Browsing. Uncertainty: the exact request vector (REST API vs. web UI) is not specified in the patch, but the underlying mechanism of bypassing intended authorization by directly calling the endpoint is consistent with this pattern."
                      }
                    ],
                    "commit": "66aebfb1a1e58a82b3a681367347f69c46c38ee5",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      }
                    ],
                    "cvssRationale": "The vulnerability is exploitable over the network (AV:N) via a simple HTTP request to the MISP API or web interface (AC:L). No attack target manipulation is required (AT:N). The attacker must be an authenticated user with at least basic access but without perm_add (PR:L). No user interaction is needed (UI:N). The primary impact is on the integrity of the vulnerable system\u0027s event report data (VI:H), as an unauthorized user can modify report suggestions. Confidentiality and availability impacts are not directly evidenced (VC:N, VA:N). No secondary system impact is indicated (SC:N, SI:N, SA:N).",
                    "fixSummary": "The ACL mapping for the replaceSuggestionInReport action was corrected from the wildcard permission (\u0027*\u0027) to the perm_add permission, aligning it with all other report-modification actions and ensuring that only users explicitly granted the add permission can invoke the action.",
                    "generatedAt": "2026-09-22T14:08:14.968747Z",
                    "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": "4dbeb3f23f82f36cfdc980039b1d19717eea20a3f4d4caf25a3f0a3f72523c83",
                    "patchSummary": "In app/Controller/Component/ACLComponent.php, a single-line change was made in the event reports ACL array: the permission requirement for the \u0027replaceSuggestionInReport\u0027 key was changed from array(\u0027*\u0027) to array(\u0027perm_add\u0027), restricting the action to users with the perm_add privilege.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "66aebfb1a1e58a82b3a681367347f69c46c38ee5",
                        "patchSha256": "4dbeb3f23f82f36cfdc980039b1d19717eea20a3f4d4caf25a3f0a3f72523c83",
                        "source": "https://github.com/MISP/MISP/commit/66aebfb1a.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/66aebfb1a.patch",
                        "subject": "fix: [ACL] tightening of eventreports"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/66aebfb1a.patch",
                    "subject": "fix: [ACL] tightening of eventreports",
                    "tagVersionBoundary": {
                      "commits_after_fix": 136,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-862",
                        "rationale": "The replaceSuggestionInReport action was accessible to all authenticated users (wildcard \u0027*\u0027) when it should have required the perm_add permission. The authorization check was effectively missing for this specific action, allowing any authenticated user to perform a privileged operation."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20095"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95685",
        "datePublished": "2026-09-22T14:13:26.670Z",
        "dateReserved": "2026-09-22T14:13:20.760Z",
        "dateUpdated": "2026-09-22T15:13:38.313Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95683 (GCVE-0-2026-95683)

    Vulnerability from cvelistv5 – Published: 2026-09-22 14:06 – Updated: 2026-09-22 15:28
    VLAI
    Title
    MISP Overmind Event View Discloses Report Content Bypassing Report-Level ACL
    Summary
    In MISP, the Overmind event view enriches an event with its most recent attached report for preview purposes. The enrichment logic fetched the report using only the event ID as the lookup condition, without applying the report's own distribution/ACL constraints. Because MISP reports carry an independent distribution setting that can be more restrictive than the parent event's distribution, an authenticated user who had read access to the event could retrieve and view a report whose distribution explicitly excluded that user. Additionally, the query did not filter out soft-deleted reports, allowing retrieval of reports that had been administratively removed. The result is an unauthorized disclosure of threat-intelligence report content to users who should not have access under the report's own access-control policy. The vulnerability requires an authenticated MISP user with at least read access to the affected event.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:27 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.47 (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-22 13:58
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/6932aace8.patch d3472acf034e…
    Confidence
    medium
    Commit Subject Patch SHA-256
    6932aace8445 fix: [security] Apply the caller's ACL to the event view's d3472acf034e…
    Fix summary

    The report fetch in the Overmind event enrichment now applies the caller's ACL via EventReport::buildACLConditions($user), enforcing the report's own distribution policy in addition to the event-level access. A condition on EventReport.deleted = 0 is also added to exclude soft-deleted reports. The query is further hardened with recursive = -1 and an explicit contain clause to limit the data retrieved.

    Patch summary

    In app/Controller/EventsController.php, the __enrichEvent() method's report lookup is changed from a simple event_id condition to a composite condition built from EventReport::buildACLConditions($user) combined with EventReport.event_id and EventReport.deleted = 0. The find() call is updated to use the new $reportConditions array, adds 'contain' => EventReport::DEFAULT_CONTAIN, and sets 'recursive' => -1 to prevent unnecessary eager-loading of associated models.

    CVSS rationale

    AV:N: MISP is a network-accessible web application. AC:L: An authenticated user with read access to any event simply views it in the Overmind interface; no race conditions, special timing, or complex manipulation are required. AT:N: No attack-target manipulation is needed. PR:L: The attacker must be an authenticated MISP user with at least read permission on the event; no administrative privileges are required. UI:N: No victim interaction beyond the attacker's own viewing action. VC:H: Sensitive threat-intelligence report content (IOCs, analysis, context) is disclosed to a user the report's distribution explicitly excludes. VI:N, VA:N: No integrity or availability impact. SC:N, SI:N, SA:N: The impact is confined to the MISP instance's own data; no cross-system impact is evidenced.

    Weakness rationale
    • CWE-862 The report's own ACL/distribution check was entirely absent from the Overmind event-view enrichment path. The code fetched the report by event ID without invoking buildACLConditions(), so the report-level authorization policy was never enforced for this code path.
    • CWE-639 The event ID, which is a user-controllable identifier in the request, was used as the sole key to retrieve a report resource whose access should be independently governed by the report's distribution. This allowed bypass of the report's authorization by leveraging the event-level access.
    Attack pattern rationale
    • CAPEC-126 The access control for the EventReport resource was incorrectly configured (or absent) in the Overmind event-view code path: the report's distribution ACL was not applied, effectively leaving the resource accessible to any user who could see the parent event. This is the closest CAPEC to a missing/incomplete authorization check on a specific resource. The mapping is slightly uncertain because the flaw is a missing check rather than a misconfiguration of an existing check, but CAPEC-126 is the best available match for an access-control enforcement gap on a specific object.
    Assumptions to verify
    • The tag_version_boundary (v2.5.47, 57 commits after fix) is used as the nearest known version boundary; the exact first fixed release is not explicitly stated in the patch metadata, so the affected range is marked as less_than 2.5.47 with 'unspecified' version.
    • CVSS PR:L assumes the attacker needs only a standard authenticated MISP account with read access to the event; the specific role/permission level required is not detailed in the patch.
    • CVSS VC:H assumes the report content constitutes sensitive threat-intelligence data; the actual sensitivity depends on the report's content and the organization's data classification.
    • CAPEC-126 is selected as the closest match; the flaw is more precisely a missing authorization check (CWE-862) rather than a misconfiguration of an existing control, but no CAPEC entry specifically covers 'missing authorization on a sub-resource' more precisely.
    • The patch does not include test cases or reproduction steps; exploitability assessment is based solely on the code diff and commit message.
    • The 'Overmind' feature is assumed to be a MISP UI component for event viewing; its exact configuration and deployment context are not specified in 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 4 9 medium 6
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-95683",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:27:57.869012Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:28:07.198Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "EventsController (Overmind event view / __enrichEvent)"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/EventsController.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 Fable 5.1"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eIn MISP, the Overmind event view enriches an event with its most recent attached report for preview purposes. The enrichment logic fetched the report using only the event ID as the lookup condition, without applying the report\u0027s own distribution/ACL constraints. Because MISP reports carry an independent distribution setting that can be more restrictive than the parent event\u0027s distribution, an authenticated user who had read access to the event could retrieve and view a report whose distribution explicitly excluded that user. Additionally, the query did not filter out soft-deleted reports, allowing retrieval of reports that had been administratively removed.\u003c/p\u003e\u003cp\u003eThe result is an unauthorized disclosure of threat-intelligence report content to users who should not have access under the report\u0027s own access-control policy.\u003c/p\u003e\u003cp\u003eThe vulnerability requires an authenticated MISP user with at least read access to the affected event.\u003c/p\u003e"
                }
              ],
              "value": "In MISP, the Overmind event view enriches an event with its most recent attached report for preview purposes. The enrichment logic fetched the report using only the event ID as the lookup condition, without applying the report\u0027s own distribution/ACL constraints. Because MISP reports carry an independent distribution setting that can be more restrictive than the parent event\u0027s distribution, an authenticated user who had read access to the event could retrieve and view a report whose distribution explicitly excluded that user. Additionally, the query did not filter out soft-deleted reports, allowing retrieval of reports that had been administratively removed.\n\nThe result is an unauthorized disclosure of threat-intelligence report content to users who should not have access under the report\u0027s own access-control policy.\n\nThe vulnerability requires an authenticated MISP user with at least read access to the affected event."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-126",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-126 Exploiting Incorrectly Configured Access Controls"
                }
              ]
            }
          ],
          "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-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-22T14:06:59.969Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/6932aace8"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe report fetch in the Overmind event enrichment now applies the caller\u0027s ACL via EventReport::buildACLConditions($user), enforcing the report\u0027s own distribution policy in addition to the event-level access. A condition on EventReport.deleted = 0 is also added to exclude soft-deleted reports. The query is further hardened with recursive = -1 and an explicit contain clause to limit the data retrieved.\u003c/p\u003e"
                }
              ],
              "value": "The report fetch in the Overmind event enrichment now applies the caller\u0027s ACL via EventReport::buildACLConditions($user), enforcing the report\u0027s own distribution policy in addition to the event-level access. A condition on EventReport.deleted = 0 is also added to exclude soft-deleted reports. The query is further hardened with recursive = -1 and an explicit contain clause to limit the data retrieved."
            }
          ],
          "title": "MISP Overmind Event View Discloses Report Content Bypassing Report-Level ACL",
          "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 tag_version_boundary (v2.5.47, 57 commits after fix) is used as the nearest known version boundary; the exact first fixed release is not explicitly stated in the patch metadata, so the affected range is marked as less_than 2.5.47 with \u0027unspecified\u0027 version.",
                      "CVSS PR:L assumes the attacker needs only a standard authenticated MISP account with read access to the event; the specific role/permission level required is not detailed in the patch.",
                      "CVSS VC:H assumes the report content constitutes sensitive threat-intelligence data; the actual sensitivity depends on the report\u0027s content and the organization\u0027s data classification.",
                      "CAPEC-126 is selected as the closest match; the flaw is more precisely a missing authorization check (CWE-862) rather than a misconfiguration of an existing control, but no CAPEC entry specifically covers \u0027missing authorization on a sub-resource\u0027 more precisely.",
                      "The patch does not include test cases or reproduction steps; exploitability assessment is based solely on the code diff and commit message.",
                      "The \u0027Overmind\u0027 feature is assumed to be a MISP UI component for event viewing; its exact configuration and deployment context are not specified in the patch."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-126",
                        "rationale": "The access control for the EventReport resource was incorrectly configured (or absent) in the Overmind event-view code path: the report\u0027s distribution ACL was not applied, effectively leaving the resource accessible to any user who could see the parent event. This is the closest CAPEC to a missing/incomplete authorization check on a specific resource. The mapping is slightly uncertain because the flaw is a missing check rather than a misconfiguration of an existing check, but CAPEC-126 is the best available match for an access-control enforcement gap on a specific object."
                      }
                    ],
                    "commit": "6932aace844520526819253ea285def97e48189e",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Fable 5.1"
                      }
                    ],
                    "cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: An authenticated user with read access to any event simply views it in the Overmind interface; no race conditions, special timing, or complex manipulation are required. AT:N: No attack-target manipulation is needed. PR:L: The attacker must be an authenticated MISP user with at least read permission on the event; no administrative privileges are required. UI:N: No victim interaction beyond the attacker\u0027s own viewing action. VC:H: Sensitive threat-intelligence report content (IOCs, analysis, context) is disclosed to a user the report\u0027s distribution explicitly excludes. VI:N, VA:N: No integrity or availability impact. SC:N, SI:N, SA:N: The impact is confined to the MISP instance\u0027s own data; no cross-system impact is evidenced.",
                    "fixSummary": "The report fetch in the Overmind event enrichment now applies the caller\u0027s ACL via EventReport::buildACLConditions($user), enforcing the report\u0027s own distribution policy in addition to the event-level access. A condition on EventReport.deleted = 0 is also added to exclude soft-deleted reports. The query is further hardened with recursive = -1 and an explicit contain clause to limit the data retrieved.",
                    "generatedAt": "2026-09-22T13:58:09.551694Z",
                    "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": "d3472acf034e415d9322bc1f5f399efb811afbb547bc230fe69d2e83c2975dd2",
                    "patchSummary": "In app/Controller/EventsController.php, the __enrichEvent() method\u0027s report lookup is changed from a simple event_id condition to a composite condition built from EventReport::buildACLConditions($user) combined with EventReport.event_id and EventReport.deleted = 0. The find() call is updated to use the new $reportConditions array, adds \u0027contain\u0027 =\u003e EventReport::DEFAULT_CONTAIN, and sets \u0027recursive\u0027 =\u003e -1 to prevent unnecessary eager-loading of associated models.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "6932aace844520526819253ea285def97e48189e",
                        "patchSha256": "d3472acf034e415d9322bc1f5f399efb811afbb547bc230fe69d2e83c2975dd2",
                        "source": "https://github.com/MISP/MISP/commit/6932aace8.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/6932aace8.patch",
                        "subject": "fix: [security] Apply the caller\u0027s ACL to the event view\u0027s"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/6932aace8.patch",
                    "subject": "fix: [security] Apply the caller\u0027s ACL to the event view\u0027s",
                    "tagVersionBoundary": {
                      "commits_after_fix": 57,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-862",
                        "rationale": "The report\u0027s own ACL/distribution check was entirely absent from the Overmind event-view enrichment path. The code fetched the report by event ID without invoking buildACLConditions(), so the report-level authorization policy was never enforced for this code path."
                      },
                      {
                        "cweId": "CWE-639",
                        "rationale": "The event ID, which is a user-controllable identifier in the request, was used as the sole key to retrieve a report resource whose access should be independently governed by the report\u0027s distribution. This allowed bypass of the report\u0027s authorization by leveraging the event-level access."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20285"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95683",
        "datePublished": "2026-09-22T14:06:59.969Z",
        "dateReserved": "2026-09-22T14:06:57.011Z",
        "dateUpdated": "2026-09-22T15:28:07.198Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95682 (GCVE-0-2026-95682)

    Vulnerability from cvelistv5 – Published: 2026-09-22 13:56 – Updated: 2026-09-22 15:31
    VLAI
    Title
    MISP Stored Cross-Site Scripting via Unescaped Organization Name in Admin Email View
    Summary
    MISP contains a stored cross-site scripting (XSS) vulnerability in the admin email composition screen. The MISP.org organization name setting was interpolated directly into a JavaScript string literal using an unescaped PHP echo: var org = "<?php echo $org;?>";. Because the value was placed inside a double-quoted JavaScript string without any encoding, an organization name containing a double-quote character (or a backslash) could terminate the string literal and inject arbitrary JavaScript into the page. The injected script would execute in the context of any authenticated user who subsequently loads the admin email page, potentially allowing session hijacking, data exfiltration, or privileged actions performed on behalf of the victim. Exploitation requires the ability to set or modify the MISP.org organization name and a second authenticated user visiting the affected admin email view. The vulnerability is a classic instance of insufficient output encoding in a JavaScript context.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:31 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-22 13:52
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/5d6ace65e.patch 9891167be879…
    Confidence
    high
    Commit Subject Patch SHA-256
    5d6ace65e1d5 fix: [ui] Escape MISP.org when it is echoed into the admin 9891167be879…
    Fix summary

    The fix replaces the raw PHP echo of the organization name with a json_encode() call using the flags JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, and JSON_HEX_QUOT. This produces a properly escaped JavaScript string literal that neutralizes quotes, angle brackets, ampersands, and other metacharacters, preventing breakout from the string context and subsequent script injection.

    Patch summary

    In app/View/Users/admin_email.ctp, line 72, the expression var org = "<?php echo $org;?>"; is replaced with var org = <?php echo json_encode($org, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); ?>;. The surrounding double quotes are removed because json_encode already emits a quoted string literal. The four JSON_HEX_* flags ensure that <, >, &, ', and " are hex-escaped, making the output safe for embedding in both HTML and JavaScript contexts.

    CVSS rationale

    AV:N: exploited over the network via a web application. AC:L: no race conditions or special timing; a single quote in the org name suffices. AT:N: no manipulation of the attack target required. PR:H: the attacker must have sufficient privileges to set the MISP.org organization name (assumed to be an admin-level capability). UI:P: the victim passively triggers the payload by navigating to the admin email page. VC:L / VI:L: the injected script can read page data, cookies, and perform actions in the victim's session, but is scoped to the MISP application. VA:N: no denial-of-service impact. SC:L / SI:L: limited sub-system impact via the victim's browser session. SA:N: no availability impact on the sub-system.

    Weakness rationale
    • CWE-79 The organization name (attacker-influenced data) is written into a JavaScript string literal in an HTML page without context-appropriate encoding, allowing script breakout. This is a textbook stored XSS in a JavaScript context, which maps directly to CWE-79.
    Attack pattern rationale
    • CAPEC-1 The patch demonstrates a stored XSS where attacker-controlled data (the MISP.org name) is reflected into a JavaScript context without encoding. CAPEC-1 is the canonical attack pattern for cross-site scripting. The mapping is direct and unambiguous given the commit message explicitly describes quote-breakout script injection.
    Assumptions to verify
    • PR:H assumes that setting the MISP.org organization name requires administrative privileges; if a lower-privileged role can modify this setting, PR should be lowered.
    • The exact fixed version is not stated in the patch; the tag boundary (v2.5.47, 52 commits after fix) suggests the fix lands in a release after v2.5.47, but the precise version number is unconfirmed.
    • UI:P assumes the victim merely navigates to the admin email page (passive interaction); no click or form submission is required to trigger the stored script.
    • The CAPEC-1 mapping is direct; no uncertainty is noted because the commit message and diff unambiguously describe a stored XSS via unescaped output in a JavaScript context.
    • Impact metrics (VC:L, VI:L, SC:L, SI:L) assume the XSS is confined to the MISP application context and does not enable cross-origin data theft beyond what the victim's browser session already exposes.
    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-95682",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:31:00.583552Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:31:09.389Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/View/Users/admin_email.ctp"
              ],
              "product": "MISP",
              "programFiles": [
                "app/View/Users/admin_email.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 admin email composition screen. The MISP.org organization name setting was interpolated directly into a JavaScript string literal using an unescaped PHP echo: var org = \"\u0026lt;?php echo $org;?\u0026gt;\";. Because the value was placed inside a double-quoted JavaScript string without any encoding, an organization name containing a double-quote character (or a backslash) could terminate the string literal and inject arbitrary JavaScript into the page. The injected script would execute in the context of any authenticated user who subsequently loads the admin email page, potentially allowing session hijacking, data exfiltration, or privileged actions performed on behalf of the victim.\u003c/p\u003e\u003cp\u003eExploitation requires the ability to set or modify the MISP.org organization name and a second authenticated user visiting the affected admin email view.\u003c/p\u003e\u003cp\u003eThe vulnerability is a classic instance of insufficient output encoding in a JavaScript context.\u003c/p\u003e"
                }
              ],
              "value": "MISP contains a stored cross-site scripting (XSS) vulnerability in the admin email composition screen. The MISP.org organization name setting was interpolated directly into a JavaScript string literal using an unescaped PHP echo: var org = \"\u003c?php echo $org;?\u003e\";. Because the value was placed inside a double-quoted JavaScript string without any encoding, an organization name containing a double-quote character (or a backslash) could terminate the string literal and inject arbitrary JavaScript into the page. The injected script would execute in the context of any authenticated user who subsequently loads the admin email page, potentially allowing session hijacking, data exfiltration, or privileged actions performed on behalf of the victim.\n\nExploitation requires the ability to set or modify the MISP.org organization name and a second authenticated user visiting the affected admin email view.\n\nThe vulnerability is a classic instance of insufficient output encoding in a JavaScript context."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 Cross Site Scripting (XSS)"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 4.8,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "HIGH",
                "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:H/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 During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T13:56:51.445Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/5d6ace65e"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix replaces the raw PHP echo of the organization name with a json_encode() call using the flags JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, and JSON_HEX_QUOT. This produces a properly escaped JavaScript string literal that neutralizes quotes, angle brackets, ampersands, and other metacharacters, preventing breakout from the string context and subsequent script injection.\u003c/p\u003e"
                }
              ],
              "value": "The fix replaces the raw PHP echo of the organization name with a json_encode() call using the flags JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, and JSON_HEX_QUOT. This produces a properly escaped JavaScript string literal that neutralizes quotes, angle brackets, ampersands, and other metacharacters, preventing breakout from the string context and subsequent script injection."
            }
          ],
          "title": "MISP Stored Cross-Site Scripting via Unescaped Organization Name in Admin Email View",
          "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:H assumes that setting the MISP.org organization name requires administrative privileges; if a lower-privileged role can modify this setting, PR should be lowered.",
                      "The exact fixed version is not stated in the patch; the tag boundary (v2.5.47, 52 commits after fix) suggests the fix lands in a release after v2.5.47, but the precise version number is unconfirmed.",
                      "UI:P assumes the victim merely navigates to the admin email page (passive interaction); no click or form submission is required to trigger the stored script.",
                      "The CAPEC-1 mapping is direct; no uncertainty is noted because the commit message and diff unambiguously describe a stored XSS via unescaped output in a JavaScript context.",
                      "Impact metrics (VC:L, VI:L, SC:L, SI:L) assume the XSS is confined to the MISP application context and does not enable cross-origin data theft beyond what the victim\u0027s browser session already exposes."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "The patch demonstrates a stored XSS where attacker-controlled data (the MISP.org name) is reflected into a JavaScript context without encoding. CAPEC-1 is the canonical attack pattern for cross-site scripting. The mapping is direct and unambiguous given the commit message explicitly describes quote-breakout script injection."
                      }
                    ],
                    "commit": "5d6ace65e1d523dcbf04ce405a2f3a833cd353b2",
                    "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: exploited over the network via a web application. AC:L: no race conditions or special timing; a single quote in the org name suffices. AT:N: no manipulation of the attack target required. PR:H: the attacker must have sufficient privileges to set the MISP.org organization name (assumed to be an admin-level capability). UI:P: the victim passively triggers the payload by navigating to the admin email page. VC:L / VI:L: the injected script can read page data, cookies, and perform actions in the victim\u0027s session, but is scoped to the MISP application. VA:N: no denial-of-service impact. SC:L / SI:L: limited sub-system impact via the victim\u0027s browser session. SA:N: no availability impact on the sub-system.",
                    "fixSummary": "The fix replaces the raw PHP echo of the organization name with a json_encode() call using the flags JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, and JSON_HEX_QUOT. This produces a properly escaped JavaScript string literal that neutralizes quotes, angle brackets, ampersands, and other metacharacters, preventing breakout from the string context and subsequent script injection.",
                    "generatedAt": "2026-09-22T13:52:55.463303Z",
                    "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": "9891167be879e4192e2ddd15347138945efa2bb402c49e7304af1b67f02a054b",
                    "patchSummary": "In app/View/Users/admin_email.ctp, line 72, the expression var org = \"\u003c?php echo $org;?\u003e\"; is replaced with var org = \u003c?php echo json_encode($org, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); ?\u003e;. The surrounding double quotes are removed because json_encode already emits a quoted string literal. The four JSON_HEX_* flags ensure that \u003c, \u003e, \u0026, \u0027, and \" are hex-escaped, making the output safe for embedding in both HTML and JavaScript contexts.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "5d6ace65e1d523dcbf04ce405a2f3a833cd353b2",
                        "patchSha256": "9891167be879e4192e2ddd15347138945efa2bb402c49e7304af1b67f02a054b",
                        "source": "https://github.com/MISP/MISP/commit/5d6ace65e.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/5d6ace65e.patch",
                        "subject": "fix: [ui] Escape MISP.org when it is echoed into the admin"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/5d6ace65e.patch",
                    "subject": "fix: [ui] Escape MISP.org when it is echoed into the admin",
                    "tagVersionBoundary": {
                      "commits_after_fix": 52,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "The organization name (attacker-influenced data) is written into a JavaScript string literal in an HTML page without context-appropriate encoding, allowing script breakout. This is a textbook stored XSS in a JavaScript context, which maps directly to CWE-79."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20214"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95682",
        "datePublished": "2026-09-22T13:56:51.445Z",
        "dateReserved": "2026-09-22T13:56:48.812Z",
        "dateUpdated": "2026-09-22T15:31:09.389Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95679 (GCVE-0-2026-95679)

    Vulnerability from cvelistv5 – Published: 2026-09-22 13:50 – Updated: 2026-09-22 15:37
    VLAI
    Title
    MISP Unauthenticated Blind SSRF via XML Body Processing
    Summary
    MISP's RequestHandlerComponent automatically decodes XML request bodies on all write requests. The underlying Xml::build() library contains a logic error in its readFile guard condition (readFile && http || https), where PHP operator precedence causes the https branch to bypass the readFile check entirely. As a result, a request body containing a bare HTTPS URL is treated as a locator and fetched by the server. Because the cspReport endpoint accepts XML content type and is unauthenticated by design, an unauthenticated remote attacker can send a POST request with a crafted XML body to cause the MISP server to issue an outbound HTTPS request to an arbitrary target reachable from the server. The attacker does not receive the response body, but can use the vulnerability to probe internal services, trigger actions on internal HTTPS endpoints, or perform timing-based reconnaissance of the server's network environment.  The vulnerability affects any MISP deployment where the cspReport endpoint is reachable and the server has network access to internal or external HTTPS services.
    SSVC
    Exploitation: none Automatable: yes Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:36 UTC
    CWE
    • CWE-918 - Server-Side Request Forgery (SSRF)
    • 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 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-22 13:46
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/716fc49d3.patch 99e7ef2fbd5a…
    Confidence
    medium
    Commit Subject Patch SHA-256
    716fc49d3816 fix: [security] Decode only an XML body that is actually a 99e7ef2fbd5a…
    Fix summary

    The fix introduces a custom XML input type handler in AppController::beforeFilter() that validates the request body contains an XML document marker (the < character) before passing it to the XML decoder. If the body does not contain <, it returns an empty array, preventing the Xml::build() locator/fetch code path from being reached regardless of the vendored library's internal guard logic. This ensures only actual XML documents are processed, eliminating the SSRF vector.

    Patch summary

    Adds 15 lines to app/Controller/AppController.php in the beforeFilter() method. Registers a custom XML input type via RequestHandler->addInputType('xml', ...) with a closure that checks whether the body is a string containing the < character. If not, it returns an empty array (no decoding). If yes, it delegates to RequestHandler->convertXml(). This ensures only actual XML documents are processed, preventing bare URLs from being interpreted as fetch locators by the vendored Xml::build() library.

    CVSS rationale

    AV:N: The cspReport endpoint is network-accessible. AC:L: The attack requires only a POST request with a specific Content-Type and a URL as the body; no race conditions or complex setup. AT:N: No attack target manipulation is required. PR:N: The cspReport endpoint is unauthenticated by design. UI:N: No user interaction is needed. VC/VI/VA:N: The SSRF is blind; the response is not returned to the attacker, and there is no direct impact on MISP's confidentiality, integrity, or availability. SC/SI/SA:N: The blind nature means no data from secondary systems is exfiltrated to the attacker, and no confirmed integrity or availability impact on secondary systems is evidenced. Note: if the server processes the fetched response in a way that leaks data or triggers side effects on internal services, the secondary impact metrics could be higher; this is not confirmed by the available evidence.

    Weakness rationale
    • CWE-918 The vulnerability allows an unauthenticated attacker to cause the MISP server to issue outbound HTTPS requests to arbitrary attacker-specified URLs by sending a crafted XML body to the cspReport endpoint. The server fetches the URL as if it were an XML document locator, constituting a blind SSRF.
    • CWE-20 The root cause is that the XML request body is not validated to confirm it is an actual XML document before being passed to Xml::build(). The framework's default behavior treats any XML content-type body as a document without checking for document structure, allowing a bare URL to be interpreted as a fetch locator.
    Attack pattern rationale
    • CAPEC-12 The framework's default behavior is to automatically decode any XML-typed request body through Xml::build() without validating that the body is actually an XML document. This unsafe default, combined with a logic error in the vendored library's guard condition, allows an attacker to exploit the default processing path to trigger an outbound request. CAPEC-12 is the closest available mapping; the attack is more specifically about exploiting a logic error in input validation within the default processing pipeline rather than a purely misconfigured default. No CAPEC entry more precisely describes SSRF via unvalidated input in an automatic content-type handler.
    Assumptions to verify
    • The cspReport endpoint is unauthenticated by design, as stated in the commit message.
    • The SSRF is limited to HTTPS targets because the operator precedence bug only ungates the https branch of the readFile guard.
    • The SSRF is blind: the fetched response is not returned to the attacker, limiting direct data exfiltration.
    • The exact affected version range before 2.5.47 is not precisely determined; the tag boundary indicates the fix is included in v2.5.47.
    • CAPEC-12 is the closest available mapping; the attack is more specifically about exploiting a logic error in input validation within an automatic content-type handler rather than a purely misconfigured default.
    • CVSS impact metrics are set to None based on the blind nature of the SSRF; if the server processes the fetched response in a way that leaks data or triggers actions on internal services, the impact could be higher.
    • The vendored Xml::build() library's behavior with a locator (fetching the URL) is taken from the commit message description; the actual library code was not included in 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 3 9 medium 7
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-95679",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "yes"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:36:14.509188Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:37:46.734Z",
              "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.47",
                  "status": "affected",
                  "version": "0",
                  "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\u0027s RequestHandlerComponent automatically decodes XML request bodies on all write requests. The underlying Xml::build() library contains a logic error in its readFile guard condition (readFile \u0026amp;\u0026amp; http || https), where PHP operator precedence causes the https branch to bypass the readFile check entirely. As a result, a request body containing a bare HTTPS URL is treated as a locator and fetched by the server. Because the cspReport endpoint accepts XML content type and is unauthenticated by design, an unauthenticated remote attacker can send a POST request with a crafted XML body to cause the MISP server to issue an outbound HTTPS request to an arbitrary target reachable from the server.\u003c/p\u003e\u003cp\u003eThe attacker does not receive the response body, but can use the vulnerability to probe internal services, trigger actions on internal HTTPS endpoints, or perform timing-based reconnaissance of the server\u0027s network environment.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe vulnerability affects any MISP deployment where the cspReport endpoint is reachable and the server has network access to internal or external HTTPS services.\u003c/p\u003e"
                }
              ],
              "value": "MISP\u0027s RequestHandlerComponent automatically decodes XML request bodies on all write requests. The underlying Xml::build() library contains a logic error in its readFile guard condition (readFile \u0026\u0026 http || https), where PHP operator precedence causes the https branch to bypass the readFile check entirely. As a result, a request body containing a bare HTTPS URL is treated as a locator and fetched by the server. Because the cspReport endpoint accepts XML content type and is unauthenticated by design, an unauthenticated remote attacker can send a POST request with a crafted XML body to cause the MISP server to issue an outbound HTTPS request to an arbitrary target reachable from the server.\n\nThe attacker does not receive the response body, but can use the vulnerability to probe internal services, trigger actions on internal HTTPS endpoints, or perform timing-based reconnaissance of the server\u0027s network environment.\u00a0\n\nThe vulnerability affects any MISP deployment where the cspReport endpoint is reachable and the server has network access to internal or external HTTPS services."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-12",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-12 Exploiting Unsafe Default Behavior"
                }
              ]
            }
          ],
          "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: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-918",
                  "description": "CWE-918 Server-Side Request Forgery (SSRF)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T13:50:48.696Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/716fc49d3"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces a custom XML input type handler in AppController::beforeFilter() that validates the request body contains an XML document marker (the \u0026lt; character) before passing it to the XML decoder. If the body does not contain \u0026lt;, it returns an empty array, preventing the Xml::build() locator/fetch code path from being reached regardless of the vendored library\u0027s internal guard logic. This ensures only actual XML documents are processed, eliminating the SSRF vector.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces a custom XML input type handler in AppController::beforeFilter() that validates the request body contains an XML document marker (the \u003c character) before passing it to the XML decoder. If the body does not contain \u003c, it returns an empty array, preventing the Xml::build() locator/fetch code path from being reached regardless of the vendored library\u0027s internal guard logic. This ensures only actual XML documents are processed, eliminating the SSRF vector."
            }
          ],
          "title": "MISP Unauthenticated Blind SSRF via XML Body Processing",
          "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 cspReport endpoint is unauthenticated by design, as stated in the commit message.",
                      "The SSRF is limited to HTTPS targets because the operator precedence bug only ungates the https branch of the readFile guard.",
                      "The SSRF is blind: the fetched response is not returned to the attacker, limiting direct data exfiltration.",
                      "The exact affected version range before 2.5.47 is not precisely determined; the tag boundary indicates the fix is included in v2.5.47.",
                      "CAPEC-12 is the closest available mapping; the attack is more specifically about exploiting a logic error in input validation within an automatic content-type handler rather than a purely misconfigured default.",
                      "CVSS impact metrics are set to None based on the blind nature of the SSRF; if the server processes the fetched response in a way that leaks data or triggers actions on internal services, the impact could be higher.",
                      "The vendored Xml::build() library\u0027s behavior with a locator (fetching the URL) is taken from the commit message description; the actual library code was not included in the patch."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-12",
                        "rationale": "The framework\u0027s default behavior is to automatically decode any XML-typed request body through Xml::build() without validating that the body is actually an XML document. This unsafe default, combined with a logic error in the vendored library\u0027s guard condition, allows an attacker to exploit the default processing path to trigger an outbound request. CAPEC-12 is the closest available mapping; the attack is more specifically about exploiting a logic error in input validation within the default processing pipeline rather than a purely misconfigured default. No CAPEC entry more precisely describes SSRF via unvalidated input in an automatic content-type handler."
                      }
                    ],
                    "commit": "716fc49d3816dd17d8aeeee074a12f430edc2a55",
                    "confidence": "medium",
                    "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 cspReport endpoint is network-accessible. AC:L: The attack requires only a POST request with a specific Content-Type and a URL as the body; no race conditions or complex setup. AT:N: No attack target manipulation is required. PR:N: The cspReport endpoint is unauthenticated by design. UI:N: No user interaction is needed. VC/VI/VA:N: The SSRF is blind; the response is not returned to the attacker, and there is no direct impact on MISP\u0027s confidentiality, integrity, or availability. SC/SI/SA:N: The blind nature means no data from secondary systems is exfiltrated to the attacker, and no confirmed integrity or availability impact on secondary systems is evidenced. Note: if the server processes the fetched response in a way that leaks data or triggers side effects on internal services, the secondary impact metrics could be higher; this is not confirmed by the available evidence.",
                    "fixSummary": "The fix introduces a custom XML input type handler in AppController::beforeFilter() that validates the request body contains an XML document marker (the \u003c character) before passing it to the XML decoder. If the body does not contain \u003c, it returns an empty array, preventing the Xml::build() locator/fetch code path from being reached regardless of the vendored library\u0027s internal guard logic. This ensures only actual XML documents are processed, eliminating the SSRF vector.",
                    "generatedAt": "2026-09-22T13:46:08.714767Z",
                    "generator": "patch2vuln.py",
                    "model": "qwen3.8:27b",
                    "modelComparison": {
                      "rankings": [
                        {
                          "agreementScore": 9,
                          "assumptionCount": 7,
                          "confidence": "medium",
                          "model": "qwen3.8:27b",
                          "score": 3
                        }
                      ],
                      "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": "99e7ef2fbd5abebda159b377fe3bb3f75026c9966eb556d2d713642448af9d60",
                    "patchSummary": "Adds 15 lines to app/Controller/AppController.php in the beforeFilter() method. Registers a custom XML input type via RequestHandler-\u003eaddInputType(\u0027xml\u0027, ...) with a closure that checks whether the body is a string containing the \u003c character. If not, it returns an empty array (no decoding). If yes, it delegates to RequestHandler-\u003econvertXml(). This ensures only actual XML documents are processed, preventing bare URLs from being interpreted as fetch locators by the vendored Xml::build() library.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "716fc49d3816dd17d8aeeee074a12f430edc2a55",
                        "patchSha256": "99e7ef2fbd5abebda159b377fe3bb3f75026c9966eb556d2d713642448af9d60",
                        "source": "https://github.com/MISP/MISP/commit/716fc49d3.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/716fc49d3.patch",
                        "subject": "fix: [security] Decode only an XML body that is actually a"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/716fc49d3.patch",
                    "subject": "fix: [security] Decode only an XML body that is actually a",
                    "tagVersionBoundary": {
                      "commits_after_fix": 41,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-918",
                        "rationale": "The vulnerability allows an unauthenticated attacker to cause the MISP server to issue outbound HTTPS requests to arbitrary attacker-specified URLs by sending a crafted XML body to the cspReport endpoint. The server fetches the URL as if it were an XML document locator, constituting a blind SSRF."
                      },
                      {
                        "cweId": "CWE-20",
                        "rationale": "The root cause is that the XML request body is not validated to confirm it is an actual XML document before being passed to Xml::build(). The framework\u0027s default behavior treats any XML content-type body as a document without checking for document structure, allowing a bare URL to be interpreted as a fetch locator."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20205"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95679",
        "datePublished": "2026-09-22T13:50:48.696Z",
        "dateReserved": "2026-09-22T13:50:46.243Z",
        "dateUpdated": "2026-09-22T15:37:46.734Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95674 (GCVE-0-2026-95674)

    Vulnerability from cvelistv5 – Published: 2026-09-22 13:44 – Updated: 2026-09-22 15:31
    VLAI
    Title
    MISP EventsController queryEnrichment allows querying unavailable or legacy modules without validation
    Summary
    In MISP, the queryEnrichment method in EventsController.php accepted a module name parameter and iterated over the list of enabled modules to find a match. If the specified module was not present in the enabled modules list, the code silently continued processing using default parameters (format set to 'simplified' and no module-specific configuration applied) rather than rejecting the request. This allowed an authenticated user to trigger enrichment or analysis processing through a module that was not explicitly enabled or available on the instance, bypassing the intended module availability controls. The lack of validation meant that module names outside the enabled set were not rejected, potentially exposing functionality or data processing paths that the administrator had not authorized for use.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:31 UTC
    CWE
    • 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 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-22 13:21
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/7dfcc4d32.patch 799bc5310fbd…
    Confidence
    medium
    Commit Subject Patch SHA-256
    7dfcc4d32970 fix: [security] Harden misp modules module choice 799bc5310fbd…
    Fix summary

    The fix adds a moduleFound flag that is set only when the requested module name matches an entry in the enabled modules list. After the lookup loop completes, if the flag remains false, the method throws a MethodNotAllowedException with the message 'Module not found or not available,' effectively rejecting any query that references a module not present in the enabled set.

    Patch summary

    In app/Controller/EventsController.php, the queryEnrichment method is modified: a boolean variable $moduleFound is initialized to false before the foreach loop over $enabledModules['modules']. Inside the loop, when a module name matches, $moduleFound is set to true. After the loop, a new conditional block checks if $moduleFound is still false and throws a MethodNotAllowedException, preventing further processing with an unavailable module.

    CVSS rationale

    The vulnerability is exploitable over the network (AV:N) via the MISP web interface with low 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 primary impact is a low confidentiality impact (VC:L) because an authenticated user could trigger processing through a module not in the enabled set, potentially exposing data or processing results not intended to be available. No integrity or availability impact is evidenced (VI:N, VA:N). No secondary impacts are indicated (SC:N, SI:N, SA:N). The low impact reflects that the user already has authenticated access to the event and the exposure is limited to an additional module processing path.

    Weakness rationale
    • CWE-20 The module name parameter supplied to queryEnrichment was not validated against the set of enabled/available modules. The code accepted any module name and, when no match was found, proceeded with default parameters instead of rejecting the input. The fix adds an explicit validation check that rejects the request when the module is not in the enabled list.
    Attack pattern rationale
    • CAPEC-124 The closest plausible attack pattern is parameter tampering: an authenticated user supplies a module name in the queryEnrichment request that is not in the enabled modules list (e.g., a legacy or disabled module). The server previously accepted this parameter value and processed the request with defaults. The uncertainty is that the patch does not explicitly describe an active tampering scenario; it is a server-side validation gap. CAPEC-124 is selected as the best available match because the core mechanism is the manipulation of a request parameter to reference an unauthorized resource.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary (v2.5.47 with 138 commits after fix); the exact last affected version and first fixed version are not explicitly stated in the patch metadata.
    • The security impact is assessed as low confidentiality impact based on the limited evidence; the actual data exposure depends on what legacy modules would process, which is not detailed in the patch.
    • CAPEC-124 (Parameter Tampering) is the closest available attack pattern; the actual scenario is a server-side input validation gap rather than an active tampering attack, so the mapping is approximate.
    • The patch does not specify whether the legacy module query could lead to code execution, data exfiltration, or other higher-impact consequences; the CVSS impact metrics are conservatively set to reflect only the evidenced behavior.
    • Authentication is assumed to be required (PR:L) based on MISP being an authenticated web application; the patch does not explicitly state authentication requirements.
    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-95674",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:31:46.531365Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:31:52.088Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/Controller/EventsController.php"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/EventsController.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\u003eIn MISP, the queryEnrichment method in EventsController.php accepted a module name parameter and iterated over the list of enabled modules to find a match. If the specified module was not present in the enabled modules list, the code silently continued processing using default parameters (format set to \u0027simplified\u0027 and no module-specific configuration applied) rather than rejecting the request. This allowed an authenticated user to trigger enrichment or analysis processing through a module that was not explicitly enabled or available on the instance, bypassing the intended module availability controls. The lack of validation meant that module names outside the enabled set were not rejected, potentially exposing functionality or data processing paths that the administrator had not authorized for use.\u003c/p\u003e"
                }
              ],
              "value": "In MISP, the queryEnrichment method in EventsController.php accepted a module name parameter and iterated over the list of enabled modules to find a match. If the specified module was not present in the enabled modules list, the code silently continued processing using default parameters (format set to \u0027simplified\u0027 and no module-specific configuration applied) rather than rejecting the request. This allowed an authenticated user to trigger enrichment or analysis processing through a module that was not explicitly enabled or available on the instance, bypassing the intended module availability controls. The lack of validation meant that module names outside the enabled set were not rejected, potentially exposing functionality or data processing paths that the administrator had not authorized for use."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-124",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-124 Parameter Tampering"
                }
              ]
            }
          ],
          "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-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T13:44:33.427Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/7dfcc4d32"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix adds a moduleFound flag that is set only when the requested module name matches an entry in the enabled modules list. After the lookup loop completes, if the flag remains false, the method throws a MethodNotAllowedException with the message \u0027Module not found or not available,\u0027 effectively rejecting any query that references a module not present in the enabled set.\u003c/p\u003e"
                }
              ],
              "value": "The fix adds a moduleFound flag that is set only when the requested module name matches an entry in the enabled modules list. After the lookup loop completes, if the flag remains false, the method throws a MethodNotAllowedException with the message \u0027Module not found or not available,\u0027 effectively rejecting any query that references a module not present in the enabled set."
            }
          ],
          "title": "MISP EventsController queryEnrichment allows querying unavailable or legacy modules without validation",
          "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 range is inferred from the tag_version_boundary (v2.5.47 with 138 commits after fix); the exact last affected version and first fixed version are not explicitly stated in the patch metadata.",
                      "The security impact is assessed as low confidentiality impact based on the limited evidence; the actual data exposure depends on what legacy modules would process, which is not detailed in the patch.",
                      "CAPEC-124 (Parameter Tampering) is the closest available attack pattern; the actual scenario is a server-side input validation gap rather than an active tampering attack, so the mapping is approximate.",
                      "The patch does not specify whether the legacy module query could lead to code execution, data exfiltration, or other higher-impact consequences; the CVSS impact metrics are conservatively set to reflect only the evidenced behavior.",
                      "Authentication is assumed to be required (PR:L) based on MISP being an authenticated web application; the patch does not explicitly state authentication requirements."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-124",
                        "rationale": "The closest plausible attack pattern is parameter tampering: an authenticated user supplies a module name in the queryEnrichment request that is not in the enabled modules list (e.g., a legacy or disabled module). The server previously accepted this parameter value and processed the request with defaults. The uncertainty is that the patch does not explicitly describe an active tampering scenario; it is a server-side validation gap. CAPEC-124 is selected as the best available match because the core mechanism is the manipulation of a request parameter to reference an unauthorized resource."
                      }
                    ],
                    "commit": "7dfcc4d32970d553e8c39827dac04889e44f94e0",
                    "confidence": "medium",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      }
                    ],
                    "cvssRationale": "The vulnerability is exploitable over the network (AV:N) via the MISP web interface with low 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 primary impact is a low confidentiality impact (VC:L) because an authenticated user could trigger processing through a module not in the enabled set, potentially exposing data or processing results not intended to be available. No integrity or availability impact is evidenced (VI:N, VA:N). No secondary impacts are indicated (SC:N, SI:N, SA:N). The low impact reflects that the user already has authenticated access to the event and the exposure is limited to an additional module processing path.",
                    "fixSummary": "The fix adds a moduleFound flag that is set only when the requested module name matches an entry in the enabled modules list. After the lookup loop completes, if the flag remains false, the method throws a MethodNotAllowedException with the message \u0027Module not found or not available,\u0027 effectively rejecting any query that references a module not present in the enabled set.",
                    "generatedAt": "2026-09-22T13:21:49.468745Z",
                    "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": "799bc5310fbd5bb6079992d5f7713a2d41ce3fbe45aa200523937e921f713cf4",
                    "patchSummary": "In app/Controller/EventsController.php, the queryEnrichment method is modified: a boolean variable $moduleFound is initialized to false before the foreach loop over $enabledModules[\u0027modules\u0027]. Inside the loop, when a module name matches, $moduleFound is set to true. After the loop, a new conditional block checks if $moduleFound is still false and throws a MethodNotAllowedException, preventing further processing with an unavailable module.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "7dfcc4d32970d553e8c39827dac04889e44f94e0",
                        "patchSha256": "799bc5310fbd5bb6079992d5f7713a2d41ce3fbe45aa200523937e921f713cf4",
                        "source": "https://github.com/MISP/MISP/commit/7dfcc4d32.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/7dfcc4d32.patch",
                        "subject": "fix: [security] Harden misp modules module choice"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/7dfcc4d32.patch",
                    "subject": "fix: [security] Harden misp modules module choice",
                    "tagVersionBoundary": {
                      "commits_after_fix": 138,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-20",
                        "rationale": "The module name parameter supplied to queryEnrichment was not validated against the set of enabled/available modules. The code accepted any module name and, when no match was found, proceeded with default parameters instead of rejecting the input. The fix adds an explicit validation check that rejects the request when the module is not in the enabled list."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20127"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95674",
        "datePublished": "2026-09-22T13:44:33.427Z",
        "dateReserved": "2026-09-22T13:44:31.610Z",
        "dateUpdated": "2026-09-22T15:31:52.088Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95671 (GCVE-0-2026-95671)

    Vulnerability from cvelistv5 – Published: 2026-09-22 13:20 – Updated: 2026-09-22 15:32
    VLAI
    Title
    MISP Collections: Missing Authorization Check for Sharing Group on PUT Request in collections/add
    Summary
    In MISP, the CollectionsController add() method enforced the sharing-group usability authorization check and element capture only when the HTTP request method was POST. However, the underlying CRUDComponent::add() method persists data on both POST and PUT requests. As a result, an authenticated user could issue a PUT request to the collections/add endpoint, bypassing the sharing-group authorization check entirely. This allowed the creation of a collection with distribution=4 (shared with a specific sharing group) targeting a sharing group that the user was not authorized to use. The bypassed check would normally verify that the current user has access to the specified sharing group before allowing the collection to be associated with it. The security impact is that an authenticated user can place collection data into a sharing group context they do not have legitimate access to, potentially exposing that data to all members of the unauthorized sharing group and violating the intended access-control boundaries of the MISP instance. The vulnerability requires an authenticated session and knowledge of a valid sharing group identifier; no user interaction or special tooling is needed beyond sending a PUT request instead of a POST request to the same endpoint.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:32 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 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-22 13:13
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/c20f5a836.patch a49bc540d446…
    Confidence
    medium
    Commit Subject Patch SHA-256
    c20f5a83621d fix: [security] Authorise the collection sharing group on PUT a49bc540d446…
    Fix summary

    The authorization guard in CollectionsController::add() was extended to cover PUT requests in addition to POST requests. The sharing-group usability check (which validates that the current user can use the target sharing group) and the element capture logic now execute regardless of whether the request arrives as POST or PUT, ensuring that CRUDComponent::add() cannot persist a collection with an unauthorized sharing group via either HTTP verb.

    Patch summary

    In app/Controller/CollectionsController.php, the condition guarding the sharing-group authorization check and element capture was changed from 'if ($this->request->is('post'))' to 'if ($this->request->is('post') || $this->request->is('put'))'. A comment was added explaining that CRUDComponent::add() persists on either verb, so the guard must cover both. Four lines inserted, one line deleted in total.

    CVSS rationale

    AV:N - MISP is a web application accessible over the network. AC:L - The attack requires only changing the HTTP method from POST to PUT; no race conditions, complex payloads, or special conditions are needed. AT:N - No attack target manipulation is required. PR:L - An authenticated MISP user is required; the vulnerability is in the authorization layer, not authentication. UI:N - No victim interaction is needed. VC:N - The primary data in the collection is user-created; the vulnerability does not directly expose other users' data to the attacker. VI:L - The attacker can create a collection in a sharing group they are not authorized to use, violating the integrity of the sharing-group access model. VA:N - No availability impact. SC:N - No secondary confidentiality impact identified. SI:L - Secondary integrity impact: data is placed in an unauthorized sharing-group context, potentially visible to that group's members. SA:N - No secondary availability impact.

    Weakness rationale
    • CWE-862 The sharing-group usability authorization check was present for POST but entirely absent for PUT requests to the same endpoint. The authorization logic was not missing in design; it was simply not applied to one of the HTTP methods that triggers the same persistence path, resulting in a missing authorization enforcement for PUT.
    • CWE-285 The application performed an authorization check (sharing-group usability) but applied it conditionally based on the HTTP method, allowing an attacker to bypass the check by selecting a different method. This is an improper authorization implementation where the check is not consistently enforced across all code paths that lead to the sensitive operation.
    Attack pattern rationale
    • CAPEC-114 The attacker manipulates the HTTP method parameter (changing POST to PUT) to bypass the authorization check that is keyed on the method. The HTTP method acts as a routing parameter that the application uses to decide whether to enforce authorization; tampering with it causes the check to be skipped. This is the closest CAPEC to the observed bypass technique, though the pattern is more specifically an authorization bypass via method selection rather than classic parameter tampering. Uncertainty: no CAPEC specifically covers 'bypassing authorization by altering the HTTP verb'; CAPEC-114 is the best available match.
    Assumptions to verify
    • The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.47 with 54 commits after fix); the exact last affected version and first fixed version are not explicitly stated in the patch and may differ.
    • The CVSS assumes the primary impact is integrity (unauthorized placement of data in a sharing group) rather than confidentiality, since the data in the collection is user-created. If the collection grants read access to other data in the sharing group, the confidentiality impact could be higher.
    • CAPEC-114 (Parameter Tampering) is the closest available CAPEC for bypassing an authorization check by altering the HTTP method; no CAPEC specifically models HTTP-verb-based authorization bypass.
    • The patch does not include version tags or release notes; affected version ranges are approximate.
    • 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-95671",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:32:15.165861Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:32:21.567Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "CollectionsController"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/CollectionsController.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\u003eIn MISP, the CollectionsController add() method enforced the sharing-group usability authorization check and element capture only when the HTTP request method was POST. However, the underlying CRUDComponent::add() method persists data on both POST and PUT requests. As a result, an authenticated user could issue a PUT request to the collections/add endpoint, bypassing the sharing-group authorization check entirely. This allowed the creation of a collection with distribution=4 (shared with a specific sharing group) targeting a sharing group that the user was not authorized to use. The bypassed check would normally verify that the current user has access to the specified sharing group before allowing the collection to be associated with it.\u003c/p\u003e\u003cp\u003eThe security impact is that an authenticated user can place collection data into a sharing group context they do not have legitimate access to, potentially exposing that data to all members of the unauthorized sharing group and violating the intended access-control boundaries of the MISP instance.\u003c/p\u003e\u003cp\u003eThe vulnerability requires an authenticated session and knowledge of a valid sharing group identifier; no user interaction or special tooling is needed beyond sending a PUT request instead of a POST request to the same endpoint.\u003c/p\u003e"
                }
              ],
              "value": "In MISP, the CollectionsController add() method enforced the sharing-group usability authorization check and element capture only when the HTTP request method was POST. However, the underlying CRUDComponent::add() method persists data on both POST and PUT requests. As a result, an authenticated user could issue a PUT request to the collections/add endpoint, bypassing the sharing-group authorization check entirely. This allowed the creation of a collection with distribution=4 (shared with a specific sharing group) targeting a sharing group that the user was not authorized to use. The bypassed check would normally verify that the current user has access to the specified sharing group before allowing the collection to be associated with it.\n\nThe security impact is that an authenticated user can place collection data into a sharing group context they do not have legitimate access to, potentially exposing that data to all members of the unauthorized sharing group and violating the intended access-control boundaries of the MISP instance.\n\nThe vulnerability requires an authenticated session and knowledge of a valid sharing group identifier; no user interaction or special tooling is needed beyond sending a PUT request instead of a POST request to the same endpoint."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-114",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-114 Parameter Tampering"
                }
              ]
            }
          ],
          "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": "LOW",
                "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:L/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-862",
                  "description": "CWE-862 Missing Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-285",
                  "description": "CWE-285 Improper Authorization",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T13:20:25.683Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/c20f5a836"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe authorization guard in CollectionsController::add() was extended to cover PUT requests in addition to POST requests. The sharing-group usability check (which validates that the current user can use the target sharing group) and the element capture logic now execute regardless of whether the request arrives as POST or PUT, ensuring that CRUDComponent::add() cannot persist a collection with an unauthorized sharing group via either HTTP verb.\u003c/p\u003e"
                }
              ],
              "value": "The authorization guard in CollectionsController::add() was extended to cover PUT requests in addition to POST requests. The sharing-group usability check (which validates that the current user can use the target sharing group) and the element capture logic now execute regardless of whether the request arrives as POST or PUT, ensuring that CRUDComponent::add() cannot persist a collection with an unauthorized sharing group via either HTTP verb."
            }
          ],
          "title": "MISP Collections: Missing Authorization Check for Sharing Group on PUT Request in collections/add",
          "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 with 54 commits after fix); the exact last affected version and first fixed version are not explicitly stated in the patch and may differ.",
                      "The CVSS assumes the primary impact is integrity (unauthorized placement of data in a sharing group) rather than confidentiality, since the data in the collection is user-created. If the collection grants read access to other data in the sharing group, the confidentiality impact could be higher.",
                      "CAPEC-114 (Parameter Tampering) is the closest available CAPEC for bypassing an authorization check by altering the HTTP method; no CAPEC specifically models HTTP-verb-based authorization bypass.",
                      "The patch does not include version tags or release notes; affected version ranges are approximate.",
                      "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-114",
                        "rationale": "The attacker manipulates the HTTP method parameter (changing POST to PUT) to bypass the authorization check that is keyed on the method. The HTTP method acts as a routing parameter that the application uses to decide whether to enforce authorization; tampering with it causes the check to be skipped. This is the closest CAPEC to the observed bypass technique, though the pattern is more specifically an authorization bypass via method selection rather than classic parameter tampering. Uncertainty: no CAPEC specifically covers \u0027bypassing authorization by altering the HTTP verb\u0027; CAPEC-114 is the best available match."
                      }
                    ],
                    "commit": "c20f5a83621de6c534847e1728a1f5af843079b7",
                    "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 - MISP is a web application accessible over the network. AC:L - The attack requires only changing the HTTP method from POST to PUT; no race conditions, complex payloads, or special conditions are needed. AT:N - No attack target manipulation is required. PR:L - An authenticated MISP user is required; the vulnerability is in the authorization layer, not authentication. UI:N - No victim interaction is needed. VC:N - The primary data in the collection is user-created; the vulnerability does not directly expose other users\u0027 data to the attacker. VI:L - The attacker can create a collection in a sharing group they are not authorized to use, violating the integrity of the sharing-group access model. VA:N - No availability impact. SC:N - No secondary confidentiality impact identified. SI:L - Secondary integrity impact: data is placed in an unauthorized sharing-group context, potentially visible to that group\u0027s members. SA:N - No secondary availability impact.",
                    "fixSummary": "The authorization guard in CollectionsController::add() was extended to cover PUT requests in addition to POST requests. The sharing-group usability check (which validates that the current user can use the target sharing group) and the element capture logic now execute regardless of whether the request arrives as POST or PUT, ensuring that CRUDComponent::add() cannot persist a collection with an unauthorized sharing group via either HTTP verb.",
                    "generatedAt": "2026-09-22T13:13:03.522587Z",
                    "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": "a49bc540d4465370f1ecbf71f09c9aa51e3a77f3c196f60ddea7210f17f8b1a7",
                    "patchSummary": "In app/Controller/CollectionsController.php, the condition guarding the sharing-group authorization check and element capture was changed from \u0027if ($this-\u003erequest-\u003eis(\u0027post\u0027))\u0027 to \u0027if ($this-\u003erequest-\u003eis(\u0027post\u0027) || $this-\u003erequest-\u003eis(\u0027put\u0027))\u0027. A comment was added explaining that CRUDComponent::add() persists on either verb, so the guard must cover both. Four lines inserted, one line deleted in total.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "c20f5a83621de6c534847e1728a1f5af843079b7",
                        "patchSha256": "a49bc540d4465370f1ecbf71f09c9aa51e3a77f3c196f60ddea7210f17f8b1a7",
                        "source": "https://github.com/MISP/MISP/commit/c20f5a836.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/c20f5a836.patch",
                        "subject": "fix: [security] Authorise the collection sharing group on PUT"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/c20f5a836.patch",
                    "subject": "fix: [security] Authorise the collection sharing group on PUT",
                    "tagVersionBoundary": {
                      "commits_after_fix": 54,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-862",
                        "rationale": "The sharing-group usability authorization check was present for POST but entirely absent for PUT requests to the same endpoint. The authorization logic was not missing in design; it was simply not applied to one of the HTTP methods that triggers the same persistence path, resulting in a missing authorization enforcement for PUT."
                      },
                      {
                        "cweId": "CWE-285",
                        "rationale": "The application performed an authorization check (sharing-group usability) but applied it conditionally based on the HTTP method, allowing an attacker to bypass the check by selecting a different method. This is an improper authorization implementation where the check is not consistently enforced across all code paths that lead to the sensitive operation."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20271"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95671",
        "datePublished": "2026-09-22T13:20:25.683Z",
        "dateReserved": "2026-09-22T13:20:20.466Z",
        "dateUpdated": "2026-09-22T15:32:21.567Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95667 (GCVE-0-2026-95667)

    Vulnerability from cvelistv5 – Published: 2026-09-22 13:11 – Updated: 2026-09-22 15:32
    VLAI
    Title
    MISP Installer Log and FIFO Created World-Readable, Exposing Sensitive Credentials
    Summary
    The MISP installer scripts (for Debian 12, Debian 13, Ubuntu 24.04, and RHEL 9.4) create a log file at /var/log/misp_install.log and a named pipe (FIFO) at /var/log/misp_install.log.pipe to capture all installer output. The log captures highly sensitive data including the generated admin password, database passwords, GPG passphrase, and supervisor password. However, the log file was created by the tee command under the system default umask, resulting in world-readable permissions (typically 0644). Similarly, the FIFO was created with mkfifo without an explicit mode, also inheriting the default umask and remaining world-readable during the window before it was unlinked.  Any local unprivileged user on the system could read the log file or the FIFO to obtain these credentials.  Additionally, the log file was not removed before creation, meaning a pre-existing symlink in /var/log could have been used to redirect the write to an arbitrary location. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:32 UTC
    CWE
    • CWE-732 - Incorrect Permission Assignment for Critical Resource
    • CWE-22 - Path Traversal
    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 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-22 13:03
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/d5d72ab38.patch e0af51eb247c…
    Confidence
    high
    Commit Subject Patch SHA-256
    d5d72ab38eda fix: [security] Create the installer log and its FIFO e0af51eb247c…
    Fix summary

    The installer scripts now explicitly create the log file with 0600 permissions using install -m 0600 and the FIFO with mkfifo -m 0600, ensuring both are root-readable/writable only from the moment of creation. The log file is also removed (rm -f) before creation to prevent a pre-existing symlink in /var/log from being used to redirect the write to an attacker-controlled path. This matches the existing 0600 treatment applied to /root/misp_settings.txt by the save_settings() function.

    Patch summary

    In all four installer scripts (INSTALL.debian12.sh, INSTALL.debian13.sh, INSTALL.ubuntu2404.sh, xINSTALL.rhel94.sh), the single line mkfifo ${logfile}.pipe is replaced with three lines: rm -f "$logfile" to remove any pre-existing file or symlink; install -m 0600 /dev/null "$logfile" to create the log file with root-only permissions; and mkfifo -m 0600 ${logfile}.pipe to create the FIFO with root-only permissions. The subsequent tee and exec redirection lines remain unchanged.

    CVSS rationale

    Attack Vector is Local because the attacker must have a local account or shell access on the system where the MISP installer runs. Attack Complexity is Low because reading a world-readable file requires no special conditions. No Attack Target manipulation is needed. Privileges Required is None because the file is world-readable (0644) and any unprivileged local user can read it. No User Interaction is required. Confidentiality impact is High because the log contains the admin password, database passwords, GPG passphrase, and supervisor password, granting full compromise of the MISP deployment. Integrity and Availability impacts are None. Scope is Not Changed because the exposed credentials belong to the same MISP system. The vulnerability is transient (only during installation) but the log file persists after installation unless manually removed.

    Weakness rationale
    • CWE-732 The installer log file and FIFO were created under the default umask, resulting in world-readable permissions on a file containing sensitive credentials (admin password, database passwords, GPG passphrase, supervisor password). The fix explicitly sets 0600 permissions, confirming the root cause was incorrect permission assignment.
    • CWE-22 The log file was not removed before creation, allowing a pre-existing symlink in /var/log to redirect the write to an arbitrary file. The fix adds rm -f before creation to mitigate this symlink-following risk. This is a secondary weakness addressed by the same patch.
    Attack pattern rationale
    • CAPEC-135 The most direct attack pattern is a local unprivileged user simply reading the world-readable log file at /var/log/misp_install.log to harvest sensitive credentials. No complex exploitation is required beyond file read access. CAPEC-135 covers the general pattern of an attacker leveraging misconfigured file permissions to access sensitive data. The symlink variant (CWE-22) could also map to CAPEC-135 as a sub-technique of permission exploitation.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary (v2.5.47 with 38 commits after fix); the exact first affected version is not specified in the patch metadata.
    • The vulnerability is transient in the sense that it only manifests during the installer execution window, but the log file persists on disk after installation and remains world-readable unless the administrator manually changes permissions or removes it.
    • The CVSS assumes the log file remains on disk after installation; if it is immediately removed by the installer, the exposure window is shorter but the file is still readable during the installation process.
    • CAPEC-135 is the closest available attack pattern; no CAPEC specifically covers 'reading a world-readable log file containing credentials,' so the general permission-misuse pattern is the best match.
    • The symlink attack vector (CWE-22) is a secondary concern addressed by the same patch; the primary vulnerability is the incorrect file permissions (CWE-732).
    • The installer is assumed to run as root (standard for system installation scripts), which is why 0600 permissions restrict access to root only.
    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-95667",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:32:35.402501Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:32:43.415Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "Installer scripts (INSTALL/INSTALL.debian12.sh",
                "INSTALL/INSTALL.debian13.sh",
                "INSTALL/INSTALL.ubuntu2404.sh",
                "INSTALL/xINSTALL.rhel94.sh)"
              ],
              "product": "MISP",
              "programFiles": [
                "INSTALL/INSTALL.debian12.sh",
                "INSTALL/INSTALL.debian13.sh",
                "INSTALL/INSTALL.ubuntu2404.sh",
                "INSTALL/xINSTALL.rhel94.sh"
              ],
              "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": "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\u003eThe MISP installer scripts (for Debian 12, Debian 13, Ubuntu 24.04, and RHEL 9.4) create a log file at /var/log/misp_install.log and a named pipe (FIFO) at /var/log/misp_install.log.pipe to capture all installer output. The log captures highly sensitive data including the generated admin password, database passwords, GPG passphrase, and supervisor password. However, the log file was created by the tee command under the system default umask, resulting in world-readable permissions (typically 0644). Similarly, the FIFO was created with mkfifo without an explicit mode, also inheriting the default umask and remaining world-readable during the window before it was unlinked.\u0026nbsp;\u003c/p\u003e\u003cp\u003eAny local unprivileged user on the system could read the log file or the FIFO to obtain these credentials.\u0026nbsp;\u003c/p\u003e\u003cp\u003eAdditionally, the log file was not removed before creation, meaning a pre-existing symlink in /var/log could have been used to redirect the write to an arbitrary location.\u003c/p\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e"
                }
              ],
              "value": "The MISP installer scripts (for Debian 12, Debian 13, Ubuntu 24.04, and RHEL 9.4) create a log file at /var/log/misp_install.log and a named pipe (FIFO) at /var/log/misp_install.log.pipe to capture all installer output. The log captures highly sensitive data including the generated admin password, database passwords, GPG passphrase, and supervisor password. However, the log file was created by the tee command under the system default umask, resulting in world-readable permissions (typically 0644). Similarly, the FIFO was created with mkfifo without an explicit mode, also inheriting the default umask and remaining world-readable during the window before it was unlinked.\u00a0\n\nAny local unprivileged user on the system could read the log file or the FIFO to obtain these credentials.\u00a0\n\nAdditionally, the log file was not removed before creation, meaning a pre-existing symlink in /var/log could have been used to redirect the write to an arbitrary location.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-135",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-135 Exploiting Incorrectly Configured Security Permissions"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "LOCAL",
                "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:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/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-732",
                  "description": "CWE-732 Incorrect Permission Assignment for Critical Resource",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-22",
                  "description": "CWE-22 Path Traversal",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T13:11:44.277Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/d5d72ab38"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe installer scripts now explicitly create the log file with 0600 permissions using install -m 0600 and the FIFO with mkfifo -m 0600, ensuring both are root-readable/writable only from the moment of creation. The log file is also removed (rm -f) before creation to prevent a pre-existing symlink in /var/log from being used to redirect the write to an attacker-controlled path. This matches the existing 0600 treatment applied to /root/misp_settings.txt by the save_settings() function.\u003c/p\u003e"
                }
              ],
              "value": "The installer scripts now explicitly create the log file with 0600 permissions using install -m 0600 and the FIFO with mkfifo -m 0600, ensuring both are root-readable/writable only from the moment of creation. The log file is also removed (rm -f) before creation to prevent a pre-existing symlink in /var/log from being used to redirect the write to an attacker-controlled path. This matches the existing 0600 treatment applied to /root/misp_settings.txt by the save_settings() function."
            }
          ],
          "title": "MISP Installer Log and FIFO Created World-Readable, Exposing Sensitive 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": "full",
                      "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 38 commits after fix); the exact first affected version is not specified in the patch metadata.",
                      "The vulnerability is transient in the sense that it only manifests during the installer execution window, but the log file persists on disk after installation and remains world-readable unless the administrator manually changes permissions or removes it.",
                      "The CVSS assumes the log file remains on disk after installation; if it is immediately removed by the installer, the exposure window is shorter but the file is still readable during the installation process.",
                      "CAPEC-135 is the closest available attack pattern; no CAPEC specifically covers \u0027reading a world-readable log file containing credentials,\u0027 so the general permission-misuse pattern is the best match.",
                      "The symlink attack vector (CWE-22) is a secondary concern addressed by the same patch; the primary vulnerability is the incorrect file permissions (CWE-732).",
                      "The installer is assumed to run as root (standard for system installation scripts), which is why 0600 permissions restrict access to root only."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-135",
                        "rationale": "The most direct attack pattern is a local unprivileged user simply reading the world-readable log file at /var/log/misp_install.log to harvest sensitive credentials. No complex exploitation is required beyond file read access. CAPEC-135 covers the general pattern of an attacker leveraging misconfigured file permissions to access sensitive data. The symlink variant (CWE-22) could also map to CAPEC-135 as a sub-technique of permission exploitation."
                      }
                    ],
                    "commit": "d5d72ab38eda4a6c343b784494a4ae9d0d94bd80",
                    "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": "Attack Vector is Local because the attacker must have a local account or shell access on the system where the MISP installer runs. Attack Complexity is Low because reading a world-readable file requires no special conditions. No Attack Target manipulation is needed. Privileges Required is None because the file is world-readable (0644) and any unprivileged local user can read it. No User Interaction is required. Confidentiality impact is High because the log contains the admin password, database passwords, GPG passphrase, and supervisor password, granting full compromise of the MISP deployment. Integrity and Availability impacts are None. Scope is Not Changed because the exposed credentials belong to the same MISP system. The vulnerability is transient (only during installation) but the log file persists after installation unless manually removed.",
                    "fixSummary": "The installer scripts now explicitly create the log file with 0600 permissions using install -m 0600 and the FIFO with mkfifo -m 0600, ensuring both are root-readable/writable only from the moment of creation. The log file is also removed (rm -f) before creation to prevent a pre-existing symlink in /var/log from being used to redirect the write to an attacker-controlled path. This matches the existing 0600 treatment applied to /root/misp_settings.txt by the save_settings() function.",
                    "generatedAt": "2026-09-22T13:03:07.672539Z",
                    "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": "e0af51eb247c4727485796d1bd4fcc2c30cb34c2a733043a3371df7e94cb81f0",
                    "patchSummary": "In all four installer scripts (INSTALL.debian12.sh, INSTALL.debian13.sh, INSTALL.ubuntu2404.sh, xINSTALL.rhel94.sh), the single line mkfifo ${logfile}.pipe is replaced with three lines: rm -f \"$logfile\" to remove any pre-existing file or symlink; install -m 0600 /dev/null \"$logfile\" to create the log file with root-only permissions; and mkfifo -m 0600 ${logfile}.pipe to create the FIFO with root-only permissions. The subsequent tee and exec redirection lines remain unchanged.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "d5d72ab38eda4a6c343b784494a4ae9d0d94bd80",
                        "patchSha256": "e0af51eb247c4727485796d1bd4fcc2c30cb34c2a733043a3371df7e94cb81f0",
                        "source": "https://github.com/MISP/MISP/commit/d5d72ab38.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/d5d72ab38.patch",
                        "subject": "fix: [security] Create the installer log and its FIFO"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/d5d72ab38.patch",
                    "subject": "fix: [security] Create the installer log and its FIFO",
                    "tagVersionBoundary": {
                      "commits_after_fix": 38,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-732",
                        "rationale": "The installer log file and FIFO were created under the default umask, resulting in world-readable permissions on a file containing sensitive credentials (admin password, database passwords, GPG passphrase, supervisor password). The fix explicitly sets 0600 permissions, confirming the root cause was incorrect permission assignment."
                      },
                      {
                        "cweId": "CWE-22",
                        "rationale": "The log file was not removed before creation, allowing a pre-existing symlink in /var/log to redirect the write to an arbitrary file. The fix adds rm -f before creation to mitigate this symlink-following risk. This is a secondary weakness addressed by the same patch."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20100"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95667",
        "datePublished": "2026-09-22T13:11:44.277Z",
        "dateReserved": "2026-09-22T13:11:36.849Z",
        "dateUpdated": "2026-09-22T15:32:43.415Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95665 (GCVE-0-2026-95665)

    Vulnerability from cvelistv5 – Published: 2026-09-22 13:01 – Updated: 2026-09-22 15:33
    VLAI
    Title
    MISP Reflected Cross-Site Scripting in Event Export Confirmation Form via Unescaped JSON
    Summary
    MISP contains a reflected cross-site scripting (XSS) vulnerability in the event REST search export confirmation form. The view template app/View/Events/ajax/eventRestSearchExportConfirmationForm.ctp renders a URL-supplied event ID list into a single-quoted JavaScript string literal using PHP's json_encode() without any hex-encoding flags. By default, json_encode() escapes double quotes and backslashes but does not escape single quotes. Because the JavaScript string is delimited by single quotes, an attacker can inject a single-quote character to terminate the string literal and execute arbitrary JavaScript in the victim's browser session. The vulnerability affects the Default and UiBeta themes, both of which render this view. The Overmind theme's own copy of the form already passed the value through an escaped data attribute and was not affected by this specific sink. Preconditions: the victim must be an authenticated MISP user and must actively open or navigate to the attacker-crafted URL. The attacker does not require an account or any prior access to the MISP instance. Security impact: successful exploitation allows execution of arbitrary JavaScript in the context of the MISP web application, potentially leading to session hijacking, unauthorized actions performed on behalf of the victim, exfiltration of sensitive data visible in the session, or further client-side attacks. The vulnerable component's own confidentiality, integrity, and availability are not directly compromised; the impact is on the underlying user session.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:32 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input in Web Page ('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 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-22 12:57
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/ad4ff238d.patch b2c68a624115…
    Confidence
    high
    Commit Subject Patch SHA-256
    ad4ff238df97 fix: [security] Escape the event id list in the export b2c68a624115…
    Fix summary

    The vulnerability is remediated by adding the JSON_HEX_TAG, JSON_HEX_APOS, JSON_HEX_QUOT, and JSON_HEX_AMP flags to the json_encode() call at the rendering sink. These flags cause angle brackets, single quotes, double quotes, and ampersands to be hex-encoded (e.g., ' becomes \u0027), preventing any of these characters from breaking out of the single-quoted JavaScript string literal and thereby eliminating the script injection vector.

    Patch summary

    A single-line change in app/View/Events/ajax/eventRestSearchExportConfirmationForm.ctp: the json_encode($idList) call is replaced with json_encode($idList, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP), ensuring that single quotes, double quotes, angle brackets, and ampersands in the event ID list are hex-escaped before being interpolated into the single-quoted JavaScript string literal in the redirectToExportResult() function.

    CVSS rationale

    AV:N: the exploit is delivered over the network via a crafted URL. AC:L: the attack requires only crafting a URL with a single quote in the event ID list; no race conditions or special conditions are needed. AT:N: no additional attack complexity beyond what AC captures. PR:N: the attacker does not need any MISP account or privileges; the victim must be authenticated, but PR measures attacker privileges. UI:A: the victim must actively open or click the crafted link. VC/VI/VA:N: the MISP server's own confidentiality, integrity, and availability are not directly impacted. SC:L: the attacker can read session data, cookies, or other sensitive information in the victim's browser context. SI:L: the attacker can perform actions on behalf of the victim (e.g., submit forms, modify data via the API). SA:N: no impact on the availability of the underlying system.

    Weakness rationale
    • CWE-79 The root cause is the failure to neutralize a single-quote character in user-controlled input (the URL-supplied event ID list) before embedding it in a single-quoted JavaScript string context. json_encode() without hex flags does not escape single quotes, allowing script injection. This is a textbook reflected XSS (CWE-79).
    Attack pattern rationale
    • CAPEC-1 The attack pattern involves injecting a script fragment (a single quote followed by arbitrary JavaScript) into a web page via a URL parameter, which is then reflected into the page's JavaScript context without proper encoding. This matches CAPEC-1 (Cross Site Scripting) directly. The injection is reflected (not stored) and occurs in a script context rather than an HTML context, but CAPEC-1 is the closest and most general applicable pattern. No more specific CAPEC for script-context reflected XSS exists in the CAPEC catalog, so CAPEC-1 is the best available match.
    Assumptions to verify
    • The tag_version_boundary metadata indicates the fix commit is 44 commits after tag v2.5.47, suggesting versions up to and including 2.5.47 may be affected, but no explicit affected or fixed version range is stated in the patch or commit message. The version boundary is inferred from repository metadata and may not be precise.
    • The CVSS v4.0 AT (Attack Complexity) metric value 'N' is used as the neutral/none value; the exact valid value set for AT in CVSS v4.0 is not fully confirmed from the patch evidence alone.
    • The CAPEC-1 mapping is the closest general XSS pattern available; no CAPEC specifically covers script-context reflected XSS via unescaped JSON in a single-quoted JS string, so CAPEC-1 is the best available match.
    • The Overmind theme is assumed unaffected because the commit message states it already passed the value through an escaped data attribute; this is based solely on the commit message and was not independently verified.
    • PR:N is assigned because the attacker does not require authentication to craft the malicious URL; the requirement that the victim be logged in is captured in UI:A rather than PR.
    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-95665",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:32:57.787316Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:33:05.484Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "Events export confirmation form (app/View/Events/ajax/eventRestSearchExportConfirmationForm.ctp)",
                "Default theme",
                "UiBeta theme"
              ],
              "product": "MISP",
              "programFiles": [
                "app/View/Events/ajax/eventRestSearchExportConfirmationForm.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": "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 reflected cross-site scripting (XSS) vulnerability in the event REST search export confirmation form. The view template app/View/Events/ajax/eventRestSearchExportConfirmationForm.ctp renders a URL-supplied event ID list into a single-quoted JavaScript string literal using PHP\u0027s json_encode() without any hex-encoding flags. By default, json_encode() escapes double quotes and backslashes but does not escape single quotes. Because the JavaScript string is delimited by single quotes, an attacker can inject a single-quote character to terminate the string literal and execute arbitrary JavaScript in the victim\u0027s browser session.\u003c/p\u003e\u003cp\u003eThe vulnerability affects the Default and UiBeta themes, both of which render this view. The Overmind theme\u0027s own copy of the form already passed the value through an escaped data attribute and was not affected by this specific sink.\u003c/p\u003e\u003cp\u003ePreconditions: the victim must be an authenticated MISP user and must actively open or navigate to the attacker-crafted URL. The attacker does not require an account or any prior access to the MISP instance.\u003c/p\u003e\u003cp\u003eSecurity impact: successful exploitation allows execution of arbitrary JavaScript in the context of the MISP web application, potentially leading to session hijacking, unauthorized actions performed on behalf of the victim, exfiltration of sensitive data visible in the session, or further client-side attacks. The vulnerable component\u0027s own confidentiality, integrity, and availability are not directly compromised; the impact is on the underlying user session.\u003c/p\u003e"
                }
              ],
              "value": "MISP contains a reflected cross-site scripting (XSS) vulnerability in the event REST search export confirmation form. The view template app/View/Events/ajax/eventRestSearchExportConfirmationForm.ctp renders a URL-supplied event ID list into a single-quoted JavaScript string literal using PHP\u0027s json_encode() without any hex-encoding flags. By default, json_encode() escapes double quotes and backslashes but does not escape single quotes. Because the JavaScript string is delimited by single quotes, an attacker can inject a single-quote character to terminate the string literal and execute arbitrary JavaScript in the victim\u0027s browser session.\n\nThe vulnerability affects the Default and UiBeta themes, both of which render this view. The Overmind theme\u0027s own copy of the form already passed the value through an escaped data attribute and was not affected by this specific sink.\n\nPreconditions: the victim must be an authenticated MISP user and must actively open or navigate to the attacker-crafted URL. The attacker does not require an account or any prior access to the MISP instance.\n\nSecurity impact: successful exploitation allows execution of arbitrary JavaScript in the context of the MISP web application, potentially leading to session hijacking, unauthorized actions performed on behalf of the victim, exfiltration of sensitive data visible in the session, or further client-side attacks. The vulnerable component\u0027s own confidentiality, integrity, and availability are not directly compromised; the impact is on the underlying user session."
            }
          ],
          "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": 5.1,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "LOW",
                "subIntegrityImpact": "LOW",
                "userInteraction": "ACTIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/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"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T13:01:45.225Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/ad4ff238d"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe vulnerability is remediated by adding the JSON_HEX_TAG, JSON_HEX_APOS, JSON_HEX_QUOT, and JSON_HEX_AMP flags to the json_encode() call at the rendering sink. These flags cause angle brackets, single quotes, double quotes, and ampersands to be hex-encoded (e.g., \u0027 becomes \\u0027), preventing any of these characters from breaking out of the single-quoted JavaScript string literal and thereby eliminating the script injection vector.\u003c/p\u003e"
                }
              ],
              "value": "The vulnerability is remediated by adding the JSON_HEX_TAG, JSON_HEX_APOS, JSON_HEX_QUOT, and JSON_HEX_AMP flags to the json_encode() call at the rendering sink. These flags cause angle brackets, single quotes, double quotes, and ampersands to be hex-encoded (e.g., \u0027 becomes \\u0027), preventing any of these characters from breaking out of the single-quoted JavaScript string literal and thereby eliminating the script injection vector."
            }
          ],
          "title": "MISP Reflected Cross-Site Scripting in Event Export Confirmation Form via Unescaped JSON",
          "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 tag_version_boundary metadata indicates the fix commit is 44 commits after tag v2.5.47, suggesting versions up to and including 2.5.47 may be affected, but no explicit affected or fixed version range is stated in the patch or commit message. The version boundary is inferred from repository metadata and may not be precise.",
                      "The CVSS v4.0 AT (Attack Complexity) metric value \u0027N\u0027 is used as the neutral/none value; the exact valid value set for AT in CVSS v4.0 is not fully confirmed from the patch evidence alone.",
                      "The CAPEC-1 mapping is the closest general XSS pattern available; no CAPEC specifically covers script-context reflected XSS via unescaped JSON in a single-quoted JS string, so CAPEC-1 is the best available match.",
                      "The Overmind theme is assumed unaffected because the commit message states it already passed the value through an escaped data attribute; this is based solely on the commit message and was not independently verified.",
                      "PR:N is assigned because the attacker does not require authentication to craft the malicious URL; the requirement that the victim be logged in is captured in UI:A rather than PR."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "The attack pattern involves injecting a script fragment (a single quote followed by arbitrary JavaScript) into a web page via a URL parameter, which is then reflected into the page\u0027s JavaScript context without proper encoding. This matches CAPEC-1 (Cross Site Scripting) directly. The injection is reflected (not stored) and occurs in a script context rather than an HTML context, but CAPEC-1 is the closest and most general applicable pattern. No more specific CAPEC for script-context reflected XSS exists in the CAPEC catalog, so CAPEC-1 is the best available match."
                      }
                    ],
                    "commit": "ad4ff238df978d459ac6efe0a58038748fa4a649",
                    "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 exploit is delivered over the network via a crafted URL. AC:L: the attack requires only crafting a URL with a single quote in the event ID list; no race conditions or special conditions are needed. AT:N: no additional attack complexity beyond what AC captures. PR:N: the attacker does not need any MISP account or privileges; the victim must be authenticated, but PR measures attacker privileges. UI:A: the victim must actively open or click the crafted link. VC/VI/VA:N: the MISP server\u0027s own confidentiality, integrity, and availability are not directly impacted. SC:L: the attacker can read session data, cookies, or other sensitive information in the victim\u0027s browser context. SI:L: the attacker can perform actions on behalf of the victim (e.g., submit forms, modify data via the API). SA:N: no impact on the availability of the underlying system.",
                    "fixSummary": "The vulnerability is remediated by adding the JSON_HEX_TAG, JSON_HEX_APOS, JSON_HEX_QUOT, and JSON_HEX_AMP flags to the json_encode() call at the rendering sink. These flags cause angle brackets, single quotes, double quotes, and ampersands to be hex-encoded (e.g., \u0027 becomes \\u0027), preventing any of these characters from breaking out of the single-quoted JavaScript string literal and thereby eliminating the script injection vector.",
                    "generatedAt": "2026-09-22T12:57:11.104186Z",
                    "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": "b2c68a62411584c586558a3ab03529c380d9bdb0824ac292b26e7f8b3278fa01",
                    "patchSummary": "A single-line change in app/View/Events/ajax/eventRestSearchExportConfirmationForm.ctp: the json_encode($idList) call is replaced with json_encode($idList, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP), ensuring that single quotes, double quotes, angle brackets, and ampersands in the event ID list are hex-escaped before being interpolated into the single-quoted JavaScript string literal in the redirectToExportResult() function.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "ad4ff238df978d459ac6efe0a58038748fa4a649",
                        "patchSha256": "b2c68a62411584c586558a3ab03529c380d9bdb0824ac292b26e7f8b3278fa01",
                        "source": "https://github.com/MISP/MISP/commit/ad4ff238d.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/ad4ff238d.patch",
                        "subject": "fix: [security] Escape the event id list in the export"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/ad4ff238d.patch",
                    "subject": "fix: [security] Escape the event id list in the export",
                    "tagVersionBoundary": {
                      "commits_after_fix": 44,
                      "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 failure to neutralize a single-quote character in user-controlled input (the URL-supplied event ID list) before embedding it in a single-quoted JavaScript string context. json_encode() without hex flags does not escape single quotes, allowing script injection. This is a textbook reflected XSS (CWE-79)."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20129"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95665",
        "datePublished": "2026-09-22T13:01:45.225Z",
        "dateReserved": "2026-09-22T13:01:42.885Z",
        "dateUpdated": "2026-09-22T15:33:05.484Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95661 (GCVE-0-2026-95661)

    Vulnerability from cvelistv5 – Published: 2026-09-22 12:54 – Updated: 2026-09-22 15:34
    VLAI
    Title
    MISP Reflected Cross-Site Scripting in Attribute Histogram via Unescaped URL-Supplied Type List
    Summary
    MISP contains a reflected cross-site scripting (XSS) vulnerability in the attribute histogram view. The $selectedTypes variable, which is derived from the URL path segment , was interpolated directly into a JavaScript array literal inside an onClick HTML attribute without any encoding or escaping. An attacker who can cause an authenticated MISP user to visit a crafted URL containing a malicious type value can execute arbitrary JavaScript in the victim's browser within the MISP application origin. Successful exploitation allows the attacker to read session cookies, perform actions on behalf of the victim, or exfiltrate sensitive data accessible from the MISP interface.  The vulnerability requires the victim to be authenticated and to actively navigate to the attacker-supplied URL.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:33 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 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-22 12:45
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/95b8f21f6.patch 33d145872395…
    Confidence
    high
    Commit Subject Patch SHA-256
    95b8f21f6be9 fix: [security] Escape the selected types in the attribute 33d145872395…
    Fix summary

    The fix replaces the unsafe raw PHP loop that concatenated type values into a JavaScript array literal with a call to json_encode() using the JSON_HEX_TAG, JSON_HEX_APOS, JSON_HEX_QUOT, and JSON_HEX_AMP flags. This ensures that all special characters (angle brackets, quotes, ampersands) in the type values are hex-encoded, preventing any value from breaking out of the JavaScript string/array context and injecting arbitrary script.

    Patch summary

    In app/View/Elements/histogram.ctp, the onClick attribute previously built a JS array by iterating over $selectedTypes and echoing each value between double quotes with no escaping: [<?php foreach ($selectedTypes as $t) echo '"' . $t . '", ' ?>]. The patch replaces this with a single json_encode($selectedTypes, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP) call, producing a safely encoded JSON array literal that cannot be broken out of by any element value.

    CVSS rationale

    AV:N: The vulnerability is exploitable over the network via a crafted URL. AC:L: No race conditions or special environment conditions are required; the attacker simply crafts a URL with a malicious type value. AT:N: No manipulation of the attack target is needed. PR:N: The attacker requires no privileges on the MISP instance; the victim must be authenticated, but that is a precondition on the victim, not a privilege requirement on the attacker. UI:A: The victim must actively click a link or navigate to the attacker-supplied URL for the reflected payload to execute. VC:N, VI:N, VA:N: The MISP server itself is not directly compromised; the impact is confined to the victim's browser session. SC:L: The attacker can read session tokens or data visible in the MISP UI within the victim's browser. SI:L: The attacker can perform actions on behalf of the victim within the MISP application. SA:N: No availability impact on the victim's browser or the MISP server.

    Weakness rationale
    • CWE-79 The patch directly addresses the reflection of untrusted, URL-supplied data into a JavaScript context within an HTML attribute without encoding. This is a textbook reflected XSS (CWE-79). The specific sub-type is reflected XSS in a JavaScript context (inline event handler), but CWE-79 is the standard and most precise mapping.
    Attack pattern rationale
    • CAPEC-1 CAPEC-1 is the canonical CAPEC pattern for cross-site scripting attacks, covering reflected, stored, and DOM-based variants. The patch evidence shows a reflected XSS where URL-supplied data is injected into an inline JavaScript event handler. CAPEC-1 is the closest and most direct match. No more specific CAPEC sub-pattern for reflected XSS in inline JS handlers exists in the CAPEC catalog, so CAPEC-1 is the best available mapping.
    Assumptions to verify
    • The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.47 with 46 commits after the fix); the exact first affected version is not stated in the patch and is assumed to be all versions prior to the fix commit.
    • The UI:A (Active) rating assumes the victim must click a link or manually navigate to the crafted URL; if the URL could be triggered via an auto-redirect or embedded iframe, UI:P (Passive) might be more appropriate.
    • SC:L and SI:L are conservative ratings for the secondary-system impact; a full session hijack or data exfiltration could justify SC:H/SI:H, but the patch evidence does not specify the exact scope of exploitable data.
    • The CAPEC-1 mapping is the closest available pattern; no CAPEC sub-pattern specifically covers reflected XSS in inline JavaScript event handlers, so the general XSS pattern is used.
    • The commit message references 'any logged-in victim,' implying authentication is required; the exact role or permission level of the victim is not specified.
    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-95661",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:33:57.327364Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:34:06.853Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "app/View/Elements/histogram.ctp"
              ],
              "product": "MISP",
              "programFiles": [
                "app/View/Elements/histogram.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 reflected cross-site scripting (XSS) vulnerability in the attribute histogram view. The $selectedTypes variable, which is derived from the URL path segment , was interpolated directly into a JavaScript array literal inside an onClick HTML attribute without any encoding or escaping. An attacker who can cause an authenticated MISP user to visit a crafted URL containing a malicious type value can execute arbitrary JavaScript in the victim\u0027s browser within the MISP application origin.\u003c/p\u003e\u003cp\u003eSuccessful exploitation allows the attacker to read session cookies, perform actions on behalf of the victim, or exfiltrate sensitive data accessible from the MISP interface.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe vulnerability requires the victim to be authenticated and to actively navigate to the attacker-supplied URL.\u003c/p\u003e"
                }
              ],
              "value": "MISP contains a reflected cross-site scripting (XSS) vulnerability in the attribute histogram view. The $selectedTypes variable, which is derived from the URL path segment , was interpolated directly into a JavaScript array literal inside an onClick HTML attribute without any encoding or escaping. An attacker who can cause an authenticated MISP user to visit a crafted URL containing a malicious type value can execute arbitrary JavaScript in the victim\u0027s browser within the MISP application origin.\n\nSuccessful exploitation allows the attacker to read session cookies, perform actions on behalf of the victim, or exfiltrate sensitive data accessible from the MISP interface.\u00a0\n\nThe vulnerability requires the victim to be authenticated and to actively navigate to the attacker-supplied URL."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-1",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-1 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": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "LOW",
                "subIntegrityImpact": "LOW",
                "userInteraction": "ACTIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/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 During Web Page Generation (\u0027Cross-site Scripting\u0027)",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T12:54:46.496Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/95b8f21f6"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix replaces the unsafe raw PHP loop that concatenated type values into a JavaScript array literal with a call to json_encode() using the JSON_HEX_TAG, JSON_HEX_APOS, JSON_HEX_QUOT, and JSON_HEX_AMP flags. This ensures that all special characters (angle brackets, quotes, ampersands) in the type values are hex-encoded, preventing any value from breaking out of the JavaScript string/array context and injecting arbitrary script.\u003c/p\u003e"
                }
              ],
              "value": "The fix replaces the unsafe raw PHP loop that concatenated type values into a JavaScript array literal with a call to json_encode() using the JSON_HEX_TAG, JSON_HEX_APOS, JSON_HEX_QUOT, and JSON_HEX_AMP flags. This ensures that all special characters (angle brackets, quotes, ampersands) in the type values are hex-encoded, preventing any value from breaking out of the JavaScript string/array context and injecting arbitrary script."
            }
          ],
          "title": "MISP Reflected Cross-Site Scripting in Attribute Histogram via Unescaped URL-Supplied Type List",
          "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 with 46 commits after the fix); the exact first affected version is not stated in the patch and is assumed to be all versions prior to the fix commit.",
                      "The UI:A (Active) rating assumes the victim must click a link or manually navigate to the crafted URL; if the URL could be triggered via an auto-redirect or embedded iframe, UI:P (Passive) might be more appropriate.",
                      "SC:L and SI:L are conservative ratings for the secondary-system impact; a full session hijack or data exfiltration could justify SC:H/SI:H, but the patch evidence does not specify the exact scope of exploitable data.",
                      "The CAPEC-1 mapping is the closest available pattern; no CAPEC sub-pattern specifically covers reflected XSS in inline JavaScript event handlers, so the general XSS pattern is used.",
                      "The commit message references \u0027any logged-in victim,\u0027 implying authentication is required; the exact role or permission level of the victim is not specified."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-1",
                        "rationale": "CAPEC-1 is the canonical CAPEC pattern for cross-site scripting attacks, covering reflected, stored, and DOM-based variants. The patch evidence shows a reflected XSS where URL-supplied data is injected into an inline JavaScript event handler. CAPEC-1 is the closest and most direct match. No more specific CAPEC sub-pattern for reflected XSS in inline JS handlers exists in the CAPEC catalog, so CAPEC-1 is the best available mapping."
                      }
                    ],
                    "commit": "95b8f21f6be9e20323dd101e7d085fc34765c7b7",
                    "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 crafted URL. AC:L: No race conditions or special environment conditions are required; the attacker simply crafts a URL with a malicious type value. AT:N: No manipulation of the attack target is needed. PR:N: The attacker requires no privileges on the MISP instance; the victim must be authenticated, but that is a precondition on the victim, not a privilege requirement on the attacker. UI:A: The victim must actively click a link or navigate to the attacker-supplied URL for the reflected payload to execute. VC:N, VI:N, VA:N: The MISP server itself is not directly compromised; the impact is confined to the victim\u0027s browser session. SC:L: The attacker can read session tokens or data visible in the MISP UI within the victim\u0027s browser. SI:L: The attacker can perform actions on behalf of the victim within the MISP application. SA:N: No availability impact on the victim\u0027s browser or the MISP server.",
                    "fixSummary": "The fix replaces the unsafe raw PHP loop that concatenated type values into a JavaScript array literal with a call to json_encode() using the JSON_HEX_TAG, JSON_HEX_APOS, JSON_HEX_QUOT, and JSON_HEX_AMP flags. This ensures that all special characters (angle brackets, quotes, ampersands) in the type values are hex-encoded, preventing any value from breaking out of the JavaScript string/array context and injecting arbitrary script.",
                    "generatedAt": "2026-09-22T12:45:39.951248Z",
                    "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": "33d14587239572ed6af4ca5d122f4b92405dbce1ff0317a1ff1e6e026073dc8c",
                    "patchSummary": "In app/View/Elements/histogram.ctp, the onClick attribute previously built a JS array by iterating over $selectedTypes and echoing each value between double quotes with no escaping: [\u003c?php foreach ($selectedTypes as $t) echo \u0027\"\u0027 . $t . \u0027\", \u0027 ?\u003e]. The patch replaces this with a single json_encode($selectedTypes, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP) call, producing a safely encoded JSON array literal that cannot be broken out of by any element value.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "95b8f21f6be9e20323dd101e7d085fc34765c7b7",
                        "patchSha256": "33d14587239572ed6af4ca5d122f4b92405dbce1ff0317a1ff1e6e026073dc8c",
                        "source": "https://github.com/MISP/MISP/commit/95b8f21f6.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/95b8f21f6.patch",
                        "subject": "fix: [security] Escape the selected types in the attribute"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/95b8f21f6.patch",
                    "subject": "fix: [security] Escape the selected types in the attribute",
                    "tagVersionBoundary": {
                      "commits_after_fix": 46,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "The patch directly addresses the reflection of untrusted, URL-supplied data into a JavaScript context within an HTML attribute without encoding. This is a textbook reflected XSS (CWE-79). The specific sub-type is reflected XSS in a JavaScript context (inline event handler), but CWE-79 is the standard and most precise mapping."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20161"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95661",
        "datePublished": "2026-09-22T12:54:46.496Z",
        "dateReserved": "2026-09-22T12:54:43.824Z",
        "dateUpdated": "2026-09-22T15:34:06.853Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95659 (GCVE-0-2026-95659)

    Vulnerability from cvelistv5 – Published: 2026-09-22 12:40 – Updated: 2026-09-22 15:34
    VLAI
    Title
    MISP Reflected XSS via Unvalidated Object Type in AnalystData Overmind Thread
    Summary
    MISP contains a reflected cross-site scripting (XSS) vulnerability in the AnalystDataController::viewForObject action. The method accepted a parent object type parameter from the URL without validation and passed it to the Overmind-themed AnalystData thread view element, where it was interpolated into two translated strings and rendered into the HTML response without output encoding. An authenticated attacker who can induce a victim to navigate to a crafted URL can inject arbitrary JavaScript that executes in the victim's browser within the MISP application context. This may allow the attacker to read session data, manipulate the page, or perform actions on behalf of the victim.  The vulnerability requires the victim to be authenticated to MISP and to actively visit the attacker-supplied URL. The affected component is the AnalystData controller and the Overmind theme's AnalystData thread element. Version affected: <2.5.47
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15:34 UTC
    CWE
    • CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
    • CWE-116 - Improper Encoding or Escaping of Output
    • 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 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-22 12:33
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/23b879073.patch 4476bdd487c3…
    Confidence
    high
    Commit Subject Patch SHA-256
    23b879073eef fix: [security] Reflected XSS via the object type in the 4476bdd487c3…
    Fix summary

    The fix introduces two layers of defense. First, the viewForObject action now validates the object_type parameter against the AnalystData::valid_targets whitelist and rejects any value not in that list with a NotFoundException, preventing arbitrary strings from reaching the view layer. Second, the two output sinks in the Overmind thread.ctp template now apply the h() HTML-encoding function to the object type before interpolation into translated strings, ensuring that even if a valid type were to contain special characters, it would be rendered as inert text rather than executable markup.

    Patch summary

    In AnalystDataController.php, the patch adds an import of the AnalystData model and inserts a guard clause at the top of viewForObject that checks the $object_type parameter against AnalystData::valid_targets using a strict in_array comparison; if the value is not in the list, a NotFoundException is thrown. In thread.ctp, two occurrences of strtolower($objectType) passed directly into __() translation calls are wrapped with h() to HTML-encode the value before it is embedded in the rendered HTML output.

    CVSS rationale

    AV:N: The vulnerability is exploitable over the network via a crafted URL. AC:L: No race conditions or special environment conditions are required; the attacker simply crafts a URL with a malicious object_type value. AT:N: No manipulation of the attack target is needed. PR:L: The victim must be authenticated to MISP to reach the AnalystData view. UI:A: The victim must actively navigate to the attacker-supplied URL (e.g., click a link), which constitutes active user interaction. VC:N, VI:N, VA:N: The vulnerable MISP server itself is not directly compromised; the impact is on the victim's browser session. SC:L: The attacker can read data available in the victim's browser context (cookies, session tokens, page content) but impact is limited to the current page. SI:L: The attacker can modify the rendered page or submit forms on behalf of the victim within the session. SA:N: No broader security impact on other systems is expected from this reflected XSS.

    Weakness rationale
    • CWE-79 The object_type URL parameter is reflected into HTML output without encoding, allowing script injection. This is a textbook reflected XSS.
    • CWE-116 The view template interpolated the object type into translated strings without applying h() HTML encoding, which is the direct encoding failure that permits the XSS.
    • CWE-20 The controller accepted any arbitrary string as the object_type parameter without validating it against the known set of valid analyst-data target types, allowing attacker-controlled data to reach the output layer.
    Attack pattern rationale
    • CAPEC-127 The vulnerability is a reflected XSS: attacker-controlled input from the URL is reflected into the HTML response without encoding. CAPEC-127 is the most specific and directly applicable attack pattern. No uncertainty in this mapping.
    • CAPEC-61 CAPEC-61 is the broader parent pattern for XSS attacks. It is included as a secondary mapping to cover the general class of the vulnerability. CAPEC-127 is the more precise match; CAPEC-61 is listed for completeness.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary metadata (v2.5.47 with 58 commits after the fix), suggesting the fix is included in v2.5.47. The exact first affected version is not specified in the patch.
    • PR:L assumes the AnalystData viewForObject action requires authentication, which is consistent with MISP's typical access model but not explicitly confirmed in the patch.
    • UI:A assumes the victim must actively navigate to a crafted URL (e.g., click a link). If the malicious URL could be loaded in an iframe or auto-redirected, UI:P might be more appropriate, but the evidence supports active navigation.
    • SC:L and SI:L reflect the typical impact of reflected XSS limited to the current page context; a more severe impact (SC:H, SI:H) is possible if the XSS can exfiltrate full session credentials or perform privileged actions, but the patch evidence does not confirm the scope of available data.
    • The CAPEC-61 mapping is a broader parent pattern included for completeness; CAPEC-127 is the primary and most precise match.
    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-95659",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:34:30.477077Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:34:41.995Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "modules": [
                "AnalystDataController",
                "Overmind theme AnalystData thread element"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/AnalystDataController.php",
                "app/View/Themed/Overmind/Elements/AnalystData/thread.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 Fable 5.1"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eMISP contains a reflected cross-site scripting (XSS) vulnerability in the AnalystDataController::viewForObject action. The method accepted a parent object type parameter from the URL without validation and passed it to the Overmind-themed AnalystData thread view element, where it was interpolated into two translated strings and rendered into the HTML response without output encoding. An authenticated attacker who can induce a victim to navigate to a crafted URL can inject arbitrary JavaScript that executes in the victim\u0027s browser within the MISP application context. This may allow the attacker to read session data, manipulate the page, or perform actions on behalf of the victim.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe vulnerability requires the victim to be authenticated to MISP and to actively visit the attacker-supplied URL. The affected component is the AnalystData controller and the Overmind theme\u0027s AnalystData thread element.\u003c/p\u003e\u003cp\u003eVersion affected: \u0026lt;2.5.47\u003c/p\u003e"
                }
              ],
              "value": "MISP contains a reflected cross-site scripting (XSS) vulnerability in the AnalystDataController::viewForObject action. The method accepted a parent object type parameter from the URL without validation and passed it to the Overmind-themed AnalystData thread view element, where it was interpolated into two translated strings and rendered into the HTML response without output encoding. An authenticated attacker who can induce a victim to navigate to a crafted URL can inject arbitrary JavaScript that executes in the victim\u0027s browser within the MISP application context. This may allow the attacker to read session data, manipulate the page, or perform actions on behalf of the victim.\u00a0\n\nThe vulnerability requires the victim to be authenticated to MISP and to actively visit the attacker-supplied URL. The affected component is the AnalystData controller and the Overmind theme\u0027s AnalystData thread element.\n\nVersion affected: \u003c2.5.47"
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-127",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-127 Cross Site Scripting (Reflected)"
                }
              ]
            },
            {
              "capecId": "CAPEC-61",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-61 Cross Site Scripting"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "NONE",
                "attackVector": "NETWORK",
                "baseScore": 4.8,
                "baseSeverity": "MEDIUM",
                "privilegesRequired": "LOW",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "LOW",
                "subIntegrityImpact": "LOW",
                "userInteraction": "ACTIVE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/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"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-116",
                  "description": "CWE-116 Improper Encoding or Escaping of Output",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            },
            {
              "descriptions": [
                {
                  "cweId": "CWE-20",
                  "description": "CWE-20 Improper Input Validation",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-22T12:41:31.639Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/23b879073"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe fix introduces two layers of defense. First, the viewForObject action now validates the object_type parameter against the AnalystData::valid_targets whitelist and rejects any value not in that list with a NotFoundException, preventing arbitrary strings from reaching the view layer. Second, the two output sinks in the Overmind thread.ctp template now apply the h() HTML-encoding function to the object type before interpolation into translated strings, ensuring that even if a valid type were to contain special characters, it would be rendered as inert text rather than executable markup.\u003c/p\u003e"
                }
              ],
              "value": "The fix introduces two layers of defense. First, the viewForObject action now validates the object_type parameter against the AnalystData::valid_targets whitelist and rejects any value not in that list with a NotFoundException, preventing arbitrary strings from reaching the view layer. Second, the two output sinks in the Overmind thread.ctp template now apply the h() HTML-encoding function to the object type before interpolation into translated strings, ensuring that even if a valid type were to contain special characters, it would be rendered as inert text rather than executable markup."
            }
          ],
          "source": {
            "discovery": "UNKNOWN"
          },
          "title": "MISP Reflected XSS via Unvalidated Object Type in AnalystData Overmind Thread",
          "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 range is inferred from the tag_version_boundary metadata (v2.5.47 with 58 commits after the fix), suggesting the fix is included in v2.5.47. The exact first affected version is not specified in the patch.",
                      "PR:L assumes the AnalystData viewForObject action requires authentication, which is consistent with MISP\u0027s typical access model but not explicitly confirmed in the patch.",
                      "UI:A assumes the victim must actively navigate to a crafted URL (e.g., click a link). If the malicious URL could be loaded in an iframe or auto-redirected, UI:P might be more appropriate, but the evidence supports active navigation.",
                      "SC:L and SI:L reflect the typical impact of reflected XSS limited to the current page context; a more severe impact (SC:H, SI:H) is possible if the XSS can exfiltrate full session credentials or perform privileged actions, but the patch evidence does not confirm the scope of available data.",
                      "The CAPEC-61 mapping is a broader parent pattern included for completeness; CAPEC-127 is the primary and most precise match."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-127",
                        "rationale": "The vulnerability is a reflected XSS: attacker-controlled input from the URL is reflected into the HTML response without encoding. CAPEC-127 is the most specific and directly applicable attack pattern. No uncertainty in this mapping."
                      },
                      {
                        "capecId": "CAPEC-61",
                        "rationale": "CAPEC-61 is the broader parent pattern for XSS attacks. It is included as a secondary mapping to cover the general class of the vulnerability. CAPEC-127 is the more precise match; CAPEC-61 is listed for completeness."
                      }
                    ],
                    "commit": "23b879073eefce37e1065295d180c4bea7cef95f",
                    "confidence": "high",
                    "credits": [
                      {
                        "lang": "en",
                        "type": "reporter",
                        "value": "Jeroen Pinoy"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "iglocska"
                      },
                      {
                        "lang": "en",
                        "type": "remediation developer",
                        "value": "Claude Fable 5.1"
                      }
                    ],
                    "cvssRationale": "AV:N: The vulnerability is exploitable over the network via a crafted URL. AC:L: No race conditions or special environment conditions are required; the attacker simply crafts a URL with a malicious object_type value. AT:N: No manipulation of the attack target is needed. PR:L: The victim must be authenticated to MISP to reach the AnalystData view. UI:A: The victim must actively navigate to the attacker-supplied URL (e.g., click a link), which constitutes active user interaction. VC:N, VI:N, VA:N: The vulnerable MISP server itself is not directly compromised; the impact is on the victim\u0027s browser session. SC:L: The attacker can read data available in the victim\u0027s browser context (cookies, session tokens, page content) but impact is limited to the current page. SI:L: The attacker can modify the rendered page or submit forms on behalf of the victim within the session. SA:N: No broader security impact on other systems is expected from this reflected XSS.",
                    "fixSummary": "The fix introduces two layers of defense. First, the viewForObject action now validates the object_type parameter against the AnalystData::valid_targets whitelist and rejects any value not in that list with a NotFoundException, preventing arbitrary strings from reaching the view layer. Second, the two output sinks in the Overmind thread.ctp template now apply the h() HTML-encoding function to the object type before interpolation into translated strings, ensuring that even if a valid type were to contain special characters, it would be rendered as inert text rather than executable markup.",
                    "generatedAt": "2026-09-22T12:33:44.255419Z",
                    "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": "4476bdd487c3b17c3cffff36a76763c107e8bf284095d61bd6860865ce8912e0",
                    "patchSummary": "In AnalystDataController.php, the patch adds an import of the AnalystData model and inserts a guard clause at the top of viewForObject that checks the $object_type parameter against AnalystData::valid_targets using a strict in_array comparison; if the value is not in the list, a NotFoundException is thrown. In thread.ctp, two occurrences of strtolower($objectType) passed directly into __() translation calls are wrapped with h() to HTML-encode the value before it is embedded in the rendered HTML output.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "23b879073eefce37e1065295d180c4bea7cef95f",
                        "patchSha256": "4476bdd487c3b17c3cffff36a76763c107e8bf284095d61bd6860865ce8912e0",
                        "source": "https://github.com/MISP/MISP/commit/23b879073.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/23b879073.patch",
                        "subject": "fix: [security] Reflected XSS via the object type in the"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/23b879073.patch",
                    "subject": "fix: [security] Reflected XSS via the object type in the",
                    "tagVersionBoundary": {
                      "commits_after_fix": 58,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-79",
                        "rationale": "The object_type URL parameter is reflected into HTML output without encoding, allowing script injection. This is a textbook reflected XSS."
                      },
                      {
                        "cweId": "CWE-116",
                        "rationale": "The view template interpolated the object type into translated strings without applying h() HTML encoding, which is the direct encoding failure that permits the XSS."
                      },
                      {
                        "cweId": "CWE-20",
                        "rationale": "The controller accepted any arbitrary string as the object_type parameter without validating it against the known set of valid analyst-data target types, allowing attacker-controlled data to reach the output layer."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20234"
            }
          ],
          "x_generator": {
            "engine": "Vulnogram 0.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95659",
        "datePublished": "2026-09-22T12:40:38.097Z",
        "dateReserved": "2026-09-22T12:40:33.071Z",
        "dateUpdated": "2026-09-22T15:34:41.995Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

    CVE-2026-95658 (GCVE-0-2026-95658)

    Vulnerability from cvelistv5 – Published: 2026-09-22 12:31 – Updated: 2026-09-22 15:35
    VLAI
    Title
    MISP CSRF vulnerability in workflow moduleStatelessExecution allows cross-site execution of workflow modules
    Summary
    MISP's WorkflowsController exposed the moduleStatelessExecution action in the Security component's unlockedActions list. In CakePHP, listing an action in unlockedActions disables both the CSRF token check and the field hash validation for that action. Because moduleStatelessExecution executes a workflow module's exec() method with caller-supplied input and parameters, the absence of CSRF protection allowed an attacker to craft a cross-site form post (or equivalent cross-origin request) that, when submitted by an authenticated site administrator, would cause the administrator's browser to invoke the action on the MISP instance.  The attacker could select any workflow module to execute, including action modules that write blocklist and warninglist entries, and supply arbitrary input and parameters of their choosing. This constitutes a cross-site request forgery (CSRF) vulnerability with high integrity impact on the MISP instance's security-related data.  The vulnerability was identified during an internal security review and was not externally reported. The fix is included in MISP v2.5.47.
    SSVC
    Exploitation: none Automatable: no Technical Impact: partial
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 15: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 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-22 12:15
    Model
    qwen3.8:27b
    Input
    https://github.com/MISP/MISP/commit/f05e0d1c2.patch 3f8a00ca2976…
    Confidence
    high
    Commit Subject Patch SHA-256
    f05e0d1c263b fix: [security] Keep the CSRF check on stateless workflow 3f8a00ca2976…
    Fix summary

    The moduleStatelessExecution action is removed from the unlockedActions list, restoring the CSRF token check. A new mechanism (_csrfTokenHeaderOnly) is introduced that enforces the CSRF token while exempting only the field hash, which the legitimate caller (the module dialog) cannot produce because it posts a hand-built object. The module dialog's AJAX request is updated to send the CSRF token in the X-CSRF-Token header, satisfying the token check without requiring a field hash.

    Patch summary

    In WorkflowsController::beforeFilter(), the line adding 'moduleStatelessExecution' to $this->Security->unlockedActions is replaced with a call to $this->_csrfTokenHeaderOnly(['moduleStatelessExecution']), which enforces CSRF token validation while waiving only the field hash requirement. In execute_module.ctp, the jQuery $.ajax() call is modified to include the header 'X-CSRF-Token' populated from window.csrfToken, so the legitimate client-side caller passes the token check via the header rather than a form field.

    CVSS rationale

    AV:N: The attack is delivered over the network via a malicious web page. AC:L: Crafting a cross-site form post is straightforward. AT:N: No special conditions or timing are required. PR:N: The attacker requires no account or privileges on the MISP instance. UI:A: The victim (a site admin) must actively visit the attacker-controlled page or click a link that triggers the form submission. VC:N: No confidentiality impact is evident. VI:H: The attacker can write arbitrary blocklist and warninglist entries, significantly compromising the integrity of MISP's security data. VA:N: No availability impact. SC/SI/SA:N: No evidence of impact on other systems beyond MISP itself.

    Weakness rationale
    • CWE-352 The vulnerable action was placed in unlockedActions, which disabled the CSRF token check. This allowed a cross-site form post to trigger a state-changing action (workflow module execution) on behalf of an authenticated administrator, which is the textbook definition of CSRF.
    Attack pattern rationale
    • CAPEC-124 The attack pattern described in the commit message is a cross-site form post that causes an authenticated site admin to execute a workflow module with attacker-chosen parameters. This maps directly to CAPEC-124, which describes an attacker exploiting the trust a web application places in a user's browser session to perform unauthorized actions. The mapping is confident because the commit message explicitly describes a cross-site form post bypassing CSRF protection.
    Assumptions to verify
    • The affected version range is inferred from the tag_version_boundary metadata (v2.5.47, 6 commits after fix), implying the fix is included in v2.5.47 and prior versions are affected. The exact introduction version of the vulnerable code is unknown.
    • UI:A is used because the CSRF attack requires the victim to actively navigate to the attacker's page or click a link; a purely passive load (e.g., embedded iframe auto-submit) would map to UI:P, but the commit message describes a 'cross-site form post' which typically requires at least a page visit.
    • SI:N is chosen because the evidence only demonstrates integrity impact on MISP's own blocklist and warninglist data; no evidence supports impact on downstream or external systems.
    • The CAPEC-124 mapping is confident based on the explicit description of a cross-site form post in the commit message.
    • The commit message states the issue was 'found during the internal review, not externally reported,' but does not explicitly name a finder; therefore no finder credit is assigned.
    • The _csrfTokenHeaderOnly method is referenced in the patch but its implementation is not shown; it is assumed to enforce CSRF token validation while exempting the field hash, as described in 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 5 9 high 6
    Show details on NVD website

    {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-95658",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-09-22T15:34:56.912472Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-09-22T15:35:08.313Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "modules": [
                "WorkflowsController",
                "Workflows module execution"
              ],
              "product": "MISP",
              "programFiles": [
                "app/Controller/WorkflowsController.php",
                "app/View/Elements/Workflows/execute_module.ctp"
              ],
              "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\u0027s WorkflowsController exposed the moduleStatelessExecution action in the Security component\u0027s unlockedActions list. In CakePHP, listing an action in unlockedActions disables both the CSRF token check and the field hash validation for that action. Because moduleStatelessExecution executes a workflow module\u0027s exec() method with caller-supplied input and parameters, the absence of CSRF protection allowed an attacker to craft a cross-site form post (or equivalent cross-origin request) that, when submitted by an authenticated site administrator, would cause the administrator\u0027s browser to invoke the action on the MISP instance.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe attacker could select any workflow module to execute, including action modules that write blocklist and warninglist entries, and supply arbitrary input and parameters of their choosing. This constitutes a cross-site request forgery (CSRF) vulnerability with high integrity impact on the MISP instance\u0027s security-related data.\u0026nbsp;\u003c/p\u003e\u003cp\u003eThe vulnerability was identified during an internal security review and was not externally reported. The fix is included in MISP v2.5.47.\u003c/p\u003e"
                }
              ],
              "value": "MISP\u0027s WorkflowsController exposed the moduleStatelessExecution action in the Security component\u0027s unlockedActions list. In CakePHP, listing an action in unlockedActions disables both the CSRF token check and the field hash validation for that action. Because moduleStatelessExecution executes a workflow module\u0027s exec() method with caller-supplied input and parameters, the absence of CSRF protection allowed an attacker to craft a cross-site form post (or equivalent cross-origin request) that, when submitted by an authenticated site administrator, would cause the administrator\u0027s browser to invoke the action on the MISP instance.\u00a0\n\nThe attacker could select any workflow module to execute, including action modules that write blocklist and warninglist entries, and supply arbitrary input and parameters of their choosing. This constitutes a cross-site request forgery (CSRF) vulnerability with high integrity impact on the MISP instance\u0027s security-related data.\u00a0\n\nThe vulnerability was identified during an internal security review and was not externally reported. The fix is included in MISP v2.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": 6.9,
                "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: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-22T12:31:23.222Z",
            "orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
            "shortName": "CIRCL"
          },
          "references": [
            {
              "name": "Security patch",
              "tags": [
                "patch"
              ],
              "url": "https://github.com/MISP/MISP/commit/f05e0d1c2"
            }
          ],
          "solutions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eThe moduleStatelessExecution action is removed from the unlockedActions list, restoring the CSRF token check. A new mechanism (_csrfTokenHeaderOnly) is introduced that enforces the CSRF token while exempting only the field hash, which the legitimate caller (the module dialog) cannot produce because it posts a hand-built object. The module dialog\u0027s AJAX request is updated to send the CSRF token in the X-CSRF-Token header, satisfying the token check without requiring a field hash.\u003c/p\u003e"
                }
              ],
              "value": "The moduleStatelessExecution action is removed from the unlockedActions list, restoring the CSRF token check. A new mechanism (_csrfTokenHeaderOnly) is introduced that enforces the CSRF token while exempting only the field hash, which the legitimate caller (the module dialog) cannot produce because it posts a hand-built object. The module dialog\u0027s AJAX request is updated to send the CSRF token in the X-CSRF-Token header, satisfying the token check without requiring a field hash."
            }
          ],
          "title": "MISP CSRF vulnerability in workflow moduleStatelessExecution allows cross-site execution of workflow modules",
          "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 range is inferred from the tag_version_boundary metadata (v2.5.47, 6 commits after fix), implying the fix is included in v2.5.47 and prior versions are affected. The exact introduction version of the vulnerable code is unknown.",
                      "UI:A is used because the CSRF attack requires the victim to actively navigate to the attacker\u0027s page or click a link; a purely passive load (e.g., embedded iframe auto-submit) would map to UI:P, but the commit message describes a \u0027cross-site form post\u0027 which typically requires at least a page visit.",
                      "SI:N is chosen because the evidence only demonstrates integrity impact on MISP\u0027s own blocklist and warninglist data; no evidence supports impact on downstream or external systems.",
                      "The CAPEC-124 mapping is confident based on the explicit description of a cross-site form post in the commit message.",
                      "The commit message states the issue was \u0027found during the internal review, not externally reported,\u0027 but does not explicitly name a finder; therefore no finder credit is assigned.",
                      "The _csrfTokenHeaderOnly method is referenced in the patch but its implementation is not shown; it is assumed to enforce CSRF token validation while exempting the field hash, as described in the commit message."
                    ],
                    "capecRationale": [
                      {
                        "capecId": "CAPEC-124",
                        "rationale": "The attack pattern described in the commit message is a cross-site form post that causes an authenticated site admin to execute a workflow module with attacker-chosen parameters. This maps directly to CAPEC-124, which describes an attacker exploiting the trust a web application places in a user\u0027s browser session to perform unauthorized actions. The mapping is confident because the commit message explicitly describes a cross-site form post bypassing CSRF protection."
                      }
                    ],
                    "commit": "f05e0d1c263b211108644fe6f1600ad7fde9b915",
                    "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 via a malicious web page. AC:L: Crafting a cross-site form post is straightforward. AT:N: No special conditions or timing are required. PR:N: The attacker requires no account or privileges on the MISP instance. UI:A: The victim (a site admin) must actively visit the attacker-controlled page or click a link that triggers the form submission. VC:N: No confidentiality impact is evident. VI:H: The attacker can write arbitrary blocklist and warninglist entries, significantly compromising the integrity of MISP\u0027s security data. VA:N: No availability impact. SC/SI/SA:N: No evidence of impact on other systems beyond MISP itself.",
                    "fixSummary": "The moduleStatelessExecution action is removed from the unlockedActions list, restoring the CSRF token check. A new mechanism (_csrfTokenHeaderOnly) is introduced that enforces the CSRF token while exempting only the field hash, which the legitimate caller (the module dialog) cannot produce because it posts a hand-built object. The module dialog\u0027s AJAX request is updated to send the CSRF token in the X-CSRF-Token header, satisfying the token check without requiring a field hash.",
                    "generatedAt": "2026-09-22T12:15:58.553959Z",
                    "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": "3f8a00ca29761ed6a3986633e60ec67a964e3bfc1dc1e2631a2c2d80df827d30",
                    "patchSummary": "In WorkflowsController::beforeFilter(), the line adding \u0027moduleStatelessExecution\u0027 to $this-\u003eSecurity-\u003eunlockedActions is replaced with a call to $this-\u003e_csrfTokenHeaderOnly([\u0027moduleStatelessExecution\u0027]), which enforces CSRF token validation while waiving only the field hash requirement. In execute_module.ctp, the jQuery $.ajax() call is modified to include the header \u0027X-CSRF-Token\u0027 populated from window.csrfToken, so the legitimate client-side caller passes the token check via the header rather than a form field.",
                    "patchTruncated": false,
                    "patches": [
                      {
                        "commit": "f05e0d1c263b211108644fe6f1600ad7fde9b915",
                        "patchSha256": "3f8a00ca29761ed6a3986633e60ec67a964e3bfc1dc1e2631a2c2d80df827d30",
                        "source": "https://github.com/MISP/MISP/commit/f05e0d1c2.patch",
                        "sourceUrl": "https://github.com/MISP/MISP/commit/f05e0d1c2.patch",
                        "subject": "fix: [security] Keep the CSRF check on stateless workflow"
                      }
                    ],
                    "source": "https://github.com/MISP/MISP/commit/f05e0d1c2.patch",
                    "subject": "fix: [security] Keep the CSRF check on stateless workflow",
                    "tagVersionBoundary": {
                      "commits_after_fix": 6,
                      "repository": "https://github.com/MISP/MISP",
                      "tag": "v2.5.47",
                      "version": "2.5.47",
                      "version_type": "semver"
                    },
                    "weaknessRationale": [
                      {
                        "cweId": "CWE-352",
                        "rationale": "The vulnerable action was placed in unlockedActions, which disabled the CSRF token check. This allowed a cross-site form post to trigger a state-changing action (workflow module execution) on behalf of an authenticated administrator, which is the textbook definition of CSRF."
                      }
                    ]
                  }
                }
              },
              "recordType": "advisory",
              "vulnId": "GCVE-1-2026-20261"
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
        "assignerShortName": "CIRCL",
        "cveId": "CVE-2026-95658",
        "datePublished": "2026-09-22T12:31:23.222Z",
        "dateReserved": "2026-09-22T12:31:20.344Z",
        "dateUpdated": "2026-09-22T15:35:08.313Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }

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