{"api_version":"1","generated_at":"2026-10-26T11:08:18+00:00","cve":"CVE-2026-116372","urls":{"html":"https://cve.report/CVE-2026-116372","api":"https://cve.report/api/cve/CVE-2026-116372.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-116372","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-116372"},"summary":{"title":"MISP mispguard: Feed responses with 2xx status codes other than 200 bypass filtering rules","description":"MISP mispguard is a security filtering proxy that inspects and blocks MISP feed responses based on configured rules. The process_feed_response method in src/mispguard.py was responsible for evaluating feed responses before they reached the MISP instance. The original logic only explicitly handled the case where the HTTP status code was not 200 by passing the response through without filtering, on the assumption that non-200 responses would not carry ingestible event data. However, HTTP 2xx status codes other than 200 (such as 201 Created, 203 Non-Authoritative Information, and 206 Partial Content) were also passed through unfiltered. Because MISP may still ingest content from these responses, a malicious or compromised feed host could return a 203 or 206 status code with arbitrary content, effectively bypassing all of mispguard's filtering rules. This allowed unfiltered or malicious feed data to be ingested into the MISP instance, undermining the security controls that mispguard is designed to enforce. The vulnerability requires the attacker to control or compromise a feed endpoint configured in the MISP instance. No authentication or user interaction is required beyond the feed polling mechanism already in place.","state":"PUBLISHED","assigner":"CIRCL","published_at":"2026-10-26 09:16:35","updated_at":"2026-10-26 09:16:35"},"problem_types":["CWE-20","CWE-20 CWE-20 Improper Input Validation"],"metrics":[{"version":"4.0","source":"5a6e4751-2f3f-4070-9419-94fb35b644e8","type":"Secondary","score":"7.7","severity":"HIGH","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","data":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":7.7,"baseSeverity":"HIGH","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"NONE","userInteraction":"NONE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"HIGH","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}},{"version":"4.0","source":"CNA","type":"CVSS","score":"7.7","severity":"HIGH","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:H/SA:N","data":{"Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","Safety":"NOT_DEFINED","attackComplexity":"LOW","attackRequirements":"NONE","attackVector":"NETWORK","baseScore":7.7,"baseSeverity":"HIGH","privilegesRequired":"NONE","providerUrgency":"NOT_DEFINED","subAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"HIGH","userInteraction":"NONE","valueDensity":"NOT_DEFINED","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:H/SA:N","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnerabilityResponseEffort":"NOT_DEFINED"}}],"references":[{"url":"https://github.com/MISP/misp-guard/commit/b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735","name":"https://github.com/MISP/misp-guard/commit/b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735","refsource":"5a6e4751-2f3f-4070-9419-94fb35b644e8","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-116372","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-116372","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"MISP","product":"misp-guard","version":"affected 1.3 semver","platforms":[]}],"timeline":[],"solutions":[{"source":"CNA","title":"","value":"The fix adds an explicit check in process_feed_response that rejects any HTTP response with a status code in the 201-299 range (i.e., successful responses other than 200) by returning a 403 Forbidden response. This ensures that only responses with exactly status code 200 are subject to the normal filtering pipeline, and all other 2xx responses are blocked before they can reach the MISP instance, closing the bypass vector.","time":"","lang":"en"}],"workarounds":[],"exploits":[],"credits":[{"source":"CNA","value":"Luciano Righetti","lang":"en"},{"source":"CNA","value":"Claude Opus 5.5 (1M context)","lang":"en"},{"source":"CNA","value":"Claude Opus 5.5 (1M context)","lang":"en"}],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"cpes":["cpe:2.3:a:misp:misp-guard:*:*:*:*:*:*:*:*"],"modules":["src/mispguard.py (process_feed_response)"],"product":"misp-guard","programFiles":["src/mispguard.py"],"repo":"https://github.com/MISP/misp-guard","vendor":"MISP","versions":[{"lessThanOrEqual":"1.3","status":"affected","version":"0","versionType":"semver"}]}],"credits":[{"lang":"en","type":"remediation developer","value":"Luciano Righetti"},{"lang":"en","type":"remediation developer","value":"Claude Opus 5.5 (1M context)"},{"lang":"en","type":"tool","value":"Claude Opus 5.5 (1M context)"}],"descriptions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>MISP mispguard is a security filtering proxy that inspects and blocks MISP feed responses based on configured rules. The process_feed_response method in src/mispguard.py was responsible for evaluating feed responses before they reached the MISP instance. The original logic only explicitly handled the case where the HTTP status code was not 200 by passing the response through without filtering, on the assumption that non-200 responses would not carry ingestible event data. However, HTTP 2xx status codes other than 200 (such as 201 Created, 203 Non-Authoritative Information, and 206 Partial Content) were also passed through unfiltered. Because MISP may still ingest content from these responses, a malicious or compromised feed host could return a 203 or 206 status code with arbitrary content, effectively bypassing all of mispguard's filtering rules. This allowed unfiltered or malicious feed data to be ingested into the MISP instance, undermining the security controls that mispguard is designed to enforce. The vulnerability requires the attacker to control or compromise a feed endpoint configured in the MISP instance. No authentication or user interaction is required beyond the feed polling mechanism already in place.</p>"}],"value":"MISP mispguard is a security filtering proxy that inspects and blocks MISP feed responses based on configured rules. The process_feed_response method in src/mispguard.py was responsible for evaluating feed responses before they reached the MISP instance. The original logic only explicitly handled the case where the HTTP status code was not 200 by passing the response through without filtering, on the assumption that non-200 responses would not carry ingestible event data. However, HTTP 2xx status codes other than 200 (such as 201 Created, 203 Non-Authoritative Information, and 206 Partial Content) were also passed through unfiltered. Because MISP may still ingest content from these responses, a malicious or compromised feed host could return a 203 or 206 status code with arbitrary content, effectively bypassing all of mispguard's filtering rules. This allowed unfiltered or malicious feed data to be ingested into the MISP instance, undermining the security controls that mispguard is designed to enforce. The vulnerability requires the attacker to control or compromise a feed endpoint configured in the MISP instance. No authentication or user interaction is required beyond the feed polling mechanism already in place."}],"impacts":[{"capecId":"CAPEC-2","descriptions":[{"lang":"en","value":"CAPEC-2 Input Parameter Manipulation"}]}],"metrics":[{"cvssV4_0":{"Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","Safety":"NOT_DEFINED","attackComplexity":"LOW","attackRequirements":"NONE","attackVector":"NETWORK","baseScore":7.7,"baseSeverity":"HIGH","privilegesRequired":"NONE","providerUrgency":"NOT_DEFINED","subAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"HIGH","userInteraction":"NONE","valueDensity":"NOT_DEFINED","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:H/SA:N","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnerabilityResponseEffort":"NOT_DEFINED"},"format":"CVSS","scenarios":[{"lang":"en","value":"GENERAL"}]},{"format":"SSVC","other":{"content":{"options":[{"Exploitation":"none"},{"Automatable":"yes"},{"Technical Impact":"partial"}],"role":"Supplier","timestamp":"2026-10-26T08:33:29Z","version":"2.0.3"},"type":"SSVC"},"scenarios":[{"lang":"en","value":"GENERAL"}]}],"problemTypes":[{"descriptions":[{"cweId":"CWE-20","description":"CWE-20 Improper Input Validation","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-10-26T08:36:16.664Z","orgId":"5a6e4751-2f3f-4070-9419-94fb35b644e8","shortName":"CIRCL"},"references":[{"name":"Security patch","tags":["patch"],"url":"https://github.com/MISP/misp-guard/commit/b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735"}],"solutions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>The fix adds an explicit check in process_feed_response that rejects any HTTP response with a status code in the 201-299 range (i.e., successful responses other than 200) by returning a 403 Forbidden response. This ensures that only responses with exactly status code 200 are subject to the normal filtering pipeline, and all other 2xx responses are blocked before they can reach the MISP instance, closing the bypass vector.</p>"}],"value":"The fix adds an explicit check in process_feed_response that rejects any HTTP response with a status code in the 201-299 range (i.e., successful responses other than 200) by returning a 403 Forbidden response. This ensures that only responses with exactly status code 200 are subject to the normal filtering pipeline, and all other 2xx responses are blocked before they can reach the MISP instance, closing the bypass vector."}],"title":"MISP mispguard: Feed responses with 2xx status codes other than 200 bypass filtering rules","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 affected version range is unknown; the patch does not specify a version boundary or tag. All versions of mispguard prior to this commit are assumed affected.","The assumption that MISP will ingest content from 2xx responses other than 200 is stated in the commit message and code comments but not independently verified; the fix treats this as a security requirement regardless.","CAPEC-2 (Input Parameter Manipulation) is the closest available pattern; no CAPEC specifically covers HTTP status code manipulation to bypass proxy filtering logic.","The CVSS vector assumes the attacker controls or compromises a feed endpoint configured in the MISP instance; no additional authentication or network position is assumed beyond that.","The SSVC technical impact is assessed as 'partial' based on the assumption that the MISP instance remains operational but with degraded filtering; a 'total' impact would require evidence of data corruption or system failure.","The commit date (26 Oct 2026) is in the future relative to typical analysis timelines; this is taken at face value from the patch metadata."],"capecRationale":[{"capecId":"CAPEC-2","rationale":"The attacker (a feed host) manipulates the HTTP response status code parameter to a value (203, 206) that the filtering logic does not properly handle, causing the response to bypass all filtering rules. This is the closest CAPEC pattern: the attacker controls an input parameter (the status code) to trigger an unintended code path. Uncertainty: no CAPEC pattern specifically addresses HTTP status code manipulation for proxy bypass; CAPEC-2 is the best available match for parameter-level manipulation to defeat validation logic."}],"commit":"b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735","confidence":"medium","credits":[{"lang":"en","type":"remediation developer","value":"Luciano Righetti"},{"lang":"en","type":"remediation developer","value":"Claude Opus 5.5 (1M context)"},{"lang":"en","type":"tool","value":"Claude Opus 5.5 (1M context)"}],"cvssRationale":"The vulnerability is exploitable over the network (AV:N) with low complexity (AC:L) since the attacker only needs to return a different HTTP status code. No attack target manipulation (AT:N), no privileges (PR:N) since the attacker is the feed host itself, and no user interaction (UI:N) is required. The vulnerable component (mispguard) itself suffers no direct confidentiality, integrity, or availability impact (VC:N, VI:N, VA:N). The primary impact is on the downstream MISP instance, whose integrity is compromised because unfiltered feed data is ingested (SI:H). No secondary confidentiality or availability impact (SC:N, SA:N) is evidenced.","fixSummary":"The fix adds an explicit check in process_feed_response that rejects any HTTP response with a status code in the 201-299 range (i.e., successful responses other than 200) by returning a 403 Forbidden response. This ensures that only responses with exactly status code 200 are subject to the normal filtering pipeline, and all other 2xx responses are blocked before they can reach the MISP instance, closing the bypass vector.","generatedAt":"2026-10-26T08:33:29.004607Z","generator":"patch2vuln.py","model":"qwen3.8:27b","modelComparison":{"rankings":[{"agreementScore":11,"assumptionCount":6,"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":"c553e477781b3c949ccb2f9eda15d3d9797652c9e0c257afe8580f39db5b0e71","patchSummary":"In src/mispguard.py, a new conditional block is inserted at the top of process_feed_response, before the existing status-code check. The new block tests whether flow.response.status_code is greater than 200 and less than 300, and if so, calls self.forbidden() to return a 403 response with a descriptive log message. In src/test/test_misp_guard.py, a new parametrized async test test_feed_non_200_success_response_is_blocked is added, covering status codes 201, 203, and 206, asserting that the response is blocked (status 403) and the appropriate log message is emitted.","patchTruncated":false,"patches":[{"commit":"b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735","date":"Mon, 26 Oct 2026 08:53:50 +0100","patchSha256":"c553e477781b3c949ccb2f9eda15d3d9797652c9e0c257afe8580f39db5b0e71","source":"https://github.com/MISP/misp-guard/commit/b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735.patch","sourceUrl":"https://github.com/MISP/misp-guard/commit/b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735.patch","subject":"fix: [security] block successful feed responses other than"}],"source":"https://github.com/MISP/misp-guard/commit/b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735.patch","ssvc":{"options":[{"Exploitation":"none"},{"Automatable":"yes"},{"Technical Impact":"partial"}],"role":"Supplier","timestamp":"2026-10-26T08:33:29Z","version":"2.0.3"},"subject":"fix: [security] block successful feed responses other than","weaknessRationale":[{"cweId":"CWE-20","rationale":"The code validated the HTTP status code incompletely: it checked for != 200 to decide whether to pass through, but failed to account for other 2xx codes (201, 203, 206) that represent successful responses whose content MISP may still ingest. The validation logic did not cover the full range of inputs that required filtering, constituting improper input validation."}]}},"bcp-05-x-03":{"x_timeline":{"events":[{"description":"Corrective change authored (b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735): fix: [security] block successful feed responses other than","id":"evt-fix-developed-1","references":["https://github.com/MISP/misp-guard/commit/b5f606a4e57a49cc4dbf9b3ef0c6ddd19f866735.patch"],"timestamp":"2026-10-26T07:53:50Z","type":"fix-developed"}]}}},"recordType":"advisory","vulnId":"gcve-1-2026-20298"}]}},"cveMetadata":{"assignerOrgId":"5a6e4751-2f3f-4070-9419-94fb35b644e8","assignerShortName":"CIRCL","cveId":"CVE-2026-116372","datePublished":"2026-10-26T08:36:16.664Z","dateReserved":"2026-10-26T08:36:08.354Z","dateUpdated":"2026-10-26T08:36:16.664Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-10-26 09:16:35","lastModifiedDate":"2026-10-26 09:16:35","problem_types":["CWE-20","CWE-20 CWE-20 Improper Input Validation"],"metrics":{"cvssMetricV40":[{"source":"5a6e4751-2f3f-4070-9419-94fb35b644e8","type":"Secondary","cvssData":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":7.7,"baseSeverity":"HIGH","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"NONE","userInteraction":"NONE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"HIGH","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}}],"ssvcV203":[{"source":"5a6e4751-2f3f-4070-9419-94fb35b644e8","ssvcData":{"timestamp":"2026-10-26T08:33:29Z","options":[{"exploitation":"none"},{"automatable":"yes"},{"technicalImpact":"partial"}],"role":"Supplier","version":"2.0.3"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"116372","Ordinal":"1","Title":"MISP mispguard: Feed responses with 2xx status codes other than ","CVE":"CVE-2026-116372","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"116372","Ordinal":"1","NoteData":"MISP mispguard is a security filtering proxy that inspects and blocks MISP feed responses based on configured rules. The process_feed_response method in src/mispguard.py was responsible for evaluating feed responses before they reached the MISP instance. The original logic only explicitly handled the case where the HTTP status code was not 200 by passing the response through without filtering, on the assumption that non-200 responses would not carry ingestible event data. However, HTTP 2xx status codes other than 200 (such as 201 Created, 203 Non-Authoritative Information, and 206 Partial Content) were also passed through unfiltered. Because MISP may still ingest content from these responses, a malicious or compromised feed host could return a 203 or 206 status code with arbitrary content, effectively bypassing all of mispguard's filtering rules. This allowed unfiltered or malicious feed data to be ingested into the MISP instance, undermining the security controls that mispguard is designed to enforce. The vulnerability requires the attacker to control or compromise a feed endpoint configured in the MISP instance. No authentication or user interaction is required beyond the feed polling mechanism already in place.","Type":"Description","Title":"MISP mispguard: Feed responses with 2xx status codes other than "}]}}}