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