Action not permitted
Modal body text goes here.
Modal Title
Modal Body
WID-SEC-W-2026-3411
Vulnerability from csaf_certbund - Published: 2026-09-15 22:00 - Updated: 2026-09-15 22:00| Product | Identifier | Version | Remediation |
|---|---|---|---|
|
Open Source MISP <2.5.46
Open Source / MISP
|
<2.5.46 |
{
"document": {
"aggregate_severity": {
"text": "mittel"
},
"category": "csaf_base",
"csaf_version": "2.0",
"distribution": {
"tlp": {
"label": "WHITE",
"url": "https://www.first.org/tlp/"
}
},
"lang": "de-DE",
"notes": [
{
"category": "legal_disclaimer",
"text": "Das BSI ist als Anbieter f\u00fcr die eigenen, zur Nutzung bereitgestellten Inhalte nach den allgemeinen Gesetzen verantwortlich. Nutzerinnen und Nutzer sind jedoch daf\u00fcr verantwortlich, die Verwendung und/oder die Umsetzung der mit den Inhalten bereitgestellten Informationen sorgf\u00e4ltig im Einzelfall zu pr\u00fcfen."
},
{
"category": "description",
"text": "MISP ist eine Open-Source-Plattform f\u00fcr den Informationsaustausch \u00fcber Bedrohungen.",
"title": "Produktbeschreibung"
},
{
"category": "summary",
"text": "Ein Angreifer kann mehrere Schwachstellen in MISP ausnutzen, um Dateien zu manipulieren, Sicherheitsma\u00dfnahmen zu umgehen oder einen Denial-of-Service-Zustand auszul\u00f6sen.",
"title": "Angriff"
},
{
"category": "general",
"text": "- Sonstiges\n- UNIX",
"title": "Betroffene Betriebssysteme"
}
],
"publisher": {
"category": "other",
"contact_details": "csaf-provider@cert-bund.de",
"name": "Bundesamt f\u00fcr Sicherheit in der Informationstechnik",
"namespace": "https://www.bsi.bund.de"
},
"references": [
{
"category": "self",
"summary": "WID-SEC-W-2026-3411 - CSAF Version",
"url": "https://wid.cert-bund.de/.well-known/csaf/white/2026/wid-sec-w-2026-3411.json"
},
{
"category": "self",
"summary": "WID-SEC-2026-3411 - Portal Version",
"url": "https://wid.cert-bund.de/portal/wid/securityadvisory?name=WID-SEC-2026-3411"
},
{
"category": "external",
"summary": "GitHub Advisory Database vom 2026-09-15",
"url": "https://github.com/advisories/GHSA-6WVJ-VM6H-RF24"
},
{
"category": "external",
"summary": "GitHub Advisory Database vom 2026-09-15",
"url": "https://github.com/advisories/GHSA-QX5F-75HG-MF2C"
},
{
"category": "external",
"summary": "GitHub Advisory Database vom 2026-09-15",
"url": "https://github.com/advisories/GHSA-F6C4-MG5X-232X"
},
{
"category": "external",
"summary": "GitHub Advisory Database vom 2026-09-15",
"url": "https://github.com/advisories/GHSA-RR6Q-FMV4-P23M"
},
{
"category": "external",
"summary": "EU Vulnerability Databse vom 2026-09-15",
"url": "https://euvd.enisa.europa.eu/enisa/EUVD-2026-78348"
},
{
"category": "external",
"summary": "EU Vulnerability Databse vom 2026-09-15",
"url": "https://euvd.enisa.europa.eu/enisa/EUVD-2026-78350"
},
{
"category": "external",
"summary": "EU Vulnerability Databse vom 2026-09-15",
"url": "https://euvd.enisa.europa.eu/enisa/EUVD-2026-78432"
},
{
"category": "external",
"summary": "EU Vulnerability Databse vom 2026-09-15",
"url": "https://euvd.enisa.europa.eu/enisa/EUVD-2026-78439"
}
],
"source_lang": "en-US",
"title": "MISP: Mehrere Schwachstellen",
"tracking": {
"current_release_date": "2026-09-15T22:00:00.000+00:00",
"generator": {
"date": "2026-09-16T11:36:33.152+00:00",
"engine": {
"name": "BSI-WID",
"version": "1.6.0"
}
},
"id": "WID-SEC-W-2026-3411",
"initial_release_date": "2026-09-15T22:00:00.000+00:00",
"revision_history": [
{
"date": "2026-09-15T22:00:00.000+00:00",
"number": "1",
"summary": "Initiale Fassung"
}
],
"status": "final",
"version": "1"
}
},
"product_tree": {
"branches": [
{
"branches": [
{
"branches": [
{
"category": "product_version_range",
"name": "\u003c2.5.46",
"product": {
"name": "Open Source MISP \u003c2.5.46",
"product_id": "T059651"
}
},
{
"category": "product_version",
"name": "2.5.46",
"product": {
"name": "Open Source MISP 2.5.46",
"product_id": "T059651-fixed",
"product_identification_helper": {
"cpe": "cpe:/a:misp:misp:2.5.46"
}
}
}
],
"category": "product_name",
"name": "MISP"
}
],
"category": "vendor",
"name": "Open Source"
}
]
},
"vulnerabilities": [
{
"cve": "CVE-2026-91857",
"product_status": {
"known_affected": [
"T059651"
]
},
"release_date": "2026-09-15T22:00:00.000+00:00",
"title": "CVE-2026-91857"
},
{
"cve": "CVE-2026-91859",
"product_status": {
"known_affected": [
"T059651"
]
},
"release_date": "2026-09-15T22:00:00.000+00:00",
"title": "CVE-2026-91859"
},
{
"cve": "CVE-2026-92002",
"product_status": {
"known_affected": [
"T059651"
]
},
"release_date": "2026-09-15T22:00:00.000+00:00",
"title": "CVE-2026-92002"
},
{
"cve": "CVE-2026-92003",
"product_status": {
"known_affected": [
"T059651"
]
},
"release_date": "2026-09-15T22:00:00.000+00:00",
"title": "CVE-2026-92003"
}
]
}
CVE-2026-91857 (GCVE-0-2026-91857)
Vulnerability from cvelistv5 – Published: 2026-09-15 09:14 – Updated: 2026-09-15 13:19- CWE-352 - Cross-Site Request Forgery (CSRF)
| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/b4a5486b5 | patch |
qwen3.8:27b
advisory
bcp-05-x-01bcp-05-x-02
Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.
| Model | Source | Identifier |
|---|---|---|
| qwen3.8:27b | ollama | qwen3.8:27b |
- Generator
-
patch2vuln.pyon 2026-09-15 09:10 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/b4a5486b5.patch
adc31514b96a… - Confidence
- high
| Commit | Subject | Patch SHA-256 |
|---|---|---|
b4a5486b5ddd
|
fix: [security] Require POST for four remaining | adc31514b96a… |
Fix summary
The vulnerability is remediated by restricting all four state-changing actions to accept only POST requests via the CakePHP allowMethod() guard. Additionally, the client-side JavaScript for purgeUnusedPictures is updated to issue a POST request with the page's CSRF token in the X-CSRF-Token header, and a beforeFilter() hook is added to EventReportsController to configure header-only CSRF token validation for that specific action, since it is invoked via hand-built AJAX rather than a rendered form.
Patch summary
Adds $this->request->allowMethod(['post']) to purgeUnusedPictures, enableNoticelist, removeOrphanedCorrelations, and rebuildRedis. Adds a beforeFilter() method to EventReportsController calling _csrfTokenHeaderOnly(['purgeUnusedPictures']) to permit CSRF token validation via the X-CSRF-Token header. Updates the managed_imported_pictures.ctp view to replace $.get() with $.ajax() using type 'post' and the X-CSRF-Token header. Adds REST response handling and flash/redirect logic to rebuildRedis for consistency with other actions.
CVSS rationale
AV:N: The attack is delivered over the network (e.g., a malicious link or page). AC:L: No special race conditions or complex setup are required; a simple GET URL suffices. AT:N: No prior compromise or manipulation of the target system is needed. PR:L: The attacker requires the victim to be an authenticated MISP user; the attacker themselves need not be authenticated. UI:A: The victim must actively interact (click a link or navigate to a crafted page) to trigger the forged request. VC:N: No confidential data is exposed by the affected actions. VI:L: Integrity impact is low; the actions cause limited state changes (deleting unused pictures, toggling a noticelist, removing orphaned correlations, rebuilding a cache) rather than corrupting critical data. VA:N: No meaningful availability impact; the actions do not cause denial of service. SC/SI/SA:N: No impact on subsequent systems.
Weakness rationale
- CWE-352 The root cause is that state-changing endpoints accept GET requests, which are not protected by the framework's CSRF token mechanism. This allows an attacker to forge requests on behalf of an authenticated user via links, auto-loading resources, or other passive/active user interactions, which is the defining characteristic of CSRF.
Assumptions to verify
- The fix commit is 196 commits before the v2.5.46 tag, implying the vulnerability existed in versions prior to v2.5.46; exact affected version range is not explicitly stated in the patch.
- MISP requires user authentication to access the affected endpoints; the PR:L assumption is based on MISP's standard authentication model.
- The CSRF token mechanism in CakePHP (the framework used by MISP) is assumed to protect POST requests but not GET requests, consistent with the patch's own comments.
- The vulnerability was found during internal review and was not externally reported, per the commit message.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
7 | 9 | high | 4 |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-91857",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-15T13:10:25.729586Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-15T13:19:25.134Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"modules": [
"EventReportsController",
"NoticelistsController",
"ServersController",
"WorkflowsController"
],
"product": "MISP",
"programFiles": [
"app/Controller/EventReportsController.php",
"app/Controller/NoticelistsController.php",
"app/Controller/ServersController.php",
"app/Controller/WorkflowsController.php",
"app/View/EventReports/managed_imported_pictures.ctp"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.46",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP expose several state-changing controller actions without restricting them to POST.\u003c/p\u003e\n\u003cp\u003eThe affected actions are:\u003c/p\u003e\u003cp\u003e\u003c/p\u003e\u003ccode\u003e\u2003-\u0026nbsp;EventReportsController::purgeUnusedPictures()\u003c/code\u003e\n\u003cbr\u003e\u003ccode\u003e\u2003-\u0026nbsp;NoticelistsController::enableNoticelist()\u003c/code\u003e\n\u003cbr\u003e\u003ccode\u003e\u2003-\u0026nbsp;ServersController::removeOrphanedCorrelations()\u003c/code\u003e\n\u003cbr\u003e\u003cdiv\u003e\u003ccode\u003e\u2003- WorkflowsController::rebuildRedis()\u003c/code\u003e\u003c/div\u003e\u003cdiv\u003e\u003ccode\u003e\u003cbr\u003e\u003c/code\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003e\u003c/code\u003e\u003c/p\u003e\u003cp\u003eThe patch adds \u003ccode\u003eallowMethod([\u0027post\u0027])\u003c/code\u003e to each action, preventing them from being triggered through ordinary GET requests.\u003c/p\u003e\n\u003cp\u003eFor \u003ccode\u003epurgeUnusedPictures()\u003c/code\u003e, the corresponding UI previously used \u003ccode\u003e$.get()\u003c/code\u003e. The fix converts that request to POST and supplies \u003ccode\u003eX-CSRF-Token\u003c/code\u003e, while the controller enables header-only CSRF validation for that AJAX action.\u003c/p\u003e\n\u003cp\u003eBecause GET requests can be induced cross-origin through links, images, redirects, or navigation, accepting GET for these state-changing operations can let an attacker trigger them using the authenticated victim\u0027s session.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003c/p\u003e"
}
],
"value": "Affected versions of MISP expose several state-changing controller actions without restricting them to POST.\n\n\nThe affected actions are:\n\n\n\n\u2003-\u00a0EventReportsController::purgeUnusedPictures()\n\n\u2003-\u00a0NoticelistsController::enableNoticelist()\n\n\u2003-\u00a0ServersController::removeOrphanedCorrelations()\n\n\u2003- WorkflowsController::rebuildRedis()\n\n\n\n\n\n\nThe patch adds allowMethod([\u0027post\u0027]) to each action, preventing them from being triggered through ordinary GET requests.\n\n\nFor purgeUnusedPictures(), the corresponding UI previously used $.get(). The fix converts that request to POST and supplies X-CSRF-Token, while the controller enables header-only CSRF validation for that AJAX action.\n\n\nBecause GET requests can be induced cross-origin through links, images, redirects, or navigation, accepting GET for these state-changing operations can let an attacker trigger them using the authenticated victim\u0027s session.\n\nVersion affected: \u22642.5.45"
}
],
"impacts": [
{
"capecId": "CAPEC-62",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-62 Cross Site Request Forgery"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 5.3,
"baseSeverity": "MEDIUM",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-352",
"description": "CWE-352 Cross-Site Request Forgery (CSRF)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-15T09:14:43.722Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/b4a5486b5"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe vulnerability is remediated by restricting all four state-changing actions to accept only POST requests via the CakePHP allowMethod() guard. Additionally, the client-side JavaScript for purgeUnusedPictures is updated to issue a POST request with the page\u0027s CSRF token in the X-CSRF-Token header, and a beforeFilter() hook is added to EventReportsController to configure header-only CSRF token validation for that specific action, since it is invoked via hand-built AJAX rather than a rendered form.\u003c/p\u003e"
}
],
"value": "The vulnerability is remediated by restricting all four state-changing actions to accept only POST requests via the CakePHP allowMethod() guard. Additionally, the client-side JavaScript for purgeUnusedPictures is updated to issue a POST request with the page\u0027s CSRF token in the X-CSRF-Token header, and a beforeFilter() hook is added to EventReportsController to configure header-only CSRF token validation for that specific action, since it is invoked via hand-built AJAX rather than a rendered form."
}
],
"title": "MISP: State-changing actions accessible via GET request enabling CSRF",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "review",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The fix commit is 196 commits before the v2.5.46 tag, implying the vulnerability existed in versions prior to v2.5.46; exact affected version range is not explicitly stated in the patch.",
"MISP requires user authentication to access the affected endpoints; the PR:L assumption is based on MISP\u0027s standard authentication model.",
"The CSRF token mechanism in CakePHP (the framework used by MISP) is assumed to protect POST requests but not GET requests, consistent with the patch\u0027s own comments.",
"The vulnerability was found during internal review and was not externally reported, per the commit message."
],
"commit": "b4a5486b5ddd078dc11248cbd7f21725fb1f43cf",
"confidence": "high",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"cvssRationale": "AV:N: The attack is delivered over the network (e.g., a malicious link or page). AC:L: No special race conditions or complex setup are required; a simple GET URL suffices. AT:N: No prior compromise or manipulation of the target system is needed. PR:L: The attacker requires the victim to be an authenticated MISP user; the attacker themselves need not be authenticated. UI:A: The victim must actively interact (click a link or navigate to a crafted page) to trigger the forged request. VC:N: No confidential data is exposed by the affected actions. VI:L: Integrity impact is low; the actions cause limited state changes (deleting unused pictures, toggling a noticelist, removing orphaned correlations, rebuilding a cache) rather than corrupting critical data. VA:N: No meaningful availability impact; the actions do not cause denial of service. SC/SI/SA:N: No impact on subsequent systems.",
"draft": false,
"fixSummary": "The vulnerability is remediated by restricting all four state-changing actions to accept only POST requests via the CakePHP allowMethod() guard. Additionally, the client-side JavaScript for purgeUnusedPictures is updated to issue a POST request with the page\u0027s CSRF token in the X-CSRF-Token header, and a beforeFilter() hook is added to EventReportsController to configure header-only CSRF token validation for that specific action, since it is invoked via hand-built AJAX rather than a rendered form.",
"generatedAt": "2026-09-15T09:10:36.581856Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 9,
"assumptionCount": 4,
"confidence": "high",
"model": "qwen3.8:27b",
"score": 7
}
],
"selectedModel": "qwen3.8:27b",
"selectionMethod": "deterministic-consensus-v1",
"selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
},
"patchSha256": "adc31514b96a99a411ca1ed5a31abf99642d19de3a09f536e62310b298d2552b",
"patchSummary": "Adds $this-\u003erequest-\u003eallowMethod([\u0027post\u0027]) to purgeUnusedPictures, enableNoticelist, removeOrphanedCorrelations, and rebuildRedis. Adds a beforeFilter() method to EventReportsController calling _csrfTokenHeaderOnly([\u0027purgeUnusedPictures\u0027]) to permit CSRF token validation via the X-CSRF-Token header. Updates the managed_imported_pictures.ctp view to replace $.get() with $.ajax() using type \u0027post\u0027 and the X-CSRF-Token header. Adds REST response handling and flash/redirect logic to rebuildRedis for consistency with other actions.",
"patchTruncated": false,
"patches": [
{
"commit": "b4a5486b5ddd078dc11248cbd7f21725fb1f43cf",
"patchSha256": "adc31514b96a99a411ca1ed5a31abf99642d19de3a09f536e62310b298d2552b",
"source": "https://github.com/MISP/MISP/commit/b4a5486b5.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/b4a5486b5.patch",
"subject": "fix: [security] Require POST for four remaining"
}
],
"source": "https://github.com/MISP/MISP/commit/b4a5486b5.patch",
"subject": "fix: [security] Require POST for four remaining",
"tagVersionBoundary": {
"commits_after_fix": 196,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.46",
"version": "2.5.46",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-352",
"rationale": "The root cause is that state-changing endpoints accept GET requests, which are not protected by the framework\u0027s CSRF token mechanism. This allows an attacker to forge requests on behalf of an authenticated user via links, auto-loading resources, or other passive/active user interactions, which is the defining characteristic of CSRF."
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20242"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-91857",
"datePublished": "2026-09-15T09:14:43.722Z",
"dateReserved": "2026-09-15T09:14:39.778Z",
"dateUpdated": "2026-09-15T13:19:25.134Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-91859 (GCVE-0-2026-91859)
Vulnerability from cvelistv5 – Published: 2026-09-15 09:26 – Updated: 2026-09-15 13:05| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/0dae5c072 | patch |
qwen3.8:27b
advisory
bcp-05-x-01bcp-05-x-02
Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.
| Model | Source | Identifier |
|---|---|---|
| qwen3.8:27b | ollama | qwen3.8:27b |
- Generator
-
patch2vuln.pyon 2026-09-15 09:22 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/0dae5c072.patch
4eeecd38b5b8… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
0dae5c072d86
|
fix: [logging] Stop the error controller overwriting the | 4eeecd38b5b8… |
Fix summary
The fix introduces a per-instance boolean guard ($deferredWriterRegistered) in the AccessLog model so that logRequest() returns early on the second beforeFilter pass, preventing the error controller from overwriting the original request's log entry. Additionally, a $this->create() call is added before $this->save() in saveOnShutdown() to ensure each save issues an INSERT rather than an UPDATE, providing defense-in-depth against accidental row mutation.
Patch summary
In app/Model/AccessLog.php: (1) Added a private $deferredWriterRegistered property (default false). (2) At the top of logRequest(), added an early-return guard: if $this->deferredWriterRegistered is true, return true immediately. (3) Set $this->deferredWriterRegistered = true immediately before register_shutdown_function() so the flag is latched on the first pass. (4) In saveOnShutdown(), added $this->create() before $this->save() to force a new-row INSERT and prevent the model from issuing an UPDATE against a previously saved id. (5) Added explanatory doc-comments describing the double-beforeFilter mechanism and the ClassRegistry single-instance behavior.
CVSS rationale
The vulnerability is exploitable over the network (AV:N) with low complexity (AC:L) by any authenticated user who can trigger an unhandled exception (e.g., via a malformed request). No attack target manipulation is required (AT:N). Low privileges are sufficient (PR:L) as any authenticated MISP user can cause an error. No user interaction is needed (UI:N). There is no direct confidentiality or availability impact on MISP itself (VC:N, VA:N). The integrity impact is low (VI:L) because the access-log row is overwritten with incorrect metrics rather than deleted, and only requests that trigger exceptions are affected. No secondary impacts are identified (SC:N, SI:N, SA:N). The overall severity is low, reflecting a logging-integrity weakness that degrades audit reliability but does not directly expose data or disrupt service.
Weakness rationale
- CWE-778 The access-log mechanism fails to preserve accurate, immutable records of each request. The second beforeFilter pass overwrites the first pass's data, so the log does not faithfully reflect the actual request's duration, query count, memory usage, or SQL activity. This constitutes insufficient logging because the security-relevant audit data is corrupted rather than simply missing.
- CWE-223 The genuine request metrics (duration, query count, memory, query log) are replaced by the error controller's metrics, effectively omitting the security-relevant information that the original request produced. This is a secondary mapping; CWE-778 is the primary weakness.
Assumptions to verify
- MISP requires authentication for the operations that produce access-log entries; PR:L assumes a low-privilege authenticated user can trigger an unhandled exception.
- The affected version range is inferred from the tag_version_boundary (v2.5.46, 190 commits after fix); the exact first-affected and last-affected versions are not stated in the patch metadata.
- The security impact is limited to log-integrity degradation; no direct data exfiltration, privilege escalation, or denial-of-service is evidenced by the patch.
- The double beforeFilter invocation is a CakePHP framework behavior (ExceptionRenderer::_getController calling startupProcess on CakeErrorController) and is not itself a MISP vulnerability, but MISP's AccessLog model did not guard against it.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
6 | 9 | medium | 4 |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-91859",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-15T13:04:57.329720Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-15T13:05:17.132Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"modules": [
"app/Model/AccessLog.php"
],
"product": "MISP",
"programFiles": [
"app/Model/AccessLog.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.46",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP can record incorrect access-log data for requests that terminate in an exception.\u003c/p\u003e\n\u003cp\u003eBecause \u003ccode\u003eCakeErrorController\u003c/code\u003e extends \u003ccode\u003eAppController\u003c/code\u003e, exception rendering runs the application startup path a second time. As a result, \u003ccode\u003e__accessMonitor()\u003c/code\u003e calls \u003ccode\u003eAccessLog::logRequest()\u003c/code\u003e twice for one HTTP request. The second deferred writer measures the error-controller execution instead of the original request and can overwrite the row created by the first pass. The corrupted fields include request duration, SQL query count, memory usage, and potentially the recorded query log.\u003c/p\u003e\n\u003cp\u003eThe bug was masked because the same model instance retained the ID of the first saved row, causing the later save to issue an \u003ccode\u003eUPDATE\u003c/code\u003e rather than insert an obvious duplicate row.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003c/p\u003e"
}
],
"value": "Affected versions of MISP can record incorrect access-log data for requests that terminate in an exception.\n\n\nBecause CakeErrorController extends AppController, exception rendering runs the application startup path a second time. As a result, __accessMonitor() calls AccessLog::logRequest() twice for one HTTP request. The second deferred writer measures the error-controller execution instead of the original request and can overwrite the row created by the first pass. The corrupted fields include request duration, SQL query count, memory usage, and potentially the recorded query log.\n\n\nThe bug was masked because the same model instance retained the ID of the first saved row, causing the later save to issue an UPDATE rather than insert an obvious duplicate row.\n\nVersion affected: \u22642.5.45"
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 5.3,
"baseSeverity": "MEDIUM",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-778",
"description": "CWE-778 Insufficient Logging",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-223",
"description": "CWE-223 Omission of Security-relevant Information in Logs",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-15T09:26:35.198Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/0dae5c072"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe fix introduces a per-instance boolean guard ($deferredWriterRegistered) in the AccessLog model so that logRequest() returns early on the second beforeFilter pass, preventing the error controller from overwriting the original request\u0027s log entry. Additionally, a $this-\u0026gt;create() call is added before $this-\u0026gt;save() in saveOnShutdown() to ensure each save issues an INSERT rather than an UPDATE, providing defense-in-depth against accidental row mutation.\u003c/p\u003e"
}
],
"value": "The fix introduces a per-instance boolean guard ($deferredWriterRegistered) in the AccessLog model so that logRequest() returns early on the second beforeFilter pass, preventing the error controller from overwriting the original request\u0027s log entry. Additionally, a $this-\u003ecreate() call is added before $this-\u003esave() in saveOnShutdown() to ensure each save issues an INSERT rather than an UPDATE, providing defense-in-depth against accidental row mutation."
}
],
"title": "MISP Access Log Entry Overwritten by Error Controller\u0027s Second beforeFilter Pass",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "review",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"MISP requires authentication for the operations that produce access-log entries; PR:L assumes a low-privilege authenticated user can trigger an unhandled exception.",
"The affected version range is inferred from the tag_version_boundary (v2.5.46, 190 commits after fix); the exact first-affected and last-affected versions are not stated in the patch metadata.",
"The security impact is limited to log-integrity degradation; no direct data exfiltration, privilege escalation, or denial-of-service is evidenced by the patch.",
"The double beforeFilter invocation is a CakePHP framework behavior (ExceptionRenderer::_getController calling startupProcess on CakeErrorController) and is not itself a MISP vulnerability, but MISP\u0027s AccessLog model did not guard against it."
],
"commit": "0dae5c072d86e62140c385cf507135f196415fa6",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"cvssRationale": "The vulnerability is exploitable over the network (AV:N) with low complexity (AC:L) by any authenticated user who can trigger an unhandled exception (e.g., via a malformed request). No attack target manipulation is required (AT:N). Low privileges are sufficient (PR:L) as any authenticated MISP user can cause an error. No user interaction is needed (UI:N). There is no direct confidentiality or availability impact on MISP itself (VC:N, VA:N). The integrity impact is low (VI:L) because the access-log row is overwritten with incorrect metrics rather than deleted, and only requests that trigger exceptions are affected. No secondary impacts are identified (SC:N, SI:N, SA:N). The overall severity is low, reflecting a logging-integrity weakness that degrades audit reliability but does not directly expose data or disrupt service.",
"draft": false,
"fixSummary": "The fix introduces a per-instance boolean guard ($deferredWriterRegistered) in the AccessLog model so that logRequest() returns early on the second beforeFilter pass, preventing the error controller from overwriting the original request\u0027s log entry. Additionally, a $this-\u003ecreate() call is added before $this-\u003esave() in saveOnShutdown() to ensure each save issues an INSERT rather than an UPDATE, providing defense-in-depth against accidental row mutation.",
"generatedAt": "2026-09-15T09:22:08.485154Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 9,
"assumptionCount": 4,
"confidence": "medium",
"model": "qwen3.8:27b",
"score": 6
}
],
"selectedModel": "qwen3.8:27b",
"selectionMethod": "deterministic-consensus-v1",
"selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
},
"patchSha256": "4eeecd38b5b824e3c5c1ae20886e62534ebed473410f59bea7276f83b32d4051",
"patchSummary": "In app/Model/AccessLog.php: (1) Added a private $deferredWriterRegistered property (default false). (2) At the top of logRequest(), added an early-return guard: if $this-\u003edeferredWriterRegistered is true, return true immediately. (3) Set $this-\u003edeferredWriterRegistered = true immediately before register_shutdown_function() so the flag is latched on the first pass. (4) In saveOnShutdown(), added $this-\u003ecreate() before $this-\u003esave() to force a new-row INSERT and prevent the model from issuing an UPDATE against a previously saved id. (5) Added explanatory doc-comments describing the double-beforeFilter mechanism and the ClassRegistry single-instance behavior.",
"patchTruncated": false,
"patches": [
{
"commit": "0dae5c072d86e62140c385cf507135f196415fa6",
"patchSha256": "4eeecd38b5b824e3c5c1ae20886e62534ebed473410f59bea7276f83b32d4051",
"source": "https://github.com/MISP/MISP/commit/0dae5c072.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/0dae5c072.patch",
"subject": "fix: [logging] Stop the error controller overwriting the"
}
],
"source": "https://github.com/MISP/MISP/commit/0dae5c072.patch",
"subject": "fix: [logging] Stop the error controller overwriting the",
"tagVersionBoundary": {
"commits_after_fix": 190,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.46",
"version": "2.5.46",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-778",
"rationale": "The access-log mechanism fails to preserve accurate, immutable records of each request. The second beforeFilter pass overwrites the first pass\u0027s data, so the log does not faithfully reflect the actual request\u0027s duration, query count, memory usage, or SQL activity. This constitutes insufficient logging because the security-relevant audit data is corrupted rather than simply missing."
},
{
"cweId": "CWE-223",
"rationale": "The genuine request metrics (duration, query count, memory, query log) are replaced by the error controller\u0027s metrics, effectively omitting the security-relevant information that the original request produced. This is a secondary mapping; CWE-778 is the primary weakness."
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20138"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-91859",
"datePublished": "2026-09-15T09:26:35.198Z",
"dateReserved": "2026-09-15T09:26:32.260Z",
"dateUpdated": "2026-09-15T13:05:17.132Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-92002 (GCVE-0-2026-92002)
Vulnerability from cvelistv5 – Published: 2026-09-15 11:24 – Updated: 2026-09-15 12:09- CWE-778 - Insufficient Logging
| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/a39b25d2f | patch |
qwen3.8:27b
advisory
bcp-05-x-01bcp-05-x-02
Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.
| Model | Source | Identifier |
|---|---|---|
| qwen3.8:27b | ollama | qwen3.8:27b |
- Generator
-
patch2vuln.pyon 2026-09-15 09:34 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/a39b25d2f.patch
ab1b5a5a68cf… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
a39b25d2f141
|
fix: [logging] Log auth failures when the throttle cannot | ab1b5a5a68cf… |
Fix summary
The _shouldLog() method now explicitly checks whether the Redis connection is available before attempting to use it. If setupRedis() returns false, the method immediately returns true, causing every authentication-failure event to be logged. This converts the previous fail-closed behavior (silence on dependency failure) into a fail-open behavior for security logging (log everything when the throttle state is unavailable), ensuring that a Redis outage cannot be used to suppress the audit trail of failed authentication attempts.
Patch summary
In app/Controller/AppController.php, the _shouldLog() method was restructured: a new early-return guard "if (!$redis) { return true; }" was inserted immediately after the setupRedis() call, so that an unavailable Redis connection causes all auth-failure events to be logged. The subsequent throttle check was simplified to "if (!$redis->exists(...))" since the null case is already handled. Additionally, a block of commented-out Redis throttle code in the afterFilter() method (lines referencing misp:auth_fail_throttling) was removed as dead code.
CVSS rationale
The vulnerability is reachable over the network (AV:N) because MISP is a web application. Attack complexity is High (AC:H) because exploitation requires the Redis instance to be specifically unavailable at the time authentication failures occur; it is not a simple request. No attack target is required (AT:N). No privileges are needed (PR:N) because the suppressed logs pertain to unauthenticated authentication-failure events. No user interaction is required (UI:N). There is no direct confidentiality or integrity impact on the MISP data store (VC:N, VI:N). The availability impact is Low (VA:L) because the security-logging/audit function is unavailable during the Redis outage, impairing detection and forensic capabilities, but the core MISP service remains operational. No cross-scope impacts (SC:N, SI:N, SA:N).
Weakness rationale
- CWE-778 The system fails to record security-relevant events (authentication failures) when a supporting dependency (Redis) is unavailable. The logging path silently drops all audit entries under a specific operational condition, which is a textbook case of insufficient logging of security events.
Assumptions to verify
- The affected version range is inferred from the tag_version_boundary metadata (v2.5.46 with 189 commits after the fix), suggesting the fix landed before the v2.5.46 release; exact affected version boundaries are not explicitly stated in the patch.
- The CVSS availability impact (VA:L) reflects the loss of the security-logging function rather than a denial of service against the MISP application itself.
- The patch does not indicate whether the Redis throttle was the sole mechanism for auth-failure logging or whether a fallback file-based logger existed; the analysis assumes the Redis-gated path was the primary logging path for auth failures.
- The commit date (2 Sep 2026) is taken at face value from the patch metadata.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
6 | 9 | medium | 4 |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-92002",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-15T12:00:12.607042Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-15T12:09:48.540Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"modules": [
"app/Controller/AppController.php"
],
"product": "MISP",
"programFiles": [
"app/Controller/AppController.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.46",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003e\u003c/p\u003e\u003cp\u003eAffected versions of MISP use Redis to throttle repeated authentication-failure log entries. The intent is to avoid excessive duplicate logs while still recording failed authentication activity.\u003c/p\u003e\n\u003cp\u003eHowever, \u003ccode\u003eUser-\u0026gt;setupRedis()\u003c/code\u003e returns false when Redis cannot be reached. The vulnerable \u003ccode\u003e_shouldLog()\u003c/code\u003e logic only returned true when a Redis instance existed and no throttle key was present. Therefore, when Redis was unavailable, the function did not allow the log write at all, effectively silencing authentication-failure logging for the duration of the outage.\u003c/p\u003e\u003cp\u003eVersion affected: \u22642.5.45\u003cbr\u003e\u003c/p\u003e\u003cp\u003e\u003c/p\u003e"
}
],
"value": "Affected versions of MISP use Redis to throttle repeated authentication-failure log entries. The intent is to avoid excessive duplicate logs while still recording failed authentication activity.\n\n\nHowever, User-\u003esetupRedis() returns false when Redis cannot be reached. The vulnerable _shouldLog() logic only returned true when a Redis instance existed and no throttle key was present. Therefore, when Redis was unavailable, the function did not allow the log write at all, effectively silencing authentication-failure logging for the duration of the outage.\n\nVersion affected: \u22642.5.45"
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 5.1,
"baseSeverity": "MEDIUM",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-778",
"description": "CWE-778 Insufficient Logging",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-15T11:24:21.354Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/a39b25d2f"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe _shouldLog() method now explicitly checks whether the Redis connection is available before attempting to use it. If setupRedis() returns false, the method immediately returns true, causing every authentication-failure event to be logged. This converts the previous fail-closed behavior (silence on dependency failure) into a fail-open behavior for security logging (log everything when the throttle state is unavailable), ensuring that a Redis outage cannot be used to suppress the audit trail of failed authentication attempts.\u003c/p\u003e"
}
],
"value": "The _shouldLog() method now explicitly checks whether the Redis connection is available before attempting to use it. If setupRedis() returns false, the method immediately returns true, causing every authentication-failure event to be logged. This converts the previous fail-closed behavior (silence on dependency failure) into a fail-open behavior for security logging (log everything when the throttle state is unavailable), ensuring that a Redis outage cannot be used to suppress the audit trail of failed authentication attempts."
}
],
"title": "MISP: Authentication failure logging suppressed during Redis unavailability",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "review",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The affected version range is inferred from the tag_version_boundary metadata (v2.5.46 with 189 commits after the fix), suggesting the fix landed before the v2.5.46 release; exact affected version boundaries are not explicitly stated in the patch.",
"The CVSS availability impact (VA:L) reflects the loss of the security-logging function rather than a denial of service against the MISP application itself.",
"The patch does not indicate whether the Redis throttle was the sole mechanism for auth-failure logging or whether a fallback file-based logger existed; the analysis assumes the Redis-gated path was the primary logging path for auth failures.",
"The commit date (2 Sep 2026) is taken at face value from the patch metadata."
],
"commit": "a39b25d2f141dde954a2f00feed5c6eb9e3989b5",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"cvssRationale": "The vulnerability is reachable over the network (AV:N) because MISP is a web application. Attack complexity is High (AC:H) because exploitation requires the Redis instance to be specifically unavailable at the time authentication failures occur; it is not a simple request. No attack target is required (AT:N). No privileges are needed (PR:N) because the suppressed logs pertain to unauthenticated authentication-failure events. No user interaction is required (UI:N). There is no direct confidentiality or integrity impact on the MISP data store (VC:N, VI:N). The availability impact is Low (VA:L) because the security-logging/audit function is unavailable during the Redis outage, impairing detection and forensic capabilities, but the core MISP service remains operational. No cross-scope impacts (SC:N, SI:N, SA:N).",
"draft": false,
"fixSummary": "The _shouldLog() method now explicitly checks whether the Redis connection is available before attempting to use it. If setupRedis() returns false, the method immediately returns true, causing every authentication-failure event to be logged. This converts the previous fail-closed behavior (silence on dependency failure) into a fail-open behavior for security logging (log everything when the throttle state is unavailable), ensuring that a Redis outage cannot be used to suppress the audit trail of failed authentication attempts.",
"generatedAt": "2026-09-15T09:34:28.852379Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 9,
"assumptionCount": 4,
"confidence": "medium",
"model": "qwen3.8:27b",
"score": 6
}
],
"selectedModel": "qwen3.8:27b",
"selectionMethod": "deterministic-consensus-v1",
"selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
},
"patchSha256": "ab1b5a5a68cf32cfb514f541d5db607932836ebf557634a44adfa822631afe9c",
"patchSummary": "In app/Controller/AppController.php, the _shouldLog() method was restructured: a new early-return guard \"if (!$redis) { return true; }\" was inserted immediately after the setupRedis() call, so that an unavailable Redis connection causes all auth-failure events to be logged. The subsequent throttle check was simplified to \"if (!$redis-\u003eexists(...))\" since the null case is already handled. Additionally, a block of commented-out Redis throttle code in the afterFilter() method (lines referencing misp:auth_fail_throttling) was removed as dead code.",
"patchTruncated": false,
"patches": [
{
"commit": "a39b25d2f141dde954a2f00feed5c6eb9e3989b5",
"patchSha256": "ab1b5a5a68cf32cfb514f541d5db607932836ebf557634a44adfa822631afe9c",
"source": "https://github.com/MISP/MISP/commit/a39b25d2f.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/a39b25d2f.patch",
"subject": "fix: [logging] Log auth failures when the throttle cannot"
}
],
"source": "https://github.com/MISP/MISP/commit/a39b25d2f.patch",
"subject": "fix: [logging] Log auth failures when the throttle cannot",
"tagVersionBoundary": {
"commits_after_fix": 189,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.46",
"version": "2.5.46",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-778",
"rationale": "The system fails to record security-relevant events (authentication failures) when a supporting dependency (Redis) is unavailable. The logging path silently drops all audit entries under a specific operational condition, which is a textbook case of insufficient logging of security events."
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20172"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-92002",
"datePublished": "2026-09-15T11:24:21.354Z",
"dateReserved": "2026-09-15T11:24:19.778Z",
"dateUpdated": "2026-09-15T12:09:48.540Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-92003 (GCVE-0-2026-92003)
Vulnerability from cvelistv5 – Published: 2026-09-15 11:43 – Updated: 2026-09-15 12:32| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/2bf887433 | patch |
qwen3.8:27b
advisory
bcp-05-x-01bcp-05-x-02
Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.
| Model | Source | Identifier |
|---|---|---|
| qwen3.8:27b | ollama | qwen3.8:27b |
- Generator
-
patch2vuln.pyon 2026-09-15 11:37 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/2bf887433.patch
db6f78e69079… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
2bf887433651
|
fix: [logging] Throttle the two unguarded auth_fail writes | db6f78e69079… |
Fix summary
The fix applies the existing hourly per-key log throttle to the two previously unguarded authentication-failure log writes. The throttle key is now derived from the client's source IP address rather than from caller-supplied input, preventing an attacker from generating unbounded Redis throttle entries. A per-request memo (stored in Configure::read('CurrentRequestAuthFailKeys')) is added to _shouldLog() to prevent duplicate log entries when beforeFilter() executes a second time via CakeErrorController on an exception, ensuring one request produces at most one log entry per key regardless of the operator's log_each_individual_auth_fail setting.
Patch summary
In app/Controller/AppController.php: (1) The 'no authkey' branch in beforeFilter() now calls _shouldLog('noauthkey:' . $this->User->_remoteIp()) before writing the log entry. (2) The 'incorrect length' branch in __loginByAuthKey() now calls _shouldLog('badauthkeylength:' . $this->User->_remoteIp()) before writing the log entry. (3) _shouldLog() is refactored to first check a per-request memo array (Configure 'CurrentRequestAuthFailKeys') to suppress duplicate logging across the double beforeFilter() invocation, then evaluate the log_each_individual_auth_fail setting, then fall through to the Redis EXISTS/SETEX 3600-second throttle, and finally record the key in the memo. The Redis-unavailable fallback (log everything) is preserved.
CVSS rationale
The vulnerable paths are reachable over the network (AV:N) with no authentication (PR:N) and no user interaction (UI:N). The attack complexity is low (AC:L): an attacker simply sends repeated HTTP requests to the MISP API without an API key or with a key of the wrong length. No attack target is required (AT:N). There is no impact on confidentiality (VC:N, SC:N) or integrity (VI:N, SI:N). The availability impact is high (VA:H) because unbounded log writes can exhaust database storage, degrade query performance, and ultimately make the MISP instance unavailable. No secondary availability impact (SA:N) is evident from the patch.
Weakness rationale
- CWE-770 Two authentication-failure log write paths lacked any rate-limiting or throttling mechanism, allowing an unauthenticated remote attacker to generate an unbounded number of database log entries and exhaust storage or I/O resources. The fix adds the missing hourly per-key throttle.
- CWE-400 The unthrottled log writes constitute uncontrolled consumption of database write capacity and disk storage, enabling a denial-of-service condition. CWE-770 is the more specific primary weakness; CWE-400 captures the broader resource-exhaustion impact.
Assumptions to verify
- The tag_version_boundary (v2.5.46, 188 commits after fix) is used as an approximate upper bound for affected versions; the exact fixed release tag is not stated in the patch metadata.
- The log entries are written to a relational database (MySQL/PostgreSQL) via MISP's Log model, based on the createLogEntry() call pattern; the specific backend is not confirmed in the patch.
- The Redis instance used for throttling is assumed to be co-located with the MISP application; a Redis outage degrades to logging everything (fail-open), which is a design choice documented in the patch comments.
- CVSS VA:H assumes that sustained unthrottled log writes can exhaust storage or I/O capacity sufficient to degrade or halt the MISP service; actual impact depends on deployment sizing and disk capacity.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
6 | 9 | medium | 4 |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-92003",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-15T12:31:54.934768Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-15T12:32:06.515Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"modules": [
"app/Controller/AppController.php"
],
"product": "MISP",
"programFiles": [
"app/Controller/AppController.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.46",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAffected versions of MISP do not consistently apply the existing authentication-failure logging throttle.\u003c/p\u003e\n\u003cp\u003eTwo API authentication failure branches wrote directly to the \u003ccode\u003eLog\u003c/code\u003e model:\u003c/p\u003e\u2003- API requests with \u003cstrong\u003eno authentication key\u003c/strong\u003e;\u003cbr\u003e\u003cdiv\u003e\u2003- requests supplying an API key with an \u003cstrong\u003eincorrect length\u003c/strong\u003e\u003c/div\u003e\u003cdiv\u003e\u003cstrong\u003e\u003cbr\u003e\u003c/strong\u003e\u003c/div\u003e\u003cp\u003eUnlike other authentication failures, these paths bypassed \u003ccode\u003e_shouldLog()\u003c/code\u003e, so every request could create another durable \u003ccode\u003eauth_fail\u003c/code\u003e entry.\u003c/p\u003eVersion affected: \u22642.5.45\u003cbr\u003e"
}
],
"value": "Affected versions of MISP do not consistently apply the existing authentication-failure logging throttle.\n\n\nTwo API authentication failure branches wrote directly to the Log model:\n\n\u2003- API requests with no authentication key;\n\u2003- requests supplying an API key with an incorrect length\n\n\n\n\nUnlike other authentication failures, these paths bypassed _shouldLog(), so every request could create another durable auth_fail entry.\n\nVersion affected: \u22642.5.45"
}
],
"impacts": [
{
"capecId": "CAPEC-125",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-125 Flooding"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 6.9,
"baseSeverity": "MEDIUM",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-770",
"description": "CWE-770 Allocation of Resources Without Limits or Throttling",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-400",
"description": "CWE-400 Uncontrolled Resource Consumption",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-15T11:43:19.403Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/2bf887433"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe fix applies the existing hourly per-key log throttle to the two previously unguarded authentication-failure log writes. The throttle key is now derived from the client\u0027s source IP address rather than from caller-supplied input, preventing an attacker from generating unbounded Redis throttle entries. A per-request memo (stored in Configure::read(\u0027CurrentRequestAuthFailKeys\u0027)) is added to _shouldLog() to prevent duplicate log entries when beforeFilter() executes a second time via CakeErrorController on an exception, ensuring one request produces at most one log entry per key regardless of the operator\u0027s log_each_individual_auth_fail setting.\u003c/p\u003e"
}
],
"value": "The fix applies the existing hourly per-key log throttle to the two previously unguarded authentication-failure log writes. The throttle key is now derived from the client\u0027s source IP address rather than from caller-supplied input, preventing an attacker from generating unbounded Redis throttle entries. A per-request memo (stored in Configure::read(\u0027CurrentRequestAuthFailKeys\u0027)) is added to _shouldLog() to prevent duplicate log entries when beforeFilter() executes a second time via CakeErrorController on an exception, ensuring one request produces at most one log entry per key regardless of the operator\u0027s log_each_individual_auth_fail setting."
}
],
"title": "MISP Unthrottled Authentication Failure Log Writes Enable Resource Exhaustion",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "review",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The tag_version_boundary (v2.5.46, 188 commits after fix) is used as an approximate upper bound for affected versions; the exact fixed release tag is not stated in the patch metadata.",
"The log entries are written to a relational database (MySQL/PostgreSQL) via MISP\u0027s Log model, based on the createLogEntry() call pattern; the specific backend is not confirmed in the patch.",
"The Redis instance used for throttling is assumed to be co-located with the MISP application; a Redis outage degrades to logging everything (fail-open), which is a design choice documented in the patch comments.",
"CVSS VA:H assumes that sustained unthrottled log writes can exhaust storage or I/O capacity sufficient to degrade or halt the MISP service; actual impact depends on deployment sizing and disk capacity."
],
"commit": "2bf8874336518d8c5ef6a42e51e78900ec242630",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"cvssRationale": "The vulnerable paths are reachable over the network (AV:N) with no authentication (PR:N) and no user interaction (UI:N). The attack complexity is low (AC:L): an attacker simply sends repeated HTTP requests to the MISP API without an API key or with a key of the wrong length. No attack target is required (AT:N). There is no impact on confidentiality (VC:N, SC:N) or integrity (VI:N, SI:N). The availability impact is high (VA:H) because unbounded log writes can exhaust database storage, degrade query performance, and ultimately make the MISP instance unavailable. No secondary availability impact (SA:N) is evident from the patch.",
"draft": false,
"fixSummary": "The fix applies the existing hourly per-key log throttle to the two previously unguarded authentication-failure log writes. The throttle key is now derived from the client\u0027s source IP address rather than from caller-supplied input, preventing an attacker from generating unbounded Redis throttle entries. A per-request memo (stored in Configure::read(\u0027CurrentRequestAuthFailKeys\u0027)) is added to _shouldLog() to prevent duplicate log entries when beforeFilter() executes a second time via CakeErrorController on an exception, ensuring one request produces at most one log entry per key regardless of the operator\u0027s log_each_individual_auth_fail setting.",
"generatedAt": "2026-09-15T11:37:41.625192Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 9,
"assumptionCount": 4,
"confidence": "medium",
"model": "qwen3.8:27b",
"score": 6
}
],
"selectedModel": "qwen3.8:27b",
"selectionMethod": "deterministic-consensus-v1",
"selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
},
"patchSha256": "db6f78e69079c91d4ba1dac46c4ed5b8ff1ca617c00cd6733bff926c0925a2e3",
"patchSummary": "In app/Controller/AppController.php: (1) The \u0027no authkey\u0027 branch in beforeFilter() now calls _shouldLog(\u0027noauthkey:\u0027 . $this-\u003eUser-\u003e_remoteIp()) before writing the log entry. (2) The \u0027incorrect length\u0027 branch in __loginByAuthKey() now calls _shouldLog(\u0027badauthkeylength:\u0027 . $this-\u003eUser-\u003e_remoteIp()) before writing the log entry. (3) _shouldLog() is refactored to first check a per-request memo array (Configure \u0027CurrentRequestAuthFailKeys\u0027) to suppress duplicate logging across the double beforeFilter() invocation, then evaluate the log_each_individual_auth_fail setting, then fall through to the Redis EXISTS/SETEX 3600-second throttle, and finally record the key in the memo. The Redis-unavailable fallback (log everything) is preserved.",
"patchTruncated": false,
"patches": [
{
"commit": "2bf8874336518d8c5ef6a42e51e78900ec242630",
"patchSha256": "db6f78e69079c91d4ba1dac46c4ed5b8ff1ca617c00cd6733bff926c0925a2e3",
"source": "https://github.com/MISP/MISP/commit/2bf887433.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/2bf887433.patch",
"subject": "fix: [logging] Throttle the two unguarded auth_fail writes"
}
],
"source": "https://github.com/MISP/MISP/commit/2bf887433.patch",
"subject": "fix: [logging] Throttle the two unguarded auth_fail writes",
"tagVersionBoundary": {
"commits_after_fix": 188,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.46",
"version": "2.5.46",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-770",
"rationale": "Two authentication-failure log write paths lacked any rate-limiting or throttling mechanism, allowing an unauthenticated remote attacker to generate an unbounded number of database log entries and exhaust storage or I/O resources. The fix adds the missing hourly per-key throttle."
},
{
"cweId": "CWE-400",
"rationale": "The unthrottled log writes constitute uncontrolled consumption of database write capacity and disk storage, enabling a denial-of-service condition. CWE-770 is the more specific primary weakness; CWE-400 captures the broader resource-exhaustion impact."
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20158"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-92003",
"datePublished": "2026-09-15T11:43:19.403Z",
"dateReserved": "2026-09-15T11:43:17.522Z",
"dateUpdated": "2026-09-15T12:32:06.515Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.