CIRCL is the CERT (Computer Emergency Response Team/Computer Security Incident Response Team) for the private sector, communes and non-governmental entities in Luxembourg.
- Website
- https://www.circl.lu
- info@circl.lu
- Vendor name
- circl
- GNA identifier
- GNA-1 GCVE registry Recent publications
Products
9 products registered by Computer Incident Response Center LuxembourgOpen Source Threat Intelligence Platform & Open Standards For Threat Information Sharing
Client API to query any Passive DNS implementation following the Passive DNS - Common Output Format.
An open source platform to support analysts to organise their case and tasks.
AIL Framework
The Vulnerability-Lookup software is a powerful sharing platform to assist security teams, researchers, and system administrators in identifying and tracking vulnerabilities related to specific vendors and products. By leveraging known vulnerability databases, sightings, and configurations, the software provides...
Analyse a forensic target (such as a directory) to find and report files found and not found from CIRCL hashlookup public service or the Bloom filter from CIRCL hashlookup. This tool can help a digital forensic investigator to know the context, origin of specific files during a digital forensic investigation.
Lookyloo is a web interface that captures a webpage and then displays a tree of the domains, that call each other.
Convert Cyber Threat Intelligence data between MISP and STIX formats. Open-source REST API maintained by the MISP Project community.
Rulezet is an open-source, community-driven platform for sharing cybersecurity detection rules. This policy covers the official instance at rulezet.org. Anyone can also self-host Rulezet from its source code — if you are using a self-hosted instance, this default policy may have been customized by that instance's...
Recent vulnerabilities
CVE-2026-124850 (GCVE-0-2026-124850)
Vulnerability from cvelistv5 – Published: 2026-11-09 14:43 – Updated: 2026-11-12 16:24- CWE-89 - Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
| URL | Tags |
|---|---|
| https://github.com/flowintel/flowintel/commit/061… | patch |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-09 14:12 - Model
qwen3.8:27b- Input
-
https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch
9ad956ded461… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
061053689dc2
|
fix: [security] Bind stored connector identifiers during | 9ad956ded461… |
Fix summary
The vulnerability is remediated by replacing direct string interpolation of stored database values into SQL queries with parameterized (bound) queries, ensuring that user-supplied or stored data is treated strictly as data rather than executable SQL. Additionally, the NULL handling for identifier fields is corrected to use proper SQL NULL instead of the string literal 'null', preventing both injection and unintended data corruption.
Patch summary
In migrations/versions/5cd03995339b_.py, four SQL statements (two SELECT and two UPDATE) are converted from Python f-string interpolation to SQLAlchemy parameterized queries using named bind parameters (:case_id, :instance_id, :ident, :id, :task_id). The NULL identifier handling is changed from assigning the string 'null' to assigning Python None, which SQLAlchemy translates to a proper SQL NULL value.
CVSS rationale
AV:L: The migration runs locally on the application server; exploitation requires local access to the database. AC:H: High complexity because the attacker must first write a crafted identifier into the database and then wait for a migration to execute. AT:P: Attack targeting is present; the attacker must specifically craft a malicious SQL payload in the identifier field. PR:L: Low privilege; the attacker needs write access to the database (e.g., an authenticated application user or DB access). UI:N: The migration runs automatically during upgrade; no user interaction is required at trigger time. VC:H, VI:H, VA:H: Successful SQL injection allows arbitrary read, write, and destructive operations on the database. SC:N, SI:N, SA:N: Impact is confined to the local database; no evidence of cross-component or cross-system impact.
Weakness rationale
- CWE-89 The patch directly replaces f-string interpolation of stored values into SQL with parameterized queries, which is the canonical fix for CWE-89. The commit message explicitly states that stored identifiers were 'interpolated into SQL, allowing expressions to execute,' confirming SQL injection.
Attack pattern rationale
- CAPEC-126 The vulnerability is a textbook SQL injection: attacker-controlled data (stored connector identifiers) is concatenated into SQL statements without sanitization or parameterization. CAPEC-126 is the most direct and specific match. The stored nature of the injection (data planted earlier, executed later during migration) is a variant but still falls squarely within this pattern.
Assumptions to verify
- The affected version range is inferred from the explicit context (affected_version '0', fixed_version '<=4.0.0'); the exact starting version is not confirmed by the patch itself.
- PR:L assumes the attacker can write to the database via an authenticated application role or direct DB access; the specific authentication mechanism is not stated in the patch.
- The CVSS impact ratings (VC:H, VI:H, VA:H) assume the database user has broad privileges; if the DB account is highly restricted, impact could be lower.
- CAPEC-126 is selected as the closest match; the stored/timed nature of the injection (data planted before migration runs) is a variant not explicitly covered by a more specific CAPEC.
- The patch does not indicate whether the migration has already been executed in deployed instances, which would affect real-world exploitability.
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 | 11 | medium | 5 |
- 2026-11-06 09:54 UTC Fix developed Corrective change authored (061053689dc279a3c2c182f8dc15cd42dc24bd7d): fix: [security] Bind stored connector identifiers during https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch
- 2026-11-09 14:10 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-124850",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-12T16:24:26.530803Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-12T16:24:54.028Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:flowintel:flowintel:*:*:*:*:*:*:*:*"
],
"modules": [
"migrations"
],
"product": "flowintel",
"programFiles": [
"migrations/versions/5cd03995339b_.py"
],
"repo": "https://github.com/flowintel/flowintel",
"vendor": "flowintel",
"versions": [
{
"lessThanOrEqual": "4.0.0",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:flowintel:flowintel:*:*:*:*:*:*:*:*",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "David Cruciani"
}
],
"descriptions": [
{
"lang": "en",
"value": "A SQL injection vulnerability exists in a database migration script in flowintel.\n\nThe migration process reads stored connector identifier values from the database and interpolates them directly into SQL statements without parameterization. An attacker who has previously written a malicious identifier value into the affected tables can cause arbitrary SQL execution when the migration is subsequently run during an application upgrade.\n\n- Requires prior write access to the database to plant a malicious identifier value\n- Triggered automatically during a migration or upgrade operation\n- Can result in unauthorized data disclosure, modification, or deletion\n\nAffected versions: flowintel prior to 4.0.0"
}
],
"impacts": [
{
"capecId": "CAPEC-126",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-126 SQL Injection"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "HIGH",
"attackRequirements": "PRESENT",
"attackVector": "LOCAL",
"baseScore": 7.3,
"baseSeverity": "HIGH",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-09T14:12:17Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-89",
"description": "CWE-89 Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-09T14:43:27.959Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d"
}
],
"solutions": [
{
"lang": "en",
"value": "The vulnerability is remediated by replacing direct string interpolation of stored database values into SQL queries with parameterized (bound) queries, ensuring that user-supplied or stored data is treated strictly as data rather than executable SQL. Additionally, the NULL handling for identifier fields is corrected to use proper SQL NULL instead of the string literal \u0027null\u0027, preventing both injection and unintended data corruption."
}
],
"title": "SQL Injection in Database Migration via Stored Connector Identifiers in flowintel",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The affected version range is inferred from the explicit context (affected_version \u00270\u0027, fixed_version \u0027\u003c=4.0.0\u0027); the exact starting version is not confirmed by the patch itself.",
"PR:L assumes the attacker can write to the database via an authenticated application role or direct DB access; the specific authentication mechanism is not stated in the patch.",
"The CVSS impact ratings (VC:H, VI:H, VA:H) assume the database user has broad privileges; if the DB account is highly restricted, impact could be lower.",
"CAPEC-126 is selected as the closest match; the stored/timed nature of the injection (data planted before migration runs) is a variant not explicitly covered by a more specific CAPEC.",
"The patch does not indicate whether the migration has already been executed in deployed instances, which would affect real-world exploitability."
],
"capecRationale": [
{
"capecId": "CAPEC-126",
"rationale": "The vulnerability is a textbook SQL injection: attacker-controlled data (stored connector identifiers) is concatenated into SQL statements without sanitization or parameterization. CAPEC-126 is the most direct and specific match. The stored nature of the injection (data planted earlier, executed later during migration) is a variant but still falls squarely within this pattern."
}
],
"commit": "061053689dc279a3c2c182f8dc15cd42dc24bd7d",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "David Cruciani"
}
],
"cvssRationale": "AV:L: The migration runs locally on the application server; exploitation requires local access to the database. AC:H: High complexity because the attacker must first write a crafted identifier into the database and then wait for a migration to execute. AT:P: Attack targeting is present; the attacker must specifically craft a malicious SQL payload in the identifier field. PR:L: Low privilege; the attacker needs write access to the database (e.g., an authenticated application user or DB access). UI:N: The migration runs automatically during upgrade; no user interaction is required at trigger time. VC:H, VI:H, VA:H: Successful SQL injection allows arbitrary read, write, and destructive operations on the database. SC:N, SI:N, SA:N: Impact is confined to the local database; no evidence of cross-component or cross-system impact.",
"fixSummary": "The vulnerability is remediated by replacing direct string interpolation of stored database values into SQL queries with parameterized (bound) queries, ensuring that user-supplied or stored data is treated strictly as data rather than executable SQL. Additionally, the NULL handling for identifier fields is corrected to use proper SQL NULL instead of the string literal \u0027null\u0027, preventing both injection and unintended data corruption.",
"generatedAt": "2026-11-09T14:12:17.714022Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "9ad956ded461ca4c442070a86c76b0239017eeb48e36892684465b9b6fb4ccde",
"patchSummary": "In migrations/versions/5cd03995339b_.py, four SQL statements (two SELECT and two UPDATE) are converted from Python f-string interpolation to SQLAlchemy parameterized queries using named bind parameters (:case_id, :instance_id, :ident, :id, :task_id). The NULL identifier handling is changed from assigning the string \u0027null\u0027 to assigning Python None, which SQLAlchemy translates to a proper SQL NULL value.",
"patchTruncated": false,
"patches": [
{
"commit": "061053689dc279a3c2c182f8dc15cd42dc24bd7d",
"date": "Fri, 6 Nov 2026 10:54:39 +0100",
"patchSha256": "9ad956ded461ca4c442070a86c76b0239017eeb48e36892684465b9b6fb4ccde",
"retrievedAt": "2026-11-09T14:10:44.764240Z",
"source": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch",
"sourceUrl": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch",
"subject": "fix: [security] Bind stored connector identifiers during"
}
],
"source": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-09T14:12:17Z",
"version": "2.0.3"
},
"subject": "fix: [security] Bind stored connector identifiers during",
"weaknessRationale": [
{
"cweId": "CWE-89",
"rationale": "The patch directly replaces f-string interpolation of stored values into SQL with parameterized queries, which is the canonical fix for CWE-89. The commit message explicitly states that stored identifiers were \u0027interpolated into SQL, allowing expressions to execute,\u0027 confirming SQL injection."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (061053689dc279a3c2c182f8dc15cd42dc24bd7d): fix: [security] Bind stored connector identifiers during",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch"
],
"timestamp": "2026-11-06T09:54:39Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch"
],
"timestamp": "2026-11-09T14:10:44.764240Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20156"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-124850",
"datePublished": "2026-11-09T14:43:27.959Z",
"dateReserved": "2026-11-09T14:38:45.169Z",
"dateUpdated": "2026-11-12T16:24:54.028Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123660 (GCVE-0-2026-123660)
Vulnerability from cvelistv5 – Published: 2026-11-06 08:58 – Updated: 2026-11-10 17:40| URL | Tags |
|---|---|
| https://github.com/vulnerability-lookup/vulnerabi… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| vulnerability-lookup | vulnerability-lookup |
Affected:
5.5.1 , < 6.4.1
(semver)
|
- Report to fix
- same day (reported 2026-11-05 19:41 UTC → fix available 2026-11-06 08:24 UTC)
- Report to disclosure
- same day (reported 2026-11-05 19:41 UTC → public disclosure 2026-11-06 08:24 UTC)
- 2026-11-05 19:41 UTC Reported researcher Private report sent to info@circl.lu, based on a bounded local run against commit 2bb9b2f0; no request was sent to the public service.
- 2026-11-06 Validated vendor Reproduced on the save and delivery paths; review found related amplification via repeated placeholders and an unhandled recursion error.
- 2026-11-06 fix-deployed vendor 6.4.1 deployed on the CIRCL production instance.
- 2026-11-06 08:10 UTC Fix developed vendor https://github.com/vulnerability-lookup/vulnerability-lookup/commit/2076ffdae3d024649114eeb6fd185338d4bb1f40
- 2026-11-06 08:24 UTC Fix available vendor Vulnerability-Lookup 6.4.1 released. https://github.com/vulnerability-lookup/vulnerability-lookup/releases/tag/v6.4.1
- 2026-11-06 08:24 UTC Public disclosure vendor Fix and changelog entry describing the issue made public with the 6.4.1 release. https://github.com/vulnerability-lookup/vulnerability-lookup/blob/v6.4.1/CHANGELOG.md
- 2026-11-06 08:43 UTC Identifier assigned gna GCVE-1-2026-20054 assigned.
- 2026-11-06 08:43 UTC Advisory published gna https://vulnerability.circl.lu/vuln/gcve-1-2026-20054
EU-CRA
EU
Not applicable
No exploitation observed; the Article 14 notification obligations for actively exploited vulnerabilities do not apply.
Deadlines and status are stated by the publisher. Submitting on time is not evidence of compliance, and this page does not judge it.
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-123660",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-10T17:39:52.273550Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-10T17:40:09.862Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "vulnerability-lookup",
"vendor": "vulnerability-lookup",
"versions": [
{
"lessThan": "6.4.1",
"status": "affected",
"version": "5.5.1",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Matteo Panzeri (Universit\u00e0 di Pavia), GitHub @matte1782"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5"
},
{
"lang": "en",
"type": "coordinator",
"value": "C\u00e9dric Bonhomme"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "In Vulnerability-Lookup 5.5.1 up to but not including 6.4.1, a signed-in user could make the server allocate memory far out of proportion to their input through a webhook notification\u0027s payload template. Each placeholder\u0027s format specifier was passed unchanged to Python\u0027s string formatting, which builds the padded result before its size can be checked. A template of a few dozen bytes, such as {\"text\": \"{title:\u0026gt;999999999}\"}, therefore produced a string of about 1 GB when the notification form test-rendered it on save, and repeating such fields multiplied the cost. Templates that passed the save check could also repeat placeholders such as {text} thousands of times; the notification daemon rebuilt those on every webhook delivery. Deeply nested templates raised an unhandled recursion error (HTTP 500). An attacker needs only an account, which the default configuration lets anyone create after e-mail confirmation. They could exhaust the memory of web workers or the notification daemon, causing a denial of service. Version 6.4.1 caps every number in a format specifier at 256, limits a rendered template to 1,000,000 characters both on save and at delivery, and rejects templates nested deeper than 32 levels."
}
],
"value": "In Vulnerability-Lookup 5.5.1 up to but not including 6.4.1, a signed-in user could make the server allocate memory far out of proportion to their input through a webhook notification\u0027s payload template. Each placeholder\u0027s format specifier was passed unchanged to Python\u0027s string formatting, which builds the padded result before its size can be checked. A template of a few dozen bytes, such as {\"text\": \"{title:\u003e999999999}\"}, therefore produced a string of about 1 GB when the notification form test-rendered it on save, and repeating such fields multiplied the cost. Templates that passed the save check could also repeat placeholders such as {text} thousands of times; the notification daemon rebuilt those on every webhook delivery. Deeply nested templates raised an unhandled recursion error (HTTP 500). An attacker needs only an account, which the default configuration lets anyone create after e-mail confirmation. They could exhaust the memory of web workers or the notification daemon, causing a denial of service. Version 6.4.1 caps every number in a format specifier at 256, limits a rendered template to 1,000,000 characters both on save and at delivery, and rejects templates nested deeper than 32 levels."
}
],
"impacts": [
{
"capecId": "CAPEC-130",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-130 Excessive Allocation"
}
]
}
],
"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: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-1284",
"description": "CWE-1284 Improper Validation of Specified Quantity in Input",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-674",
"description": "CWE-674 Uncontrolled Recursion",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-06T09:04:51.732Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"tags": [
"patch"
],
"url": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/2076ffdae3d024649114eeb6fd185338d4bb1f40"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Vulnerability-Lookup: memory amplification through webhook payload template format specifiers",
"x_gcve": [
{
"extensions": {
"bcp-05-x-03": {
"x_timeline": {
"entities": [
{
"category": "discoverer",
"id": "entity-reporter",
"name": "Matteo Panzeri",
"references": [
"https://github.com/matte1782"
]
},
{
"category": "vendor",
"description": "Maintainer of Vulnerability-Lookup and operator of the vulnerability.circl.lu instance.",
"id": "entity-circl",
"name": "CIRCL",
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup"
]
}
],
"events": [
{
"actor": "researcher",
"actorRefs": [
"entity-reporter"
],
"description": "Private report sent to info@circl.lu, based on a bounded local run against commit 2bb9b2f0; no request was sent to the public service.",
"id": "evt-reported",
"recipientRefs": [
"entity-circl"
],
"timestamp": "2026-11-05T19:41:52Z",
"type": "reported"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "Reproduced on the save and delivery paths; review found related amplification via repeated placeholders and an unhandled recursion error.",
"id": "evt-validated",
"referencedEvents": [
"evt-reported"
],
"timestamp": "2026-11-06",
"type": "validated"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"id": "evt-fix-developed",
"referencedEvents": [
"evt-validated"
],
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup/commit/2076ffdae3d024649114eeb6fd185338d4bb1f40"
],
"timestamp": "2026-11-06T08:10:26Z",
"type": "fix-developed"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "Vulnerability-Lookup 6.4.1 released.",
"id": "evt-fix-available",
"referencedEvents": [
"evt-fix-developed"
],
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup/releases/tag/v6.4.1"
],
"timestamp": "2026-11-06T08:24:38Z",
"type": "fix-available"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "Fix and changelog entry describing the issue made public with the 6.4.1 release.",
"id": "evt-public-disclosure",
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup/blob/v6.4.1/CHANGELOG.md"
],
"timestamp": "2026-11-06T08:24:38Z",
"type": "public-disclosure"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "6.4.1 deployed on the CIRCL production instance.",
"id": "evt-fix-deployed",
"referencedEvents": [
"evt-fix-available"
],
"timestamp": "2026-11-06",
"type": "fix-deployed"
},
{
"actor": "gna",
"actorRefs": [
"entity-circl"
],
"description": "GCVE-1-2026-20054 assigned.",
"id": "evt-identifier-assigned",
"timestamp": "2026-11-06T08:43:51Z",
"type": "identifier-assigned"
},
{
"actor": "gna",
"actorRefs": [
"entity-circl"
],
"id": "evt-advisory-published",
"referencedEvents": [
"evt-identifier-assigned"
],
"references": [
"https://vulnerability.circl.lu/vuln/gcve-1-2026-20054"
],
"timestamp": "2026-11-06T08:43:51Z",
"type": "advisory-published"
}
],
"regulatory": [
{
"assessment": "not-applicable",
"framework": "EU-CRA",
"jurisdiction": "EU",
"notes": "No exploitation observed; the Article 14 notification obligations for actively exploited vulnerabilities do not apply."
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20054"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-123660",
"datePublished": "2026-11-06T08:58:24.857Z",
"dateReserved": "2026-11-06T08:57:03.368Z",
"dateUpdated": "2026-11-10T17:40:09.862Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-112192 (GCVE-0-2026-112192)
Vulnerability from cvelistv5 – Published: 2026-10-19 09:28 – Updated: 2026-10-30 10:06| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/6c02f0f5c | patch |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-10-19 09:23 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/6c02f0f5c.patch
e7e99bab776b… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
6c02f0f5c33a
|
fix: [settings] Module settings keep the flags the module | e7e99bab776b… |
Fix summary
The fix ensures that the redacted and cli_only flags declared by a module in its own setting definition are preserved when the server rebuilds the setting for API exposure. By carrying these flags through to the final setting object, the existing enforcement logic (which checks these flags before serving values or accepting edits) now correctly applies to module-supplied settings, preventing disclosure of redacted values and blocking API-based modification of CLI-only settings.
Patch summary
In app/Model/Server.php, within the readModuleSettings() method, a loop was added after the setting fields are populated that iterates over the strings 'redacted' and 'cli_only'. For each flag, if the module's own result array contains a truthy value for that key, the flag is set to true on the rebuilt $setting object before it is stored in $serverSettings. This is a 6-line addition that preserves the module-declared guard flags that were previously discarded during the setting reconstruction.
CVSS rationale
AV:N: MISP is a web application accessible over the network. AC:L: No special race conditions or complex setup are needed; a standard API call to the settings endpoint triggers the issue. AT:N: No manipulation of the attack target is required. PR:L: The attacker needs an authenticated MISP account with permission to view server settings. UI:N: No user interaction is required. VC:L: Sensitive module API keys are exposed, but the scope is limited to settings of modules that declare the redacted flag. VI:N: No direct integrity impact on the vulnerable component's data beyond the VA impact. VA:L: CLI-only settings can be modified via the API, representing a limited integrity impact on the vulnerable component's configuration. SC/SI/SA:N: No evidence of impact on other components or systems.
Weakness rationale
- CWE-200 The redacted flag, which instructs the server to mask a setting's value (e.g., an API key), was dropped during setting reconstruction. This caused the sensitive value to be served in plaintext via API endpoints to any authenticated user, constituting an information exposure.
- CWE-862 The cli_only flag, which restricts a setting to command-line modification only, was dropped during setting reconstruction. This allowed the setting to be modified via the web API without the intended authorization restriction, effectively bypassing the access control the module author specified.
Attack pattern rationale
- CAPEC-126 The primary impact is that sensitive data (module API keys marked as redacted) is discoverable via standard API endpoints because the redaction flag was not enforced. An authenticated user querying server settings can obtain credentials that the module author intended to keep hidden. This is the closest CAPEC to the information-disclosure aspect of the vulnerability. The secondary aspect (CLI-only settings editable via API) is an authorization bypass that does not map cleanly to a single CAPEC; CAPEC-126 is selected as the best available match for the overall pattern of accessing data that should be restricted.
Assumptions to verify
- The affected version boundary is inferred from the tag_version_boundary metadata (fix is 10 commits after v2.5.48); the exact fixed release version is not stated in the patch metadata.
- PR:L assumes that reading server settings requires an authenticated MISP user with appropriate role permissions; the patch does not specify the exact permission level required.
- The CAPEC-126 mapping is the closest available pattern for the information-disclosure aspect; the authorization-bypass aspect (cli_only) does not have a precise CAPEC match and is subsumed under the same mapping.
- VC:L assumes the exposed data is limited to module-specific API keys rather than system-wide credentials; the actual sensitivity depends on which modules are installed.
- The commit message references a separate issue (branch read) reported by Jeroen Pinoy; this vulnerability was discovered as a side effect of fixing that issue, so Jeroen Pinoy is not credited as a finder of this specific vulnerability.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
7 | 11 | medium | 5 |
- 2026-09-28 10:14 UTC Fix developed Corrective change authored (6c02f0f5c33aab96e90df8791c3873303d7e99ce): fix: [settings] Module settings keep the flags the module https://github.com/MISP/MISP/commit/6c02f0f5c.patch
- 2026-09-29 08:11 UTC Fix available Fix released in MISP v2.5.48. https://github.com/MISP/MISP/releases/tag/v2.5.48
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-112192",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-19T17:13:11.731385Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T17:13:51.582Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"app/Model/Server.php (readModuleSettings)"
],
"product": "MISP",
"programFiles": [
"app/Model/Server.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.48",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eMISP contains a vulnerability in the handling of module plugin settings. When the server rebuilds module-supplied settings for API consumption, it drops the redacted and cli_only flags that a module declares in its own configuration metadata.\u003c/p\u003e\u003cp\u003eAs a result:\u003c/p\u003e\u003cp\u003e- A module that marks a setting (such as an API key) as redacted still has its value returned in full by the servers/getSetting and servers/serverSettingsEdit endpoints, exposing sensitive credentials to any authenticated user who can read server settings.\u003c/p\u003e\u003cp\u003e- A module that marks a setting as cli_only (intended to be editable only via the command-line interface) can still be modified through the web API, bypassing the intended access restriction.\u003c/p\u003e\u003cp\u003eAn authenticated user with access to server settings can therefore read sensitive module credentials and modify settings that the module author intended to restrict to CLI-only access.\u003c/p\u003e\u003cp\u003eAffected: \u0026lt;2.5.48\u003c/p\u003e"
}
],
"value": "MISP contains a vulnerability in the handling of module plugin settings. When the server rebuilds module-supplied settings for API consumption, it drops the redacted and cli_only flags that a module declares in its own configuration metadata.\n\nAs a result:\n\n- A module that marks a setting (such as an API key) as redacted still has its value returned in full by the servers/getSetting and servers/serverSettingsEdit endpoints, exposing sensitive credentials to any authenticated user who can read server settings.\n\n- A module that marks a setting as cli_only (intended to be editable only via the command-line interface) can still be modified through the web API, bypassing the intended access restriction.\n\nAn authenticated user with access to server settings can therefore read sensitive module credentials and modify settings that the module author intended to restrict to CLI-only access.\n\nAffected: \u003c2.5.48"
}
],
"impacts": [
{
"capecId": "CAPEC-126",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-126 Sensitive Data Discovery"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 5.3,
"baseSeverity": "MEDIUM",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:L/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "LOW",
"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-19T09:23:47Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-200",
"description": "CWE-200 Exposure of Sensitive Information to an Unauthorized Actor",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-30T10:06:28.714Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/6c02f0f5c"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe fix ensures that the redacted and cli_only flags declared by a module in its own setting definition are preserved when the server rebuilds the setting for API exposure. By carrying these flags through to the final setting object, the existing enforcement logic (which checks these flags before serving values or accepting edits) now correctly applies to module-supplied settings, preventing disclosure of redacted values and blocking API-based modification of CLI-only settings.\u003c/p\u003e"
}
],
"value": "The fix ensures that the redacted and cli_only flags declared by a module in its own setting definition are preserved when the server rebuilds the setting for API exposure. By carrying these flags through to the final setting object, the existing enforcement logic (which checks these flags before serving values or accepting edits) now correctly applies to module-supplied settings, preventing disclosure of redacted values and blocking API-based modification of CLI-only settings."
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "MISP Module Settings Expose Redacted Values and Allow API Modification of CLI-Only Settings",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The affected version boundary is inferred from the tag_version_boundary metadata (fix is 10 commits after v2.5.48); the exact fixed release version is not stated in the patch metadata.",
"PR:L assumes that reading server settings requires an authenticated MISP user with appropriate role permissions; the patch does not specify the exact permission level required.",
"The CAPEC-126 mapping is the closest available pattern for the information-disclosure aspect; the authorization-bypass aspect (cli_only) does not have a precise CAPEC match and is subsumed under the same mapping.",
"VC:L assumes the exposed data is limited to module-specific API keys rather than system-wide credentials; the actual sensitivity depends on which modules are installed.",
"The commit message references a separate issue (branch read) reported by Jeroen Pinoy; this vulnerability was discovered as a side effect of fixing that issue, so Jeroen Pinoy is not credited as a finder of this specific vulnerability."
],
"capecRationale": [
{
"capecId": "CAPEC-126",
"rationale": "The primary impact is that sensitive data (module API keys marked as redacted) is discoverable via standard API endpoints because the redaction flag was not enforced. An authenticated user querying server settings can obtain credentials that the module author intended to keep hidden. This is the closest CAPEC to the information-disclosure aspect of the vulnerability. The secondary aspect (CLI-only settings editable via API) is an authorization bypass that does not map cleanly to a single CAPEC; CAPEC-126 is selected as the best available match for the overall pattern of accessing data that should be restricted."
}
],
"commit": "6c02f0f5c33aab96e90df8791c3873303d7e99ce",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5"
}
],
"cvssRationale": "AV:N: MISP is a web application accessible over the network. AC:L: No special race conditions or complex setup are needed; a standard API call to the settings endpoint triggers the issue. AT:N: No manipulation of the attack target is required. PR:L: The attacker needs an authenticated MISP account with permission to view server settings. UI:N: No user interaction is required. VC:L: Sensitive module API keys are exposed, but the scope is limited to settings of modules that declare the redacted flag. VI:N: No direct integrity impact on the vulnerable component\u0027s data beyond the VA impact. VA:L: CLI-only settings can be modified via the API, representing a limited integrity impact on the vulnerable component\u0027s configuration. SC/SI/SA:N: No evidence of impact on other components or systems.",
"fixSummary": "The fix ensures that the redacted and cli_only flags declared by a module in its own setting definition are preserved when the server rebuilds the setting for API exposure. By carrying these flags through to the final setting object, the existing enforcement logic (which checks these flags before serving values or accepting edits) now correctly applies to module-supplied settings, preventing disclosure of redacted values and blocking API-based modification of CLI-only settings.",
"generatedAt": "2026-10-19T09:23:47.526920Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "e7e99bab776b221dd41bf562693fc308d8a2ee619806b1bfef26bb008212205a",
"patchSummary": "In app/Model/Server.php, within the readModuleSettings() method, a loop was added after the setting fields are populated that iterates over the strings \u0027redacted\u0027 and \u0027cli_only\u0027. For each flag, if the module\u0027s own result array contains a truthy value for that key, the flag is set to true on the rebuilt $setting object before it is stored in $serverSettings. This is a 6-line addition that preserves the module-declared guard flags that were previously discarded during the setting reconstruction.",
"patchTruncated": false,
"patches": [
{
"commit": "6c02f0f5c33aab96e90df8791c3873303d7e99ce",
"date": "Mon, 28 Sep 2026 12:14:28 +0200",
"patchSha256": "e7e99bab776b221dd41bf562693fc308d8a2ee619806b1bfef26bb008212205a",
"source": "https://github.com/MISP/MISP/commit/6c02f0f5c.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/6c02f0f5c.patch",
"subject": "fix: [settings] Module settings keep the flags the module"
}
],
"source": "https://github.com/MISP/MISP/commit/6c02f0f5c.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T09:23:47Z",
"version": "2.0.3"
},
"subject": "fix: [settings] Module settings keep the flags the module",
"tagVersionBoundary": {
"commits_after_fix": 10,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.48",
"version": "2.5.48",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-200",
"rationale": "The redacted flag, which instructs the server to mask a setting\u0027s value (e.g., an API key), was dropped during setting reconstruction. This caused the sensitive value to be served in plaintext via API endpoints to any authenticated user, constituting an information exposure."
},
{
"cweId": "CWE-862",
"rationale": "The cli_only flag, which restricts a setting to command-line modification only, was dropped during setting reconstruction. This allowed the setting to be modified via the web API without the intended authorization restriction, effectively bypassing the access control the module author specified."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (6c02f0f5c33aab96e90df8791c3873303d7e99ce): fix: [settings] Module settings keep the flags the module",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/MISP/commit/6c02f0f5c.patch"
],
"timestamp": "2026-09-28T10:14:28Z",
"type": "fix-developed"
},
{
"description": "Fix released in MISP v2.5.48.",
"id": "evt-fix-available-1",
"referencedEvents": [
"evt-fix-developed-1"
],
"references": [
"https://github.com/MISP/MISP/releases/tag/v2.5.48"
],
"timestamp": "2026-09-29T08:11:29Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20310"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-112192",
"datePublished": "2026-10-19T09:28:08.054Z",
"dateReserved": "2026-10-19T09:28:06.573Z",
"dateUpdated": "2026-10-30T10:06:28.714Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-112188 (GCVE-0-2026-112188)
Vulnerability from cvelistv5 – Published: 2026-10-19 09:22 – Updated: 2026-10-28 20:05| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/30b849102 | patch |
qwen3.8:27b
1 event
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-10-19 09:21 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/30b849102.patch
70885748c270… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
30b849102c68
|
fix: [settings] Server setting lookups address one setting, | 70885748c270… |
Fix summary
The settings lookup function now validates that the resolved node is a leaf setting (has a 'level' property and is not an array representing a branch). If the resolved node is a branch or otherwise does not represent a single setting, the function returns false, indicating an invalid setting. This prevents the redaction check from being bypassed and stops the endpoints from returning entire configuration branches containing sensitive values.
Patch summary
In app/Model/Server.php, the getSettingData() method previously checked only for the presence of a 'level' key before returning the setting. The patch adds a guard clause: if the resolved setting is an array (i.e., a branch/sub-tree) or lacks the 'level' key, the function immediately returns false. The existing logic for setting the name and resolving options is then applied only to confirmed leaf settings. This ensures callers that assumed a single-setting result never receive a multi-key branch.
CVSS rationale
AV:N: MISP is a network-accessible web application. AC:L: The attack requires only substituting a branch name for a leaf setting name in an existing API call; no race conditions or complex timing are needed. AT:N: No manipulation of the target environment is required. PR:L: The attacker needs an authenticated account with access to the server settings endpoints; the exact privilege level (admin vs. regular user) is not confirmed in the patch, so Low is assumed. UI:N: No victim interaction is required. VC:H: Sensitive secrets (security salt, Redis passwords, plugin API keys) are fully disclosed. VI:N, VA:N: No integrity or availability impact is evidenced. SC:N, SI:N, SA:N: No impact on subsequent components is indicated.
Weakness rationale
- CWE-200 The settings endpoint returned sensitive configuration values (security salt, Redis passwords, plugin API keys) to a caller who requested a branch name, bypassing the intended redaction mechanism. The data was exposed to an actor who should not have had access to those specific values.
- CWE-285 The redaction check, which serves as an authorization control for sensitive setting values, was effectively bypassed because branch nodes do not carry a redacted flag. The system failed to enforce the intended access restriction on sensitive configuration data.
Attack pattern rationale
- CAPEC-124 The attacker manipulates the setting name parameter supplied to the settings lookup endpoint, substituting a branch name (e.g., 'Security') for a leaf setting name. This causes the application to return a broader data set than intended. CAPEC-124 is the closest match because the core technique is altering a request parameter to change the application's response scope. The mapping is approximate because the parameter is not a traditional HTTP parameter but an application-level setting identifier; no CAPEC specifically covers configuration-tree traversal.
Assumptions to verify
- The exact privilege level required to access the server settings endpoints (admin vs. any authenticated user) is not stated in the patch; PR:L is assumed as the most conservative defensible value.
- The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.48 with 11 commits after fix); the exact last affected version and first fixed version are not explicitly confirmed.
- CAPEC-124 (Parameter Tampering) is the closest available attack pattern; no CAPEC specifically models configuration-tree branch traversal, so the mapping is approximate.
- The patch does not indicate whether unauthenticated access is possible; authentication is assumed based on the nature of server settings endpoints in MISP.
- The Co-Authored-By line references an AI tool (Claude Opus 5); it is listed as a tool credit rather than a human remediation developer.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
7 | 11 | medium | 5 |
- 2026-09-28 10:03 UTC Fix developed Corrective change authored (30b849102c687bb53919f1d5d20851bc20fafa4e): fix: [settings] Server setting lookups address one setting, https://github.com/MISP/MISP/commit/30b849102.patch
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-112188",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-28T17:47:38.444785Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-28T20:05:58.430Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp:*:*:*:*:*:*:*:*"
],
"modules": [
"Server settings (app/Model/Server.php)"
],
"product": "MISP",
"programFiles": [
"app/Model/Server.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.48",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Jeroen Pinoy"
},
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eMISP contains a vulnerability in its server settings lookup mechanism that allows an authenticated user to retrieve sensitive configuration data that should have been redacted.\u003c/p\u003e\u003cp\u003eThe settings lookup function resolves a dotted setting name to a node in the configuration tree. When a branch name (such as Security, MISP, or Plugin) is supplied instead of a specific leaf setting, the function returns the entire sub-tree. Because a branch node does not carry a redaction flag, the redaction check in the settings retrieval endpoint is bypassed, and the full branch contents are returned to the caller. This exposes sensitive values including the security salt, Redis connection passwords, and plugin API keys.\u003c/p\u003e\u003cp\u003eA second endpoint that edits server settings similarly reads the entire configuration store when a branch name is resolved, returning all settings to the caller.\u003c/p\u003e\u003cp\u003eThe impact is disclosure of sensitive server configuration secrets to any user who can access the server settings endpoints.\u003c/p\u003e\u003cp\u003eAffected versions: \u0026lt;2.5.48.\u003c/p\u003e"
}
],
"value": "MISP contains a vulnerability in its server settings lookup mechanism that allows an authenticated user to retrieve sensitive configuration data that should have been redacted.\n\nThe settings lookup function resolves a dotted setting name to a node in the configuration tree. When a branch name (such as Security, MISP, or Plugin) is supplied instead of a specific leaf setting, the function returns the entire sub-tree. Because a branch node does not carry a redaction flag, the redaction check in the settings retrieval endpoint is bypassed, and the full branch contents are returned to the caller. This exposes sensitive values including the security salt, Redis connection passwords, and plugin API keys.\n\nA second endpoint that edits server settings similarly reads the entire configuration store when a branch name is resolved, returning all settings to the caller.\n\nThe impact is disclosure of sensitive server configuration secrets to any user who can access the server settings endpoints.\n\nAffected versions: \u003c2.5.48."
}
],
"impacts": [
{
"capecId": "CAPEC-124",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-124 Parameter Tampering"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7.1,
"baseSeverity": "HIGH",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T09:21:00Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-200",
"description": "CWE-200 Exposure of Sensitive Information to an Unauthorized Actor",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-285",
"description": "CWE-285 Improper Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T09:22:37.880Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/30b849102"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe settings lookup function now validates that the resolved node is a leaf setting (has a \u0027level\u0027 property and is not an array representing a branch). If the resolved node is a branch or otherwise does not represent a single setting, the function returns false, indicating an invalid setting. This prevents the redaction check from being bypassed and stops the endpoints from returning entire configuration branches containing sensitive values.\u003c/p\u003e"
}
],
"value": "The settings lookup function now validates that the resolved node is a leaf setting (has a \u0027level\u0027 property and is not an array representing a branch). If the resolved node is a branch or otherwise does not represent a single setting, the function returns false, indicating an invalid setting. This prevents the redaction check from being bypassed and stops the endpoints from returning entire configuration branches containing sensitive values."
}
],
"title": "MISP Server Settings Lookup Exposes Sensitive Configuration Data via Branch Name Resolution",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The exact privilege level required to access the server settings endpoints (admin vs. any authenticated user) is not stated in the patch; PR:L is assumed as the most conservative defensible value.",
"The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.48 with 11 commits after fix); the exact last affected version and first fixed version are not explicitly confirmed.",
"CAPEC-124 (Parameter Tampering) is the closest available attack pattern; no CAPEC specifically models configuration-tree branch traversal, so the mapping is approximate.",
"The patch does not indicate whether unauthenticated access is possible; authentication is assumed based on the nature of server settings endpoints in MISP.",
"The Co-Authored-By line references an AI tool (Claude Opus 5); it is listed as a tool credit rather than a human remediation developer."
],
"capecRationale": [
{
"capecId": "CAPEC-124",
"rationale": "The attacker manipulates the setting name parameter supplied to the settings lookup endpoint, substituting a branch name (e.g., \u0027Security\u0027) for a leaf setting name. This causes the application to return a broader data set than intended. CAPEC-124 is the closest match because the core technique is altering a request parameter to change the application\u0027s response scope. The mapping is approximate because the parameter is not a traditional HTTP parameter but an application-level setting identifier; no CAPEC specifically covers configuration-tree traversal."
}
],
"commit": "30b849102c687bb53919f1d5d20851bc20fafa4e",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Jeroen Pinoy"
},
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5"
}
],
"cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: The attack requires only substituting a branch name for a leaf setting name in an existing API call; no race conditions or complex timing are needed. AT:N: No manipulation of the target environment is required. PR:L: The attacker needs an authenticated account with access to the server settings endpoints; the exact privilege level (admin vs. regular user) is not confirmed in the patch, so Low is assumed. UI:N: No victim interaction is required. VC:H: Sensitive secrets (security salt, Redis passwords, plugin API keys) are fully disclosed. VI:N, VA:N: No integrity or availability impact is evidenced. SC:N, SI:N, SA:N: No impact on subsequent components is indicated.",
"fixSummary": "The settings lookup function now validates that the resolved node is a leaf setting (has a \u0027level\u0027 property and is not an array representing a branch). If the resolved node is a branch or otherwise does not represent a single setting, the function returns false, indicating an invalid setting. This prevents the redaction check from being bypassed and stops the endpoints from returning entire configuration branches containing sensitive values.",
"generatedAt": "2026-10-19T09:21:00.388917Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "70885748c270bb21036c46d9142ef00525834a5c03669c4c4a856d7db6ef58e2",
"patchSummary": "In app/Model/Server.php, the getSettingData() method previously checked only for the presence of a \u0027level\u0027 key before returning the setting. The patch adds a guard clause: if the resolved setting is an array (i.e., a branch/sub-tree) or lacks the \u0027level\u0027 key, the function immediately returns false. The existing logic for setting the name and resolving options is then applied only to confirmed leaf settings. This ensures callers that assumed a single-setting result never receive a multi-key branch.",
"patchTruncated": false,
"patches": [
{
"commit": "30b849102c687bb53919f1d5d20851bc20fafa4e",
"date": "Mon, 28 Sep 2026 12:03:56 +0200",
"patchSha256": "70885748c270bb21036c46d9142ef00525834a5c03669c4c4a856d7db6ef58e2",
"source": "https://github.com/MISP/MISP/commit/30b849102.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/30b849102.patch",
"subject": "fix: [settings] Server setting lookups address one setting,"
}
],
"source": "https://github.com/MISP/MISP/commit/30b849102.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T09:21:00Z",
"version": "2.0.3"
},
"subject": "fix: [settings] Server setting lookups address one setting,",
"tagVersionBoundary": {
"commits_after_fix": 11,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.48",
"version": "2.5.48",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-200",
"rationale": "The settings endpoint returned sensitive configuration values (security salt, Redis passwords, plugin API keys) to a caller who requested a branch name, bypassing the intended redaction mechanism. The data was exposed to an actor who should not have had access to those specific values."
},
{
"cweId": "CWE-285",
"rationale": "The redaction check, which serves as an authorization control for sensitive setting values, was effectively bypassed because branch nodes do not carry a redacted flag. The system failed to enforce the intended access restriction on sensitive configuration data."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (30b849102c687bb53919f1d5d20851bc20fafa4e): fix: [settings] Server setting lookups address one setting,",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/MISP/commit/30b849102.patch"
],
"timestamp": "2026-09-28T10:03:56Z",
"type": "fix-developed"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20327"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-112188",
"datePublished": "2026-10-19T09:22:37.880Z",
"dateReserved": "2026-10-19T09:22:31.139Z",
"dateUpdated": "2026-10-28T20:05:58.430Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-55835 (GCVE-0-2026-55835)
Vulnerability from cvelistv5 – Published: 2026-10-23 04:14 – Updated: 2026-10-23 21:05- CWE-233 - Improper Handling of Parameters
| URL | Tags |
|---|---|
| https://github.com/Lookyloo/lookyloo/security/adv… | x_refsource_CONFIRM |
| https://github.com/Lookyloo/lookyloo/pull/1330 | x_refsource_MISC |
| https://github.com/Lookyloo/lookyloo/commit/d5b9a… | x_refsource_MISC |
| https://github.com/Lookyloo/lookyloo/releases/tag… | x_refsource_MISC |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-55835",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-23T17:33:07.937098Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-23T21:05:41.736Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"product": "lookyloo",
"vendor": "Lookyloo",
"versions": [
{
"status": "affected",
"version": "\u003c 1.39.4"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "Lookyloo is a web interface that allows users to capture a website page and then display a tree of domains that call each other. Prior to version 1.39.4, an unauthenticated user can trigger Lookyloo\u0027s \"report a capture\" email on demand (this is expected). The /json/\u003cuuid\u003e/report API endpoint (CaptureReport) is incorrectly passing the email and comment parameters, overwriting as_admin. When True, as_admin will trigger a search query on a MISP instance (if configured) and add a list of matching URLs in the email sent to the analyst (not the submitter, so there is no risk of leaking information) . It could potentially cause a DoS on the MISP instance. This issue has been patched in version 1.39.4."
}
],
"metrics": [
{
"cvssV4_0": {
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 6.9,
"baseSeverity": "MEDIUM",
"privilegesRequired": "NONE",
"subAvailabilityImpact": "LOW",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:N/SI:N/SA:L",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE"
}
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-233",
"description": "CWE-233: Improper Handling of Parameters",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-23T04:14:02.867Z",
"orgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"shortName": "GitHub_M"
},
"references": [
{
"name": "https://github.com/Lookyloo/lookyloo/security/advisories/GHSA-66gj-hmcp-5cfj",
"tags": [
"x_refsource_CONFIRM"
],
"url": "https://github.com/Lookyloo/lookyloo/security/advisories/GHSA-66gj-hmcp-5cfj"
},
{
"name": "https://github.com/Lookyloo/lookyloo/pull/1330",
"tags": [
"x_refsource_MISC"
],
"url": "https://github.com/Lookyloo/lookyloo/pull/1330"
},
{
"name": "https://github.com/Lookyloo/lookyloo/commit/d5b9a401998cd50b88e5d7425f82baac78d8f082",
"tags": [
"x_refsource_MISC"
],
"url": "https://github.com/Lookyloo/lookyloo/commit/d5b9a401998cd50b88e5d7425f82baac78d8f082"
},
{
"name": "https://github.com/Lookyloo/lookyloo/releases/tag/v1.39.4",
"tags": [
"x_refsource_MISC"
],
"url": "https://github.com/Lookyloo/lookyloo/releases/tag/v1.39.4"
}
],
"source": {
"advisory": "GHSA-66gj-hmcp-5cfj",
"discovery": "UNKNOWN"
},
"title": "Lookyloo: Potential sub-system DoS due to parameter missmatch in notification"
}
},
"cveMetadata": {
"assignerOrgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"assignerShortName": "GitHub_M",
"cveId": "CVE-2026-55835",
"datePublished": "2026-10-23T04:14:02.867Z",
"dateReserved": "2026-06-17T16:29:38.865Z",
"dateUpdated": "2026-10-23T21:05:41.736Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-112179 (GCVE-0-2026-112179)
Vulnerability from cvelistv5 – Published: 2026-10-19 08:53 – Updated: 2026-10-19 18:32- CWE-200 - Exposure of Sensitive Information to an Unauthorized Actor
| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/0be4564a9 | patch |
qwen3.8:27b
1 event
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-10-19 08:52 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/0be4564a9.patch
4195b30bddf4… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
0be4564a98f3
|
fix: [sync] Filter the tags of every event report pushed to a | 4195b30bddf4… |
Fix summary
The non-exportable tag filtering is now invoked for each individual event report within the iteration loop, ensuring that restricted tags are removed from every report before it is transmitted to the remote MISP instance. This prevents the leakage of tags that were explicitly marked as non-exportable.
Patch summary
In app/Model/Event.php, the call to __removeNonExportableTags was moved from a single post-loop invocation (which used the last $key value from the foreach) into the else branch of the loop body, so it executes for each non-empty report individually. The post-loop else block that applied the filter to a single report was removed, eliminating both the tag-leakage bug and the null-report push when the last report was empty.
CVSS rationale
AV:N: The vulnerability is triggered over the network during MISP-to-MISP synchronization. AC:L: No special conditions are needed beyond a configured sync relationship and an event with multiple reports. AT:N: No attacker interaction is required; the bug triggers on any sync push. PR:L: An authenticated user with permission to push events to a remote server is required. UI:N: No user interaction beyond initiating the sync. VC:L: Non-exportable tags (restricted metadata) are disclosed to the remote instance; the core event data is not exposed. VI:N, VA:N: No integrity or availability impact on the local instance. SC:N, SI:N, SA:N: No impact on the remote instance's confidentiality, integrity, or availability beyond receiving the tags it should not have.
Weakness rationale
- CWE-200 Tags explicitly marked as non-exportable were not filtered from event reports during synchronization, exposing restricted information to the remote MISP instance. The root cause is a logic error (filter applied once instead of per-item), but the security consequence is information disclosure.
Attack pattern rationale
- CAPEC-128 This is the closest available CAPEC pattern. The vulnerability arises from a code logic error that causes data (non-exportable tags) to be improperly exposed during a legitimate sync operation. The mapping is uncertain because the issue is a logic bug in data filtering rather than a deliberate attacker action; no CAPEC pattern precisely covers 'improper per-item filtering in a loop causing data leakage during a legitimate API operation.'
Assumptions to verify
- The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.48 with 34 commits after fix), suggesting the fix is included in v2.5.48 and prior versions are affected. No explicit version range is stated in the patch.
- PR:L assumes that a non-admin authenticated user with push-to-remote permissions can trigger the sync; if only administrators can initiate sync, PR should be raised to H.
- The CAPEC-128 mapping is uncertain; no CAPEC pattern precisely describes a per-item filtering logic error causing data leakage during a legitimate operation.
- The security impact is assessed as limited to tag disclosure; the actual sensitivity of 'non-exportable' tags depends on MISP deployment configuration and is not specified in the patch.
- The availability impact (null report push causing remote save failure) is considered minor and not reflected in the CVSS vector as the primary concern is information disclosure.
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 | 11 | medium | 5 |
- 2026-09-24 14:32 UTC Fix developed Corrective change authored (0be4564a98f37c568a35aa88c5b2bf598a23328a): fix: [sync] Filter the tags of every event report pushed to a https://github.com/MISP/MISP/commit/0be4564a9.patch
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-112179",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-19T18:32:17.990508Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T18:32:29.985Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp:*:*:*:*:*:*:*:*"
],
"modules": [
"Event Synchronization"
],
"product": "MISP",
"programFiles": [
"app/Model/Event.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.48",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
},
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eIn MISP, the event synchronization process contained a logic error in the preparation of event reports for remote push. The filtering of non-exportable tags was applied only once after the iteration over all reports, rather than to each individual report.\u003c/p\u003e\u003cp\u003eAs a result:\u003c/p\u003e\u003cp\u003e- All reports except the last one in the set were pushed to the remote MISP instance with their non-exportable tags intact, effectively disclosing restricted tag information to the receiving instance.\u003c/p\u003e\u003cp\u003e- When the last report in the set was withheld (empty), a null report was pushed, causing the remote instance to fail saving the event.\u003c/p\u003e\u003cp\u003eThis issue affects any MISP instance configured to push events with multiple reports to a remote server via synchronization.\u003c/p\u003e\u003cp\u003eAffected: \u0026lt;2.5.48.\u003c/p\u003e"
}
],
"value": "In MISP, the event synchronization process contained a logic error in the preparation of event reports for remote push. The filtering of non-exportable tags was applied only once after the iteration over all reports, rather than to each individual report.\n\nAs a result:\n\n- All reports except the last one in the set were pushed to the remote MISP instance with their non-exportable tags intact, effectively disclosing restricted tag information to the receiving instance.\n\n- When the last report in the set was withheld (empty), a null report was pushed, causing the remote instance to fail saving the event.\n\nThis issue affects any MISP instance configured to push events with multiple reports to a remote server via synchronization.\n\nAffected: \u003c2.5.48."
}
],
"impacts": [
{
"capecId": "CAPEC-128",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-128 Leverage Executable Code to Alter Data"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 5.3,
"baseSeverity": "MEDIUM",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "LOW",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T08:52:13Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-200",
"description": "CWE-200 Exposure of Sensitive Information to an Unauthorized Actor",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T08:53:57.689Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/0be4564a9"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe non-exportable tag filtering is now invoked for each individual event report within the iteration loop, ensuring that restricted tags are removed from every report before it is transmitted to the remote MISP instance. This prevents the leakage of tags that were explicitly marked as non-exportable.\u003c/p\u003e"
}
],
"value": "The non-exportable tag filtering is now invoked for each individual event report within the iteration loop, ensuring that restricted tags are removed from every report before it is transmitted to the remote MISP instance. This prevents the leakage of tags that were explicitly marked as non-exportable."
}
],
"title": "MISP Event Synchronization Exposes Non-Exportable Tags on Remote Instances",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.48 with 34 commits after fix), suggesting the fix is included in v2.5.48 and prior versions are affected. No explicit version range is stated in the patch.",
"PR:L assumes that a non-admin authenticated user with push-to-remote permissions can trigger the sync; if only administrators can initiate sync, PR should be raised to H.",
"The CAPEC-128 mapping is uncertain; no CAPEC pattern precisely describes a per-item filtering logic error causing data leakage during a legitimate operation.",
"The security impact is assessed as limited to tag disclosure; the actual sensitivity of \u0027non-exportable\u0027 tags depends on MISP deployment configuration and is not specified in the patch.",
"The availability impact (null report push causing remote save failure) is considered minor and not reflected in the CVSS vector as the primary concern is information disclosure."
],
"capecRationale": [
{
"capecId": "CAPEC-128",
"rationale": "This is the closest available CAPEC pattern. The vulnerability arises from a code logic error that causes data (non-exportable tags) to be improperly exposed during a legitimate sync operation. The mapping is uncertain because the issue is a logic bug in data filtering rather than a deliberate attacker action; no CAPEC pattern precisely covers \u0027improper per-item filtering in a loop causing data leakage during a legitimate API operation.\u0027"
}
],
"commit": "0be4564a98f37c568a35aa88c5b2bf598a23328a",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
},
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
}
],
"cvssRationale": "AV:N: The vulnerability is triggered over the network during MISP-to-MISP synchronization. AC:L: No special conditions are needed beyond a configured sync relationship and an event with multiple reports. AT:N: No attacker interaction is required; the bug triggers on any sync push. PR:L: An authenticated user with permission to push events to a remote server is required. UI:N: No user interaction beyond initiating the sync. VC:L: Non-exportable tags (restricted metadata) are disclosed to the remote instance; the core event data is not exposed. VI:N, VA:N: No integrity or availability impact on the local instance. SC:N, SI:N, SA:N: No impact on the remote instance\u0027s confidentiality, integrity, or availability beyond receiving the tags it should not have.",
"fixSummary": "The non-exportable tag filtering is now invoked for each individual event report within the iteration loop, ensuring that restricted tags are removed from every report before it is transmitted to the remote MISP instance. This prevents the leakage of tags that were explicitly marked as non-exportable.",
"generatedAt": "2026-10-19T08:52:13.881684Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "4195b30bddf42380bf30e617b46cdf8e6a5db388a559dc133f98d401f36c35de",
"patchSummary": "In app/Model/Event.php, the call to __removeNonExportableTags was moved from a single post-loop invocation (which used the last $key value from the foreach) into the else branch of the loop body, so it executes for each non-empty report individually. The post-loop else block that applied the filter to a single report was removed, eliminating both the tag-leakage bug and the null-report push when the last report was empty.",
"patchTruncated": false,
"patches": [
{
"commit": "0be4564a98f37c568a35aa88c5b2bf598a23328a",
"date": "Thu, 24 Sep 2026 16:32:31 +0200",
"patchSha256": "4195b30bddf42380bf30e617b46cdf8e6a5db388a559dc133f98d401f36c35de",
"source": "https://github.com/MISP/MISP/commit/0be4564a9.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/0be4564a9.patch",
"subject": "fix: [sync] Filter the tags of every event report pushed to a"
}
],
"source": "https://github.com/MISP/MISP/commit/0be4564a9.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T08:52:13Z",
"version": "2.0.3"
},
"subject": "fix: [sync] Filter the tags of every event report pushed to a",
"tagVersionBoundary": {
"commits_after_fix": 34,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.48",
"version": "2.5.48",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-200",
"rationale": "Tags explicitly marked as non-exportable were not filtered from event reports during synchronization, exposing restricted information to the remote MISP instance. The root cause is a logic error (filter applied once instead of per-item), but the security consequence is information disclosure."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (0be4564a98f37c568a35aa88c5b2bf598a23328a): fix: [sync] Filter the tags of every event report pushed to a",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/MISP/commit/0be4564a9.patch"
],
"timestamp": "2026-09-24T14:32:31Z",
"type": "fix-developed"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20283"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-112179",
"datePublished": "2026-10-19T08:53:57.689Z",
"dateReserved": "2026-10-19T08:53:56.176Z",
"dateUpdated": "2026-10-19T18:32:29.985Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-112178 (GCVE-0-2026-112178)
Vulnerability from cvelistv5 – Published: 2026-10-19 08:50 – Updated: 2026-10-19 17:20- CWE-862 - Missing Authorization
| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/9c5af321f | patch |
qwen3.8:27b
1 event
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-10-19 08:49 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/9c5af321f.patch
c50a0b040ef7… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
9c5af321fe8f
|
fix: [proposals] Apply the attribute ACL rules to proposals | c50a0b040ef7… |
Fix summary
The fix enforces the distribution level constraint in the sharing group access check, requiring distribution level 4 (All communities) for the sharing group test to apply. Additionally, the owning organisation is now explicitly granted access to proposals on its own attributes regardless of distribution level, correcting the over-restrictive behavior.
Patch summary
In the shadow attribute model's condition builder, the sharing group check for both objects and attributes now includes an AND condition requiring distribution = 4 alongside the sharing_group_id IN check. The attribute distribution condition was changed from a simple sharing_group_id IN clause to a compound AND condition with distribution = 4. A new OR condition (Event.org_id matching the user's org_id) was added to grant the owning organisation access to proposals on its own attributes.
CVSS rationale
AV:N: MISP is a network-accessible web application. AC:L: The user only needs to be a member of a sharing group; no special conditions or race conditions are required. AT:N: No active attack requirements beyond normal API usage. PR:L: The attacker must be an authenticated user with membership in a relevant sharing group. UI:N: No user interaction is required; the check is server-side. VC:H: The user can view proposals (proposed attribute changes) that should be restricted by distribution level, disclosing sensitive information about proposed changes. VI:N: No integrity impact; the user cannot modify proposals. VA:N: No availability impact. SC/SI/SA:N: No impact on subsequent components.
Weakness rationale
- CWE-862 The authorization check for proposal visibility was missing the distribution level constraint. The system evaluated sharing group membership as sufficient for access without also requiring the distribution level to be 4 (All communities), resulting in an incomplete authorization check that allowed access to proposals on more restrictively distributed attributes.
Attack pattern rationale
- CAPEC-2 The user's sharing group membership (a parameter of their identity/session) was leveraged by the flawed authorization logic to grant access to proposals without the required distribution level check. This is the closest available CAPEC pattern; the user is not actively tampering with parameters, but the system improperly treats group membership as a sufficient access parameter without enforcing the additional distribution constraint. The mapping is uncertain because the vulnerability is more accurately a missing authorization check than active parameter manipulation.
Assumptions to verify
- The CAPEC mapping (CAPEC-2, Parameter Tampering) is the closest available match but is uncertain; the vulnerability is more accurately a missing authorization check (incomplete ACL evaluation) rather than active parameter manipulation by the attacker.
- The affected version boundary is inferred from the tag v2.5.48 and the commit position (35 commits after the fix); exact version boundaries are not explicitly stated in the patch metadata.
- The second aspect of the vulnerability (owner organisation denied access to its own proposals) is primarily a functional/availability defect rather than a security vulnerability, but is included as part of the same fix and the same root cause (incomplete ACL logic).
- CVSS PR:L assumes the attacker must be an authenticated MISP user with membership in a relevant sharing group; no evidence supports unauthenticated access.
- The Co-Authored-By line credits an AI assistant (Claude Opus 5.5) as a remediation developer; this is recorded as-is from the commit metadata.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
7 | 11 | medium | 5 |
- 2026-09-24 14:23 UTC Fix developed Corrective change authored (9c5af321fe8f1d2209c8b3c35f4d570d47e9af9e): fix: [proposals] Apply the attribute ACL rules to proposals https://github.com/MISP/MISP/commit/9c5af321f.patch
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-112178",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-19T17:20:26.843308Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T17:20:40.642Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp:*:*:*:*:*:*:*:*"
],
"modules": [
"ShadowAttribute (proposal/shadow attribute handling)"
],
"product": "MISP",
"programFiles": [
"app/Model/ShadowAttribute.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.48",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
},
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eMISP contains an access control flaw in the proposal (shadow attribute) visibility logic. The authorization check accepted any attribute or object carrying one of the user\u0027s sharing groups without verifying the distribution level, and denied the owning organisation access to proposals on its own organisation-only attributes.\u003c/p\u003e\u003cp\u003e- A user belonging to a sharing group could view proposals on attributes or objects with that sharing group, regardless of the attribute\u0027s distribution level (levels 1-3 should restrict visibility)\u003c/p\u003e\u003cp\u003e- The owning organisation could not view proposals on its own org-only attributes\u003c/p\u003e\u003cp\u003eSecurity impact: Unauthorized disclosure of proposed attribute changes to users who should not have access based on distribution level restrictions.\u003c/p\u003e\u003cp\u003eAffected: \u0026lt;2.5.48\u003c/p\u003e"
}
],
"value": "MISP contains an access control flaw in the proposal (shadow attribute) visibility logic. The authorization check accepted any attribute or object carrying one of the user\u0027s sharing groups without verifying the distribution level, and denied the owning organisation access to proposals on its own organisation-only attributes.\n\n- A user belonging to a sharing group could view proposals on attributes or objects with that sharing group, regardless of the attribute\u0027s distribution level (levels 1-3 should restrict visibility)\n\n- The owning organisation could not view proposals on its own org-only attributes\n\nSecurity impact: Unauthorized disclosure of proposed attribute changes to users who should not have access based on distribution level restrictions.\n\nAffected: \u003c2.5.48"
}
],
"impacts": [
{
"capecId": "CAPEC-2",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-2 Parameter Tampering"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7.1,
"baseSeverity": "HIGH",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T08:49:14Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T08:50:52.402Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/9c5af321f"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe fix enforces the distribution level constraint in the sharing group access check, requiring distribution level 4 (All communities) for the sharing group test to apply. Additionally, the owning organisation is now explicitly granted access to proposals on its own attributes regardless of distribution level, correcting the over-restrictive behavior.\u003c/p\u003e"
}
],
"value": "The fix enforces the distribution level constraint in the sharing group access check, requiring distribution level 4 (All communities) for the sharing group test to apply. Additionally, the owning organisation is now explicitly granted access to proposals on its own attributes regardless of distribution level, correcting the over-restrictive behavior."
}
],
"title": "MISP Proposal ACL Bypass: Incomplete Distribution Level Check in Shadow Attribute Access Control",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The CAPEC mapping (CAPEC-2, Parameter Tampering) is the closest available match but is uncertain; the vulnerability is more accurately a missing authorization check (incomplete ACL evaluation) rather than active parameter manipulation by the attacker.",
"The affected version boundary is inferred from the tag v2.5.48 and the commit position (35 commits after the fix); exact version boundaries are not explicitly stated in the patch metadata.",
"The second aspect of the vulnerability (owner organisation denied access to its own proposals) is primarily a functional/availability defect rather than a security vulnerability, but is included as part of the same fix and the same root cause (incomplete ACL logic).",
"CVSS PR:L assumes the attacker must be an authenticated MISP user with membership in a relevant sharing group; no evidence supports unauthenticated access.",
"The Co-Authored-By line credits an AI assistant (Claude Opus 5.5) as a remediation developer; this is recorded as-is from the commit metadata."
],
"capecRationale": [
{
"capecId": "CAPEC-2",
"rationale": "The user\u0027s sharing group membership (a parameter of their identity/session) was leveraged by the flawed authorization logic to grant access to proposals without the required distribution level check. This is the closest available CAPEC pattern; the user is not actively tampering with parameters, but the system improperly treats group membership as a sufficient access parameter without enforcing the additional distribution constraint. The mapping is uncertain because the vulnerability is more accurately a missing authorization check than active parameter manipulation."
}
],
"commit": "9c5af321fe8f1d2209c8b3c35f4d570d47e9af9e",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
},
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
}
],
"cvssRationale": "AV:N: MISP is a network-accessible web application. AC:L: The user only needs to be a member of a sharing group; no special conditions or race conditions are required. AT:N: No active attack requirements beyond normal API usage. PR:L: The attacker must be an authenticated user with membership in a relevant sharing group. UI:N: No user interaction is required; the check is server-side. VC:H: The user can view proposals (proposed attribute changes) that should be restricted by distribution level, disclosing sensitive information about proposed changes. VI:N: No integrity impact; the user cannot modify proposals. VA:N: No availability impact. SC/SI/SA:N: No impact on subsequent components.",
"fixSummary": "The fix enforces the distribution level constraint in the sharing group access check, requiring distribution level 4 (All communities) for the sharing group test to apply. Additionally, the owning organisation is now explicitly granted access to proposals on its own attributes regardless of distribution level, correcting the over-restrictive behavior.",
"generatedAt": "2026-10-19T08:49:14.568262Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "c50a0b040ef7da05d8dffbdc10599991ce441f3fe965e1025620e2e0581b7166",
"patchSummary": "In the shadow attribute model\u0027s condition builder, the sharing group check for both objects and attributes now includes an AND condition requiring distribution = 4 alongside the sharing_group_id IN check. The attribute distribution condition was changed from a simple sharing_group_id IN clause to a compound AND condition with distribution = 4. A new OR condition (Event.org_id matching the user\u0027s org_id) was added to grant the owning organisation access to proposals on its own attributes.",
"patchTruncated": false,
"patches": [
{
"commit": "9c5af321fe8f1d2209c8b3c35f4d570d47e9af9e",
"date": "Thu, 24 Sep 2026 16:23:08 +0200",
"patchSha256": "c50a0b040ef7da05d8dffbdc10599991ce441f3fe965e1025620e2e0581b7166",
"source": "https://github.com/MISP/MISP/commit/9c5af321f.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/9c5af321f.patch",
"subject": "fix: [proposals] Apply the attribute ACL rules to proposals"
}
],
"source": "https://github.com/MISP/MISP/commit/9c5af321f.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T08:49:14Z",
"version": "2.0.3"
},
"subject": "fix: [proposals] Apply the attribute ACL rules to proposals",
"tagVersionBoundary": {
"commits_after_fix": 35,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.48",
"version": "2.5.48",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-862",
"rationale": "The authorization check for proposal visibility was missing the distribution level constraint. The system evaluated sharing group membership as sufficient for access without also requiring the distribution level to be 4 (All communities), resulting in an incomplete authorization check that allowed access to proposals on more restrictively distributed attributes."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (9c5af321fe8f1d2209c8b3c35f4d570d47e9af9e): fix: [proposals] Apply the attribute ACL rules to proposals",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/MISP/commit/9c5af321f.patch"
],
"timestamp": "2026-09-24T14:23:08Z",
"type": "fix-developed"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20337"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-112178",
"datePublished": "2026-10-19T08:50:52.402Z",
"dateReserved": "2026-10-19T08:50:50.711Z",
"dateUpdated": "2026-10-19T17:20:40.642Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-112180 (GCVE-0-2026-112180)
Vulnerability from cvelistv5 – Published: 2026-10-19 09:00 – Updated: 2026-10-19 17:19- CWE-459 - Incomplete Cleanup
| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/5f78634af | patch |
qwen3.8:27b
1 event
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-10-19 08:55 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/5f78634af.patch
2a311f89681d… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
5f78634af8ad
|
fix: [event] Remove every row belonging to an event when | 2a311f89681d… |
Fix summary
The event deletion routine was extended to cascade-remove all associated child records that were previously left behind. Specifically, the fix ensures that event report tags, event graph rows, shadow attribute correlation rows (on both event_id and 1_event_id foreign keys), fuzzy ssdeep chunks, and attachment scan results are all purged within the same transaction as the parent event deletion, eliminating the orphaned-data condition.
Patch summary
In app/Model/Event.php, the quickDelete method was modified to: (1) add event_graph and shadow_attribute_correlations (both event_id and 1_event_id) to the relations array used for raw DELETE statements; (2) before executing the raw deletes, query for the IDs of event reports and for attribute/shadow-attribute IDs of type 'attachment' or 'malware-sample'; (3) delete EventReportTag rows matching those report IDs; (4) delete AttachmentScan rows matching those attribute IDs; (5) invoke FuzzyCorrelateSsdeep::purge() to remove ssdeep chunks for the event. All operations occur within the existing database transaction.
CVSS rationale
The vulnerability is in a web-based application (AV:N) and requires a straightforward authenticated action (AC:L, AT:N). Deleting events requires elevated privileges (PR:H). No user interaction is needed (UI:N). The primary impact is on the integrity of the vulnerable system's data store: orphaned records persist that should have been removed (VI:L). There is no direct confidentiality impact on the vulnerable system itself because the data was already accessible to the deleting user, and no evidence shows the orphans are exposed to other users (VC:N). No availability impact is demonstrated (VA:N). No impact on subsequent systems (SC:N, SI:N, SA:N).
Weakness rationale
- CWE-459 The event deletion logic failed to remove all associated child records (report tags, graphs, correlations, ssdeep chunks, scan results), leaving them as orphans in the database. This is a textbook incomplete cleanup of related resources when a parent object is destroyed.
Attack pattern rationale
- CAPEC-126 The event object transitions to a 'deleted' state, but related child objects (report tags, correlations, scan results, ssdeep chunks) do not follow the expected state transition and remain in an active/persisted state. An attacker with delete privileges could exploit this by creating events with sensitive associated data, deleting the event, and then attempting to access the orphaned records through other application endpoints. This is the closest CAPEC to the observed incomplete state propagation; the mapping is uncertain because the primary issue is a maintenance/cleanup defect rather than a directly exploitable state machine flaw.
Assumptions to verify
- The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.48 with 33 commits after fix); the exact fixed release version is not specified in the patch.
- The CAPEC-126 mapping is the closest available match; the vulnerability is fundamentally an incomplete cleanup defect rather than a classic state-transition exploit, so the mapping carries uncertainty.
- The confidentiality impact is assessed as None because the patch does not demonstrate that orphaned records are accessible to unauthorized users; the primary concern is data integrity and retention policy.
- The commit message states the issue was 'found during the internal review, not externally reported,' so no external finder or reporter is credited.
- The CVSS assumes the orphaned data is not directly queryable by other users through existing MISP endpoints; if such access paths exist, the confidentiality impact could be higher.
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 | 11 | medium | 5 |
- 2026-09-24 14:43 UTC Fix developed Corrective change authored (5f78634af8ad2374a51ed979ffbac3084ae5f9d9): fix: [event] Remove every row belonging to an event when https://github.com/MISP/MISP/commit/5f78634af.patch
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-112180",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-19T17:19:43.619080Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T17:19:56.212Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp:*:*:*:*:*:*:*:*"
],
"modules": [
"Event model (app/Model/Event.php)"
],
"product": "MISP",
"programFiles": [
"app/Model/Event.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThanOrEqual": "2.5.48",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eMISP contains a data integrity flaw in its event deletion logic. When a user deletes an event, several associated records are not removed from the database, leaving them as orphaned entries. The affected record types include event report tags, event graph entries, proposal (shadow attribute) correlations, fuzzy ssdeep correlation chunks, and attachment scan results.\u003c/p\u003e\u003cp\u003eThese orphaned records may contain sensitive threat intelligence data such as correlation mappings, scan results, and report metadata that should have been removed along with the parent event. Their persistence beyond the intended deletion lifecycle creates a risk of unintended data retention and potential information exposure if the records are reachable through other application queries or administrative interfaces.\u003c/p\u003e\u003cp\u003ePreconditions:\u003c/p\u003e\u003cp\u003e- An authenticated user with sufficient privileges to delete events in MISP.\u003c/p\u003e\u003cp\u003e- The event must have associated reports, graphs, correlations, ssdeep chunks, or attachment scan results.\u003c/p\u003e\u003cp\u003eImpact:\u003c/p\u003e\u003cp\u003e- Residual sensitive data persists in the database after the parent event is deleted.\u003c/p\u003e\u003cp\u003e- Accumulation of orphaned records over time may contribute to storage bloat.\u003c/p\u003e\u003cp\u003e- Orphaned records may be inadvertently exposed through other data-access paths that do not validate the existence of the parent event.\u003c/p\u003e\u003cp\u003eAffected versions: \u0026lt;2.5.48\u003c/p\u003e"
}
],
"value": "MISP contains a data integrity flaw in its event deletion logic. When a user deletes an event, several associated records are not removed from the database, leaving them as orphaned entries. The affected record types include event report tags, event graph entries, proposal (shadow attribute) correlations, fuzzy ssdeep correlation chunks, and attachment scan results.\n\nThese orphaned records may contain sensitive threat intelligence data such as correlation mappings, scan results, and report metadata that should have been removed along with the parent event. Their persistence beyond the intended deletion lifecycle creates a risk of unintended data retention and potential information exposure if the records are reachable through other application queries or administrative interfaces.\n\nPreconditions:\n\n- An authenticated user with sufficient privileges to delete events in MISP.\n\n- The event must have associated reports, graphs, correlations, ssdeep chunks, or attachment scan results.\n\nImpact:\n\n- Residual sensitive data persists in the database after the parent event is deleted.\n\n- Accumulation of orphaned records over time may contribute to storage bloat.\n\n- Orphaned records may be inadvertently exposed through other data-access paths that do not validate the existence of the parent event.\n\nAffected versions: \u003c2.5.48"
}
],
"impacts": [
{
"capecId": "CAPEC-126",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-126 Exploiting Incorrect Object State Transition"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 5.1,
"baseSeverity": "MEDIUM",
"privilegesRequired": "HIGH",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC: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"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T08:55:14Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-459",
"description": "CWE-459 Incomplete Cleanup",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T09:00:13.049Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/5f78634af"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe event deletion routine was extended to cascade-remove all associated child records that were previously left behind. Specifically, the fix ensures that event report tags, event graph rows, shadow attribute correlation rows (on both event_id and 1_event_id foreign keys), fuzzy ssdeep chunks, and attachment scan results are all purged within the same transaction as the parent event deletion, eliminating the orphaned-data condition.\u003c/p\u003e"
}
],
"value": "The event deletion routine was extended to cascade-remove all associated child records that were previously left behind. Specifically, the fix ensures that event report tags, event graph rows, shadow attribute correlation rows (on both event_id and 1_event_id foreign keys), fuzzy ssdeep chunks, and attachment scan results are all purged within the same transaction as the parent event deletion, eliminating the orphaned-data condition."
}
],
"title": "MISP Incomplete Event Deletion Leaves Orphaned Sensitive Records",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.48 with 33 commits after fix); the exact fixed release version is not specified in the patch.",
"The CAPEC-126 mapping is the closest available match; the vulnerability is fundamentally an incomplete cleanup defect rather than a classic state-transition exploit, so the mapping carries uncertainty.",
"The confidentiality impact is assessed as None because the patch does not demonstrate that orphaned records are accessible to unauthorized users; the primary concern is data integrity and retention policy.",
"The commit message states the issue was \u0027found during the internal review, not externally reported,\u0027 so no external finder or reporter is credited.",
"The CVSS assumes the orphaned data is not directly queryable by other users through existing MISP endpoints; if such access paths exist, the confidentiality impact could be higher."
],
"capecRationale": [
{
"capecId": "CAPEC-126",
"rationale": "The event object transitions to a \u0027deleted\u0027 state, but related child objects (report tags, correlations, scan results, ssdeep chunks) do not follow the expected state transition and remain in an active/persisted state. An attacker with delete privileges could exploit this by creating events with sensitive associated data, deleting the event, and then attempting to access the orphaned records through other application endpoints. This is the closest CAPEC to the observed incomplete state propagation; the mapping is uncertain because the primary issue is a maintenance/cleanup defect rather than a directly exploitable state machine flaw."
}
],
"commit": "5f78634af8ad2374a51ed979ffbac3084ae5f9d9",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
}
],
"cvssRationale": "The vulnerability is in a web-based application (AV:N) and requires a straightforward authenticated action (AC:L, AT:N). Deleting events requires elevated privileges (PR:H). No user interaction is needed (UI:N). The primary impact is on the integrity of the vulnerable system\u0027s data store: orphaned records persist that should have been removed (VI:L). There is no direct confidentiality impact on the vulnerable system itself because the data was already accessible to the deleting user, and no evidence shows the orphans are exposed to other users (VC:N). No availability impact is demonstrated (VA:N). No impact on subsequent systems (SC:N, SI:N, SA:N).",
"fixSummary": "The event deletion routine was extended to cascade-remove all associated child records that were previously left behind. Specifically, the fix ensures that event report tags, event graph rows, shadow attribute correlation rows (on both event_id and 1_event_id foreign keys), fuzzy ssdeep chunks, and attachment scan results are all purged within the same transaction as the parent event deletion, eliminating the orphaned-data condition.",
"generatedAt": "2026-10-19T08:55:14.973651Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "2a311f89681d303b7c915af1a5dbac4a4b7f2998bd50ce77bb78f1586f72cf95",
"patchSummary": "In app/Model/Event.php, the quickDelete method was modified to: (1) add event_graph and shadow_attribute_correlations (both event_id and 1_event_id) to the relations array used for raw DELETE statements; (2) before executing the raw deletes, query for the IDs of event reports and for attribute/shadow-attribute IDs of type \u0027attachment\u0027 or \u0027malware-sample\u0027; (3) delete EventReportTag rows matching those report IDs; (4) delete AttachmentScan rows matching those attribute IDs; (5) invoke FuzzyCorrelateSsdeep::purge() to remove ssdeep chunks for the event. All operations occur within the existing database transaction.",
"patchTruncated": false,
"patches": [
{
"commit": "5f78634af8ad2374a51ed979ffbac3084ae5f9d9",
"date": "Thu, 24 Sep 2026 16:43:27 +0200",
"patchSha256": "2a311f89681d303b7c915af1a5dbac4a4b7f2998bd50ce77bb78f1586f72cf95",
"source": "https://github.com/MISP/MISP/commit/5f78634af.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/5f78634af.patch",
"subject": "fix: [event] Remove every row belonging to an event when"
}
],
"source": "https://github.com/MISP/MISP/commit/5f78634af.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T08:55:14Z",
"version": "2.0.3"
},
"subject": "fix: [event] Remove every row belonging to an event when",
"tagVersionBoundary": {
"commits_after_fix": 33,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.48",
"version": "2.5.48",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-459",
"rationale": "The event deletion logic failed to remove all associated child records (report tags, graphs, correlations, ssdeep chunks, scan results), leaving them as orphans in the database. This is a textbook incomplete cleanup of related resources when a parent object is destroyed."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (5f78634af8ad2374a51ed979ffbac3084ae5f9d9): fix: [event] Remove every row belonging to an event when",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/MISP/commit/5f78634af.patch"
],
"timestamp": "2026-09-24T14:43:27Z",
"type": "fix-developed"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20224"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-112180",
"datePublished": "2026-10-19T09:00:13.049Z",
"dateReserved": "2026-10-19T09:00:11.375Z",
"dateUpdated": "2026-10-19T17:19:56.212Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-112183 (GCVE-0-2026-112183)
Vulnerability from cvelistv5 – Published: 2026-10-19 09:15 – Updated: 2026-10-19 17:15- CWE-74 - Improper Neutralization of Special Elements in Output Used by a Downstream Component
| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/91323b517 | patch |
qwen3.8:27b
1 event
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-10-19 09:01 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/91323b517.patch
8be436940ffd… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
91323b517bb5
|
fix: [sync] Only use a valid colour for remote tags in the | 8be436940ffd… |
Fix summary
The fix introduces strict validation of the tag colour value before it is rendered into a CSS style attribute. Only values matching a valid six-digit hexadecimal colour pattern (e.g. #aabbcc) are accepted; any other value is replaced with a safe default (#ffffff). This prevents arbitrary CSS from being injected through the colour field, aligning the remote tag handling with the validation already applied to local tags.
Patch summary
In app/View/Servers/preview_event.ctp, a regex check (preg_match against /^#[0-9a-f]{6}$/i) is added before the tag colour is used. If the colour does not match the hex pattern, it defaults to #ffffff. The validated $colour variable replaces the raw $tag['colour'] in both the background-color style property and the getTextColour() call, eliminating the untrusted value from the CSS context.
CVSS rationale
AV:N – the attack originates from a remote linked MISP server over the network. AC:L – no race conditions or special timing; simply setting a tag colour suffices. AT:N – no manipulation of the attack target is required. PR:L – the attacker needs low-privilege access (tag creation) on the linked server. UI:A – the victim must actively navigate to the event preview page. VC:N – no direct confidentiality loss on the vulnerable system. VI:N – no integrity impact on the vulnerable system's data. VA:N – no availability impact. SC:L – CSS injection may allow limited information disclosure on the client (e.g., reading page structure via CSS selectors or side channels). SI:L – the attacker can modify the visual presentation of the preview page (UI manipulation, overlay, spoofing). SA:N – no security authority impact.
Weakness rationale
- CWE-74 The tag colour value is not neutralized for the CSS context in which it is placed. HTML entity encoding (h()) does not sanitize CSS metacharacters such as semicolons, colons, or function calls, allowing CSS injection. CWE-74 is the most precise parent weakness covering injection into a downstream component (CSS) without a more specific child CWE for CSS injection.
Attack pattern rationale
- CAPEC-66 The attack exploits the inherent trust between linked MISP instances. The local instance accepts and renders data (tag colours) from a remote linked server without sufficient validation, assuming the data is well-formed. The attacker leverages this trusted relationship to inject CSS. This is the closest CAPEC; no CAPEC specifically models CSS injection via trusted data sources, so CAPEC-66 is the best available match.
Assumptions to verify
- The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.48, 27 commits after fix); the exact first affected version is not stated in the patch.
- PR:L assumes that creating or modifying a tag on a linked MISP server requires only low-level user privileges; the exact permission model was not verified from the patch.
- SC:L assumes CSS injection could enable limited client-side information disclosure (e.g., via CSS selectors or layout manipulation); full XSS or data exfiltration is not evidenced.
- CAPEC-66 is the closest available mapping; no CAPEC specifically models CSS injection via trusted inter-instance data, so this mapping carries uncertainty.
- The commit message states the issue was found during internal review and not externally reported; no external finder or reporter is credited.
- The Co-Authored-By line references an AI tool (Claude Opus 5.5); it is credited as a tool rather than a human remediation developer.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
6 | 11 | medium | 6 |
- 2026-09-24 21:54 UTC Fix developed Corrective change authored (91323b517bb5a34f413363faf8703a3c0a1a9904): fix: [sync] Only use a valid colour for remote tags in the https://github.com/MISP/MISP/commit/91323b517.patch
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-112183",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-19T17:15:24.498800Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T17:15:45.687Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp:*:*:*:*:*:*:*:*"
],
"modules": [
"Servers/preview_event (remote event preview)"
],
"product": "MISP",
"programFiles": [
"app/View/Servers/preview_event.ctp"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.48",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eMISP contains a CSS injection vulnerability in the remote event preview feature. When a user previews an event from a linked MISP server, the colour value associated with each remote tag is written directly into an inline CSS style attribute without sufficient validation. Although HTML entity encoding is applied, the value is interpreted as CSS within the style attribute, allowing a malicious or compromised linked server to inject arbitrary CSS declarations.\u003c/p\u003e\u003cp\u003eAn attacker with the ability to create or modify tags on a linked MISP instance can craft a tag colour value containing CSS injection payloads. When a user on the local instance views the event preview, the injected CSS is rendered, potentially allowing UI manipulation, visual spoofing, or limited information disclosure through CSS-based techniques.\u003c/p\u003e\u003cp\u003ePreconditions:\u003c/p\u003e\u003cp\u003e- A linked MISP server relationship exists between the victim instance and the attacker-controlled instance.\u003c/p\u003e\u003cp\u003e- The attacker can create or modify tags on the linked server.\u003c/p\u003e\u003cp\u003e- A victim user views the remote event preview page.\u003c/p\u003e\u003cp\u003eAffected: \u0026lt;2.5.48.\u003c/p\u003e"
}
],
"value": "MISP contains a CSS injection vulnerability in the remote event preview feature. When a user previews an event from a linked MISP server, the colour value associated with each remote tag is written directly into an inline CSS style attribute without sufficient validation. Although HTML entity encoding is applied, the value is interpreted as CSS within the style attribute, allowing a malicious or compromised linked server to inject arbitrary CSS declarations.\n\nAn attacker with the ability to create or modify tags on a linked MISP instance can craft a tag colour value containing CSS injection payloads. When a user on the local instance views the event preview, the injected CSS is rendered, potentially allowing UI manipulation, visual spoofing, or limited information disclosure through CSS-based techniques.\n\nPreconditions:\n\n- A linked MISP server relationship exists between the victim instance and the attacker-controlled instance.\n\n- The attacker can create or modify tags on the linked server.\n\n- A victim user views the remote event preview page.\n\nAffected: \u003c2.5.48."
}
],
"impacts": [
{
"capecId": "CAPEC-66",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-66 Leveraging Trusted Relationships"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 4.8,
"baseSeverity": "MEDIUM",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "LOW",
"subIntegrityImpact": "LOW",
"userInteraction": "ACTIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T09:01:35Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-74",
"description": "CWE-74 Improper Neutralization of Special Elements in Output Used by a Downstream Component",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T09:15:47.453Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/91323b517"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe fix introduces strict validation of the tag colour value before it is rendered into a CSS style attribute. Only values matching a valid six-digit hexadecimal colour pattern (e.g. #aabbcc) are accepted; any other value is replaced with a safe default (#ffffff). This prevents arbitrary CSS from being injected through the colour field, aligning the remote tag handling with the validation already applied to local tags.\u003c/p\u003e"
}
],
"value": "The fix introduces strict validation of the tag colour value before it is rendered into a CSS style attribute. Only values matching a valid six-digit hexadecimal colour pattern (e.g. #aabbcc) are accepted; any other value is replaced with a safe default (#ffffff). This prevents arbitrary CSS from being injected through the colour field, aligning the remote tag handling with the validation already applied to local tags."
}
],
"title": "MISP CSS Injection via Remote Tag Colour in Event Preview",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The affected version boundary is inferred from the tag_version_boundary metadata (v2.5.48, 27 commits after fix); the exact first affected version is not stated in the patch.",
"PR:L assumes that creating or modifying a tag on a linked MISP server requires only low-level user privileges; the exact permission model was not verified from the patch.",
"SC:L assumes CSS injection could enable limited client-side information disclosure (e.g., via CSS selectors or layout manipulation); full XSS or data exfiltration is not evidenced.",
"CAPEC-66 is the closest available mapping; no CAPEC specifically models CSS injection via trusted inter-instance data, so this mapping carries uncertainty.",
"The commit message states the issue was found during internal review and not externally reported; no external finder or reporter is credited.",
"The Co-Authored-By line references an AI tool (Claude Opus 5.5); it is credited as a tool rather than a human remediation developer."
],
"capecRationale": [
{
"capecId": "CAPEC-66",
"rationale": "The attack exploits the inherent trust between linked MISP instances. The local instance accepts and renders data (tag colours) from a remote linked server without sufficient validation, assuming the data is well-formed. The attacker leverages this trusted relationship to inject CSS. This is the closest CAPEC; no CAPEC specifically models CSS injection via trusted data sources, so CAPEC-66 is the best available match."
}
],
"commit": "91323b517bb5a34f413363faf8703a3c0a1a9904",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
}
],
"cvssRationale": "AV:N \u2013 the attack originates from a remote linked MISP server over the network. AC:L \u2013 no race conditions or special timing; simply setting a tag colour suffices. AT:N \u2013 no manipulation of the attack target is required. PR:L \u2013 the attacker needs low-privilege access (tag creation) on the linked server. UI:A \u2013 the victim must actively navigate to the event preview page. VC:N \u2013 no direct confidentiality loss on the vulnerable system. VI:N \u2013 no integrity impact on the vulnerable system\u0027s data. VA:N \u2013 no availability impact. SC:L \u2013 CSS injection may allow limited information disclosure on the client (e.g., reading page structure via CSS selectors or side channels). SI:L \u2013 the attacker can modify the visual presentation of the preview page (UI manipulation, overlay, spoofing). SA:N \u2013 no security authority impact.",
"fixSummary": "The fix introduces strict validation of the tag colour value before it is rendered into a CSS style attribute. Only values matching a valid six-digit hexadecimal colour pattern (e.g. #aabbcc) are accepted; any other value is replaced with a safe default (#ffffff). This prevents arbitrary CSS from being injected through the colour field, aligning the remote tag handling with the validation already applied to local tags.",
"generatedAt": "2026-10-19T09:01:35.918427Z",
"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": "8be436940ffd0e21b7145fcb604ebfb0b529f6bbac717ee5cdf38c2e0dc2904e",
"patchSummary": "In app/View/Servers/preview_event.ctp, a regex check (preg_match against /^#[0-9a-f]{6}$/i) is added before the tag colour is used. If the colour does not match the hex pattern, it defaults to #ffffff. The validated $colour variable replaces the raw $tag[\u0027colour\u0027] in both the background-color style property and the getTextColour() call, eliminating the untrusted value from the CSS context.",
"patchTruncated": false,
"patches": [
{
"commit": "91323b517bb5a34f413363faf8703a3c0a1a9904",
"date": "Thu, 24 Sep 2026 23:54:30 +0200",
"patchSha256": "8be436940ffd0e21b7145fcb604ebfb0b529f6bbac717ee5cdf38c2e0dc2904e",
"source": "https://github.com/MISP/MISP/commit/91323b517.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/91323b517.patch",
"subject": "fix: [sync] Only use a valid colour for remote tags in the"
}
],
"source": "https://github.com/MISP/MISP/commit/91323b517.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T09:01:35Z",
"version": "2.0.3"
},
"subject": "fix: [sync] Only use a valid colour for remote tags in the",
"tagVersionBoundary": {
"commits_after_fix": 27,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.48",
"version": "2.5.48",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-74",
"rationale": "The tag colour value is not neutralized for the CSS context in which it is placed. HTML entity encoding (h()) does not sanitize CSS metacharacters such as semicolons, colons, or function calls, allowing CSS injection. CWE-74 is the most precise parent weakness covering injection into a downstream component (CSS) without a more specific child CWE for CSS injection."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (91323b517bb5a34f413363faf8703a3c0a1a9904): fix: [sync] Only use a valid colour for remote tags in the",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/MISP/commit/91323b517.patch"
],
"timestamp": "2026-09-24T21:54:30Z",
"type": "fix-developed"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20339"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-112183",
"datePublished": "2026-10-19T09:15:47.453Z",
"dateReserved": "2026-10-19T09:15:45.556Z",
"dateUpdated": "2026-10-19T17:15:45.687Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-112184 (GCVE-0-2026-112184)
Vulnerability from cvelistv5 – Published: 2026-10-19 09:19 – Updated: 2026-10-19 17:14- CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/813a48b2b | patch |
qwen3.8:27b
1 event
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-10-19 09:16 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/813a48b2b.patch
691d31d09a8d… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
813a48b2bac0
|
fix: [workflows] Escape misp-module parameter names used as | 691d31d09a8d… |
Fix summary
The fix applies HTML output encoding (the h() helper) to the parameter name before it is used as a form label, ensuring that any HTML metacharacters in the value are neutralized and rendered as inert text rather than executable markup.
Patch summary
In app/Model/WorkflowModules/Module_misp_module.php, the translateParams method was modified: the 'label' array element changed from Inflector::humanize($paramName) to h(Inflector::humanize($paramName)), wrapping the humanized parameter name in CakePHP's HTML-encoding function before it is assigned as a form label.
CVSS rationale
AV:N – web-based, reachable over the network. AC:L – no race or special timing; the misp-modules service simply needs to return a crafted parameter name. AT:N – no manipulation of the target system required. PR:L – the victim must be an authenticated MISP user to view the workflow module page. UI:A – the victim must actively load the workflow module page for the script to execute. VC/VI/VA:N – the MISP server itself is not compromised. SC:L – the attacker can read cookies or session data in the victim's browser. SI:L – the attacker can modify the page or perform actions in the victim's session. SA:N – no elevation of security authority on the server.
Weakness rationale
- CWE-79 The parameter name from an external service is inserted into HTML output (a form label) without HTML encoding, allowing injected markup or script to execute in the victim's browser. This is a textbook reflected XSS.
Attack pattern rationale
- CAPEC-1 The misp-modules service supplies parameter names that are reflected into the HTML of the workflow module page without encoding. The attacker-controlled data flows from an external source into the rendered output, matching the reflected XSS pattern. Uncertainty: the data originates from a backend service rather than a direct HTTP parameter, but the effect (untrusted data reflected into HTML without encoding) is functionally identical to reflected XSS.
Assumptions to verify
- The misp-modules service is assumed to be a component whose output can be influenced by a module developer or a compromised service endpoint; the exact attack vector for injecting a malicious parameter name is not detailed in the patch.
- MISP requires authentication to access the workflow module page; PR:L is assumed based on MISP's standard access model.
- The affected version boundary (< 2.5.48) is inferred from the tag_version_boundary metadata (v2.5.48, 25 commits after fix); the exact first affected version is not specified.
- CAPEC-1 (Reflected XSS) is the closest match; the data source is a backend service rather than a direct request parameter, but the unencoded reflection into HTML is the defining characteristic.
- The h() function is assumed to be CakePHP's HTML-encoding helper (equivalent to htmlspecialchars), based on the framework context of the MISP codebase.
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 | 11 | medium | 5 |
- 2026-09-24 22:12 UTC Fix developed Corrective change authored (813a48b2bac0c9034f532b9181ac9a0c5fa59857): fix: [workflows] Escape misp-module parameter names used as https://github.com/MISP/MISP/commit/813a48b2b.patch
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-112184",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-10-19T17:14:29.630953Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-10-19T17:14:52.401Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp:*:*:*:*:*:*:*:*"
],
"modules": [
"Workflow Modules (Module_misp_module)"
],
"product": "MISP",
"programFiles": [
"app/Model/WorkflowModules/Module_misp_module.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.48",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Jeroen Pinoy"
},
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eMISP contains a reflected cross-site scripting (XSS) vulnerability in the workflow module interface. Parameter names returned by the misp-modules service are rendered as raw HTML form labels on the workflow module page without output encoding. An attacker who can influence the parameter names reported by the misp-modules service can inject arbitrary HTML or JavaScript that executes in the context of an authenticated MISP user\u0027s browser.\u003c/p\u003e\u003cp\u003ePreconditions:\u003c/p\u003e\u003cp\u003e- The attacker must be able to control or influence parameter names reported by the misp-modules service.\u003c/p\u003e\u003cp\u003e- A victim must be authenticated and view the affected workflow module page.\u003c/p\u003e\u003cp\u003eImpact:\u003c/p\u003e\u003cp\u003e- Execution of arbitrary JavaScript in the victim\u0027s browser session.\u003c/p\u003e\u003cp\u003e- Potential theft of session tokens, manipulation of the MISP interface, or initiation of unauthorized actions on behalf of the victim.\u003c/p\u003e\u003cp\u003eAffected versions: \u0026lt;2.5.48.\u003c/p\u003e"
}
],
"value": "MISP contains a reflected cross-site scripting (XSS) vulnerability in the workflow module interface. Parameter names returned by the misp-modules service are rendered as raw HTML form labels on the workflow module page without output encoding. An attacker who can influence the parameter names reported by the misp-modules service can inject arbitrary HTML or JavaScript that executes in the context of an authenticated MISP user\u0027s browser.\n\nPreconditions:\n\n- The attacker must be able to control or influence parameter names reported by the misp-modules service.\n\n- A victim must be authenticated and view the affected workflow module page.\n\nImpact:\n\n- Execution of arbitrary JavaScript in the victim\u0027s browser session.\n\n- Potential theft of session tokens, manipulation of the MISP interface, or initiation of unauthorized actions on behalf of the victim.\n\nAffected versions: \u003c2.5.48."
}
],
"impacts": [
{
"capecId": "CAPEC-1",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-1 XSS - Reflected"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 4.8,
"baseSeverity": "MEDIUM",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "LOW",
"subIntegrityImpact": "LOW",
"userInteraction": "ACTIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T09:16:56Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"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-10-19T09:19:45.056Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/813a48b2b"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe fix applies HTML output encoding (the h() helper) to the parameter name before it is used as a form label, ensuring that any HTML metacharacters in the value are neutralized and rendered as inert text rather than executable markup.\u003c/p\u003e"
}
],
"value": "The fix applies HTML output encoding (the h() helper) to the parameter name before it is used as a form label, ensuring that any HTML metacharacters in the value are neutralized and rendered as inert text rather than executable markup."
}
],
"title": "MISP Workflow Module: Reflected XSS via Unescaped misp-modules Parameter Names in Form Labels",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The misp-modules service is assumed to be a component whose output can be influenced by a module developer or a compromised service endpoint; the exact attack vector for injecting a malicious parameter name is not detailed in the patch.",
"MISP requires authentication to access the workflow module page; PR:L is assumed based on MISP\u0027s standard access model.",
"The affected version boundary (\u003c 2.5.48) is inferred from the tag_version_boundary metadata (v2.5.48, 25 commits after fix); the exact first affected version is not specified.",
"CAPEC-1 (Reflected XSS) is the closest match; the data source is a backend service rather than a direct request parameter, but the unencoded reflection into HTML is the defining characteristic.",
"The h() function is assumed to be CakePHP\u0027s HTML-encoding helper (equivalent to htmlspecialchars), based on the framework context of the MISP codebase."
],
"capecRationale": [
{
"capecId": "CAPEC-1",
"rationale": "The misp-modules service supplies parameter names that are reflected into the HTML of the workflow module page without encoding. The attacker-controlled data flows from an external source into the rendered output, matching the reflected XSS pattern. Uncertainty: the data originates from a backend service rather than a direct HTTP parameter, but the effect (untrusted data reflected into HTML without encoding) is functionally identical to reflected XSS."
}
],
"commit": "813a48b2bac0c9034f532b9181ac9a0c5fa59857",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Jeroen Pinoy"
},
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5.5 (1M context)"
}
],
"cvssRationale": "AV:N \u2013 web-based, reachable over the network. AC:L \u2013 no race or special timing; the misp-modules service simply needs to return a crafted parameter name. AT:N \u2013 no manipulation of the target system required. PR:L \u2013 the victim must be an authenticated MISP user to view the workflow module page. UI:A \u2013 the victim must actively load the workflow module page for the script to execute. VC/VI/VA:N \u2013 the MISP server itself is not compromised. SC:L \u2013 the attacker can read cookies or session data in the victim\u0027s browser. SI:L \u2013 the attacker can modify the page or perform actions in the victim\u0027s session. SA:N \u2013 no elevation of security authority on the server.",
"fixSummary": "The fix applies HTML output encoding (the h() helper) to the parameter name before it is used as a form label, ensuring that any HTML metacharacters in the value are neutralized and rendered as inert text rather than executable markup.",
"generatedAt": "2026-10-19T09:16:56.467726Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "691d31d09a8db397d602b6d179507339a60ca0125e91b55d408353abf8473bac",
"patchSummary": "In app/Model/WorkflowModules/Module_misp_module.php, the translateParams method was modified: the \u0027label\u0027 array element changed from Inflector::humanize($paramName) to h(Inflector::humanize($paramName)), wrapping the humanized parameter name in CakePHP\u0027s HTML-encoding function before it is assigned as a form label.",
"patchTruncated": false,
"patches": [
{
"commit": "813a48b2bac0c9034f532b9181ac9a0c5fa59857",
"date": "Fri, 25 Sep 2026 00:12:54 +0200",
"patchSha256": "691d31d09a8db397d602b6d179507339a60ca0125e91b55d408353abf8473bac",
"source": "https://github.com/MISP/MISP/commit/813a48b2b.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/813a48b2b.patch",
"subject": "fix: [workflows] Escape misp-module parameter names used as"
}
],
"source": "https://github.com/MISP/MISP/commit/813a48b2b.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T09:16:56Z",
"version": "2.0.3"
},
"subject": "fix: [workflows] Escape misp-module parameter names used as",
"tagVersionBoundary": {
"commits_after_fix": 25,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.48",
"version": "2.5.48",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-79",
"rationale": "The parameter name from an external service is inserted into HTML output (a form label) without HTML encoding, allowing injected markup or script to execute in the victim\u0027s browser. This is a textbook reflected XSS."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (813a48b2bac0c9034f532b9181ac9a0c5fa59857): fix: [workflows] Escape misp-module parameter names used as",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/MISP/commit/813a48b2b.patch"
],
"timestamp": "2026-09-24T22:12:54Z",
"type": "fix-developed"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20332"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-112184",
"datePublished": "2026-10-19T09:19:45.056Z",
"dateReserved": "2026-10-19T09:19:41.258Z",
"dateUpdated": "2026-10-19T17:14:52.401Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1-2026-20141 (CVE-2026-127046)
Vulnerability from gna-1 – Published: 2026-11-12 12:01 – Updated: 2026-11-12 13:49| URL | Tags |
|---|---|
| https://github.com/MISP/misp-modules/commit/61c27… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| misp | misp-modules |
Affected:
0 , ≤ 3.1.4
(semver)
cpe:2.3:a:misp:misp_modules:*:*:*:*:*:*:*:* |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-12 11:59 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch
200a89910bce… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
61c27893066c
|
fix: [website] keep external tool API keys out of responses | 200a89910bce… |
Fix summary
The fix removes the api_key field from the ExternalTools.to_json() serializer so that /external_tools/list no longer returns credentials. The edit form is changed to a write-only pattern: the API key input starts empty, a blank or missing value on save retains the previously stored key, and a non-empty value replaces it. After a successful save the client clears the key field and does not propagate the credential into the in-memory tool list. Input validation is tightened to reject non-string or over-length key values. Server-side tool submissions continue to use the stored key from the database.
Patch summary
models.py: removed the api_key entry from ExternalTools.to_json(). external_tools.py (change_config endpoint): replaced the nested if-chain that required tool_api_key to be present and non-empty with a flat validation loop for tool_id/tool_name/tool_url, added a type-and-length check (string, max 60 chars) for tool_api_key when present, and made the field optional (write-only semantics). external_tools_core.py (change_config_core): changed tool.api_key assignment to be conditional on a truthy request_json.get('tool_api_key'). external_tools_index.html: initialized the form key field to empty string instead of tool.api_key, added placeholder and helper text, fixed a bug where the error-clearing selector referenced the wrong field, moved browser-state updates to after a successful HTTP response (res.ok check), and cleared the key input after save. README.md: documented the write-only key behavior. Tests: added browser-level (Playwright) and unit-level regression tests verifying the list endpoint omits api_key,空
CVSS rationale
AV:N: the /external_tools/list endpoint is reachable over the network via HTTP. AC:L: exploitation requires only a single GET request with no special conditions. AT:N: no attack prerequisites such as race conditions or specific timing. PR:N: regression tests confirm the endpoint returns 200 and previously included api_key for both authenticated and unauthenticated clients, indicating no privilege is required. UI:N: no victim interaction is needed; the attacker simply reads the response. VC:H: the exposed data is API keys (credentials) for external services, representing high confidentiality loss. VI:N and VA:N: no integrity or availability impact on the MISP Modules website. SC:H: the stolen API keys can be used to authenticate to external analysis/enrichment services, representing high confidentiality impact on a subsequent component. SI:N and SA:N: no integrity or availability impact on subsequent components is indicated.
Weakness rationale
- CWE-200 The /external_tools/list endpoint returned stored API keys in its JSON response to any client (authenticated or not), exposing credentials to unauthorized parties. The browser form also pre-populated the key in the DOM.
- CWE-522 API keys used to authenticate to external services were stored and transmitted without adequate protection: they appeared in API responses and in client-side form state, violating the principle that credentials should be write-only from the client perspective.
Attack pattern rationale
- CAPEC-126 The closest available CAPEC pattern. The attack involves an attacker obtaining credential material (API keys) from a web application response and using it to authenticate to a subsequent service. CAPEC-126 covers the theft of session/credential tokens from a web application. The mapping is imperfect because the keys are long-lived API credentials rather than short-lived session tokens, and the attack does not involve a session per se, but the underlying mechanism (reading a credential from an HTTP response and replaying it) is the same class of attack. No CAPEC pattern specifically covers 'sensitive data in API response' without a session-hijacking framing, so this is the best available match.
Assumptions to verify
- The /external_tools/list endpoint is accessible without authentication based on regression tests that verify the response for both authenticated and unauthenticated clients; however, the README notes that management operations require ADMIN_PASSWORD, so the list endpoint's access control may vary by deployment configuration.
- CVSS SC:H assumes the exposed API keys grant meaningful access to external services; the actual scope of access depends on the specific external tools configured and is not specified in the patch.
- No specific product version or release boundary is identified in the patch; the affected version range is therefore marked as unspecified.
- CAPEC-126 is the closest available pattern but is not a perfect match; the vulnerability is more precisely an API response information disclosure than a session hijacking. No CAPEC pattern specifically covers 'sensitive credential in API JSON response' without a session framing.
- The commit references issue #816 but no reporter or finder is named in the patch metadata or commit message.
- The 60-character maximum length validation for API keys is a new constraint introduced by the patch; it is unclear whether keys longer than 60 characters were previously valid, which could affect deployments with longer keys.
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 | 11 | medium | 6 |
- 2026-11-12 08:37 UTC Fix developed Corrective change authored (61c27893066cee80d9711649765ebc2bccd0e4af): fix: [website] keep external tool API keys out of responses https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch
- 2026-11-12 11:58 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp_modules:*:*:*:*:*:*:*:*"
],
"modules": [
"website/app/external_tools",
"website/app/models"
],
"product": "misp-modules",
"programFiles": [
"website/app/models/models.py",
"website/app/external_tools/external_tools.py",
"website/app/external_tools/external_tools_core.py",
"website/app/templates/external_tools/external_tools_index.html"
],
"repo": "https://github.com/MISP/misp-modules",
"vendor": "misp",
"versions": [
{
"lessThanOrEqual": "3.1.4",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*",
"versionEndIncluding": "3.1.4",
"versionStartIncluding": "0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"descriptions": [
{
"lang": "en",
"value": "The MISP Modules website component contains an information disclosure vulnerability in the external tools management interface. The /external_tools/list endpoint returned stored API keys (the api_key field) in its JSON response via the ExternalTools model serializer. Additionally, the browser-based edit form pre-populated the API key input field with the stored credential value, exposing it in the DOM.\n\nThe /external_tools/list endpoint is accessible without authentication (the regression tests verify the response for both authenticated and unauthenticated clients), meaning any network-reachable client could retrieve the API keys for all configured external tools. These keys are used by the server to authenticate submissions to external analysis or enrichment services, so their disclosure allows an attacker to impersonate the MISP instance or directly access those external services.\n\nThe vulnerability also affected the edit workflow: the change_config endpoint previously required the API key to be present and non-empty on every save, forcing the key to round-trip through the client. The browser JavaScript stored the key in a reactive state object and updated the in-memory tool list with the credential value, further increasing the window of exposure in client-side memory and network traffic.\n\nAffected component: the website sub-application of MISP Modules, specifically the external_tools module (serializer in models.py, list endpoint, and the external_tools_index.html template). The impact is limited to confidentiality of the stored API keys; no integrity or availability impact on the MISP Modules website itself is indicated by the patch."
}
],
"impacts": [
{
"capecId": "CAPEC-126",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-126 Web Application Session Hijacking"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 9.2,
"baseSeverity": "CRITICAL",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T11:59:08Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-200",
"description": "CWE-200 Exposure of Sensitive Information to an Unauthorized Actor",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-522",
"description": "CWE-522 Insufficiently Protected Credentials",
"lang": "en",
"type": "CWE"
}
]
}
],
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af"
}
],
"solutions": [
{
"lang": "en",
"value": "The fix removes the api_key field from the ExternalTools.to_json() serializer so that /external_tools/list no longer returns credentials. The edit form is changed to a write-only pattern: the API key input starts empty, a blank or missing value on save retains the previously stored key, and a non-empty value replaces it. After a successful save the client clears the key field and does not propagate the credential into the in-memory tool list. Input validation is tightened to reject non-string or over-length key values. Server-side tool submissions continue to use the stored key from the database."
}
],
"title": "MISP Modules Website Exposes External Tool API Keys in /external_tools/list Response",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "none",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The /external_tools/list endpoint is accessible without authentication based on regression tests that verify the response for both authenticated and unauthenticated clients; however, the README notes that management operations require ADMIN_PASSWORD, so the list endpoint\u0027s access control may vary by deployment configuration.",
"CVSS SC:H assumes the exposed API keys grant meaningful access to external services; the actual scope of access depends on the specific external tools configured and is not specified in the patch.",
"No specific product version or release boundary is identified in the patch; the affected version range is therefore marked as unspecified.",
"CAPEC-126 is the closest available pattern but is not a perfect match; the vulnerability is more precisely an API response information disclosure than a session hijacking. No CAPEC pattern specifically covers \u0027sensitive credential in API JSON response\u0027 without a session framing.",
"The commit references issue #816 but no reporter or finder is named in the patch metadata or commit message.",
"The 60-character maximum length validation for API keys is a new constraint introduced by the patch; it is unclear whether keys longer than 60 characters were previously valid, which could affect deployments with longer keys."
],
"capecRationale": [
{
"capecId": "CAPEC-126",
"rationale": "The closest available CAPEC pattern. The attack involves an attacker obtaining credential material (API keys) from a web application response and using it to authenticate to a subsequent service. CAPEC-126 covers the theft of session/credential tokens from a web application. The mapping is imperfect because the keys are long-lived API credentials rather than short-lived session tokens, and the attack does not involve a session per se, but the underlying mechanism (reading a credential from an HTTP response and replaying it) is the same class of attack. No CAPEC pattern specifically covers \u0027sensitive data in API response\u0027 without a session-hijacking framing, so this is the best available match."
}
],
"commit": "61c27893066cee80d9711649765ebc2bccd0e4af",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"cvssRationale": "AV:N: the /external_tools/list endpoint is reachable over the network via HTTP. AC:L: exploitation requires only a single GET request with no special conditions. AT:N: no attack prerequisites such as race conditions or specific timing. PR:N: regression tests confirm the endpoint returns 200 and previously included api_key for both authenticated and unauthenticated clients, indicating no privilege is required. UI:N: no victim interaction is needed; the attacker simply reads the response. VC:H: the exposed data is API keys (credentials) for external services, representing high confidentiality loss. VI:N and VA:N: no integrity or availability impact on the MISP Modules website. SC:H: the stolen API keys can be used to authenticate to external analysis/enrichment services, representing high confidentiality impact on a subsequent component. SI:N and SA:N: no integrity or availability impact on subsequent components is indicated.",
"draft": false,
"fixSummary": "The fix removes the api_key field from the ExternalTools.to_json() serializer so that /external_tools/list no longer returns credentials. The edit form is changed to a write-only pattern: the API key input starts empty, a blank or missing value on save retains the previously stored key, and a non-empty value replaces it. After a successful save the client clears the key field and does not propagate the credential into the in-memory tool list. Input validation is tightened to reject non-string or over-length key values. Server-side tool submissions continue to use the stored key from the database.",
"generatedAt": "2026-11-12T11:59:08.631868Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"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": "200a89910bce4823c08ee129545edc9fe7177cb0de9c5555925aa075155ca61b",
"patchSummary": "models.py: removed the api_key entry from ExternalTools.to_json(). external_tools.py (change_config endpoint): replaced the nested if-chain that required tool_api_key to be present and non-empty with a flat validation loop for tool_id/tool_name/tool_url, added a type-and-length check (string, max 60 chars) for tool_api_key when present, and made the field optional (write-only semantics). external_tools_core.py (change_config_core): changed tool.api_key assignment to be conditional on a truthy request_json.get(\u0027tool_api_key\u0027). external_tools_index.html: initialized the form key field to empty string instead of tool.api_key, added placeholder and helper text, fixed a bug where the error-clearing selector referenced the wrong field, moved browser-state updates to after a successful HTTP response (res.ok check), and cleared the key input after save. README.md: documented the write-only key behavior. Tests: added browser-level (Playwright) and unit-level regression tests verifying the list endpoint omits api_key,\u7a7a",
"patchTruncated": false,
"patches": [
{
"commit": "61c27893066cee80d9711649765ebc2bccd0e4af",
"date": "Thu, 12 Nov 2026 09:37:45 +0100",
"patchSha256": "200a89910bce4823c08ee129545edc9fe7177cb0de9c5555925aa075155ca61b",
"retrievedAt": "2026-11-12T11:58:13.406720Z",
"source": "https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch",
"sourceUrl": "https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch",
"subject": "fix: [website] keep external tool API keys out of responses"
}
],
"source": "https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T11:59:08Z",
"version": "2.0.3"
},
"subject": "fix: [website] keep external tool API keys out of responses",
"weaknessRationale": [
{
"cweId": "CWE-200",
"rationale": "The /external_tools/list endpoint returned stored API keys in its JSON response to any client (authenticated or not), exposing credentials to unauthorized parties. The browser form also pre-populated the key in the DOM."
},
{
"cweId": "CWE-522",
"rationale": "API keys used to authenticate to external services were stored and transmitted without adequate protection: they appeared in API responses and in client-side form state, violating the principle that credentials should be write-only from the client perspective."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (61c27893066cee80d9711649765ebc2bccd0e4af): fix: [website] keep external tool API keys out of responses",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch"
],
"timestamp": "2026-11-12T08:37:45Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch"
],
"timestamp": "2026-11-12T11:58:13.406720Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20141"
}
]
}
},
"cveMetadata": {
"cveId": "CVE-2026-127046",
"datePublished": "2026-11-12T12:01:50.481806Z",
"dateReserved": "2026-11-12T12:04:58.364Z",
"dateUpdated": "2026-11-12T13:49:40.957416Z",
"state": "PUBLISHED",
"vulnId": "gcve-1-2026-20141"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2.0"
}
GCVE-1-2026-20323 (CVE-2026-127016)
Vulnerability from gna-1 – Published: 2026-11-12 09:40 – Updated: 2026-11-12 09:49- CWE-862 - Missing Authorization
| URL | Tags |
|---|---|
| https://github.com/MISP/misp-modules/commit/28c27… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| misp | misp-modules |
Affected:
0 , ≤ 3.1.4
(semver)
cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:* |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-12 08:59 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch
a7fa238950e4… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
28c27e30f6d3
|
fix: [website] authorize external tool management | a7fa238950e4… |
Fix summary
A before_request authorization handler is added to the external_tools blueprint that checks whether the admin user is active (ADMIN_PASSWORD configured) and whether the current user is authenticated before any management endpoint executes. When both conditions indicate an unauthenticated request to a protected endpoint, the handler redirects to the login page (for the add endpoint) or returns a 403 Permission Denied response (for delete, status, and configuration endpoints). This enforces the same optional-admin policy already applied to module configuration, while preserving the existing open-management behavior when no admin password is configured.
Patch summary
The patch adds a before_request decorator on external_tools_blueprint in website/app/external_tools/external_tools.py that imports current_user from flask_login and admin_user_active from app.utils. The handler checks if the request endpoint is one of the four management endpoints (add_external_tool, delete_tool, change_status, change_config) and if the admin user is active but the current user is not authenticated, it either redirects to the login page or returns a 403 JSON response. The patch also adds a new test file website/tests/external_tools_checks.py with regression tests verifying that anonymous mutations are denied even with valid CSRF tokens, that authorization precedes JSON validation, that authenticated admins can perform all operations, and that the open-management policy is preserved when no admin password is set. The README is updated to document the new authorization requirement.
CVSS rationale
AV:N: The vulnerability is exploitable over the network via HTTP requests to the website. AC:L: No special conditions are required; standard HTTP POST/GET requests to known endpoints suffice. AT:N: No attack target manipulation is needed. PR:N: No privileges are required; the attack works as an anonymous user. UI:N: No user interaction is required. VC:L: Tool configurations including API keys and URLs are accessible/modifiable by the attacker. VI:H: The attacker can add, delete, and modify external tools, fully compromising the integrity of the tool management function. VA:L: Deleting or disabling tools reduces availability of data ingestion. SC:N: No secondary system confidentiality impact identified. SI:H: External tools feed into the broader MISP data pipeline; modifying them can corrupt or redirect data ingestion for the entire MISP instance. SA:N: No secondary availability impact beyond the direct effect.
Weakness rationale
- CWE-862 The external tools management endpoints (add, delete, change_status, change_config) lacked an authorization check that would verify the requester is an authenticated administrator when the admin-login policy is active. The authentication mechanism (flask_login, ADMIN_PASSWORD) existed in the application but was not applied to these specific endpoints, allowing anonymous users to perform privileged management operations.
Attack pattern rationale
- CAPEC-1 The closest available CAPEC pattern is Software Feature Discovery, as the attacker must identify the external tools management endpoints (e.g., /add_external_tool, /external_tools/<id>/delete_tool, /external_tools/change_status, /external_tools/change_config) and then issue unauthenticated requests to them. The vulnerability is exploited by discovering that these management functions are accessible without the authorization that the application's own documentation and parallel module-configuration endpoints imply. No CAPEC specifically models 'missing authorization on a discovered endpoint,' so CAPEC-1 is the best available match for the discovery-and-exploitation sequence.
Assumptions to verify
- The CAPEC mapping to CAPEC-1 (Software Feature Discovery) is the closest available pattern; no CAPEC specifically models exploitation of a missing authorization check on a discovered endpoint. The mapping is uncertain but is the best fit given the attack sequence of discovering and then invoking unauthenticated management endpoints.
- CVSS SI:H assumes that external tools in MISP feed into a broader data ingestion pipeline whose integrity is affected by unauthorized modification of tool configurations. If external tools are isolated to a single instance with no downstream consumers, SI could be reduced.
- The vulnerability is conditional on ADMIN_PASSWORD being configured. Installations without ADMIN_PASSWORD intentionally allow open management access by design and are not considered vulnerable.
- No specific version boundaries are identified in the patch; the affected version range is unspecified.
- The patch references issue #816 in the MISP/misp-modules repository, but no additional context about the issue tracker entry is available to confirm reporter or finder credits.
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 | 11 | medium | 5 |
- 2026-11-12 08:37 UTC Fix developed Corrective change authored (28c27e30f6d3a10e38fe9c54bb52f57ccf70d027): fix: [website] authorize external tool management https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch
- 2026-11-12 08:58 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*"
],
"modules": [
"external_tools"
],
"product": "misp-modules",
"programFiles": [
"website/app/external_tools/external_tools.py"
],
"repo": "https://github.com/MISP/misp-modules",
"vendor": "misp",
"versions": [
{
"lessThanOrEqual": "3.1.4",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*",
"versionEndIncluding": "3.1.4",
"versionStartIncluding": "0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"descriptions": [
{
"lang": "en",
"value": "The MISP Modules website component exposes external tool management endpoints (add, delete, change status, and change configuration) that did not enforce the optional administrator authentication policy. When ADMIN_PASSWORD was configured in the application environment, the module configuration endpoints correctly required an authenticated administrator session, but the external tools management handlers processed requests from anonymous users without any authorization check. An unauthenticated attacker with network access to the website could add arbitrary external tools, delete existing tools, toggle their active status, and modify their configurations including API keys and ingestion URLs. This inconsistency allowed bypass of the intended access control for the external tools management functionality. The vulnerability is conditional on ADMIN_PASSWORD being set; installations without an admin password intentionally permit open management access by design. The affected component is the external_tools Flask blueprint within the MISP Modules website application."
}
],
"impacts": [
{
"capecId": "CAPEC-1",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-1 Software Feature Discovery"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 9.2,
"baseSeverity": "CRITICAL",
"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:L/VI:H/VA:L/SC:N/SI:H/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "LOW",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T08:59:10Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027"
}
],
"solutions": [
{
"lang": "en",
"value": "A before_request authorization handler is added to the external_tools blueprint that checks whether the admin user is active (ADMIN_PASSWORD configured) and whether the current user is authenticated before any management endpoint executes. When both conditions indicate an unauthenticated request to a protected endpoint, the handler redirects to the login page (for the add endpoint) or returns a 403 Permission Denied response (for delete, status, and configuration endpoints). This enforces the same optional-admin policy already applied to module configuration, while preserving the existing open-management behavior when no admin password is configured."
}
],
"title": "MISP Modules Website: Missing Authorization on External Tool Management Endpoints",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The CAPEC mapping to CAPEC-1 (Software Feature Discovery) is the closest available pattern; no CAPEC specifically models exploitation of a missing authorization check on a discovered endpoint. The mapping is uncertain but is the best fit given the attack sequence of discovering and then invoking unauthenticated management endpoints.",
"CVSS SI:H assumes that external tools in MISP feed into a broader data ingestion pipeline whose integrity is affected by unauthorized modification of tool configurations. If external tools are isolated to a single instance with no downstream consumers, SI could be reduced.",
"The vulnerability is conditional on ADMIN_PASSWORD being configured. Installations without ADMIN_PASSWORD intentionally allow open management access by design and are not considered vulnerable.",
"No specific version boundaries are identified in the patch; the affected version range is unspecified.",
"The patch references issue #816 in the MISP/misp-modules repository, but no additional context about the issue tracker entry is available to confirm reporter or finder credits."
],
"capecRationale": [
{
"capecId": "CAPEC-1",
"rationale": "The closest available CAPEC pattern is Software Feature Discovery, as the attacker must identify the external tools management endpoints (e.g., /add_external_tool, /external_tools/\u003cid\u003e/delete_tool, /external_tools/change_status, /external_tools/change_config) and then issue unauthenticated requests to them. The vulnerability is exploited by discovering that these management functions are accessible without the authorization that the application\u0027s own documentation and parallel module-configuration endpoints imply. No CAPEC specifically models \u0027missing authorization on a discovered endpoint,\u0027 so CAPEC-1 is the best available match for the discovery-and-exploitation sequence."
}
],
"commit": "28c27e30f6d3a10e38fe9c54bb52f57ccf70d027",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"cvssRationale": "AV:N: The vulnerability is exploitable over the network via HTTP requests to the website. AC:L: No special conditions are required; standard HTTP POST/GET requests to known endpoints suffice. AT:N: No attack target manipulation is needed. PR:N: No privileges are required; the attack works as an anonymous user. UI:N: No user interaction is required. VC:L: Tool configurations including API keys and URLs are accessible/modifiable by the attacker. VI:H: The attacker can add, delete, and modify external tools, fully compromising the integrity of the tool management function. VA:L: Deleting or disabling tools reduces availability of data ingestion. SC:N: No secondary system confidentiality impact identified. SI:H: External tools feed into the broader MISP data pipeline; modifying them can corrupt or redirect data ingestion for the entire MISP instance. SA:N: No secondary availability impact beyond the direct effect.",
"draft": false,
"fixSummary": "A before_request authorization handler is added to the external_tools blueprint that checks whether the admin user is active (ADMIN_PASSWORD configured) and whether the current user is authenticated before any management endpoint executes. When both conditions indicate an unauthenticated request to a protected endpoint, the handler redirects to the login page (for the add endpoint) or returns a 403 Permission Denied response (for delete, status, and configuration endpoints). This enforces the same optional-admin policy already applied to module configuration, while preserving the existing open-management behavior when no admin password is configured.",
"generatedAt": "2026-11-12T08:59:10.622852Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "a7fa238950e4db922c8ad604a6abe453385d29b8a6bcc58762a4fe72add73775",
"patchSummary": "The patch adds a before_request decorator on external_tools_blueprint in website/app/external_tools/external_tools.py that imports current_user from flask_login and admin_user_active from app.utils. The handler checks if the request endpoint is one of the four management endpoints (add_external_tool, delete_tool, change_status, change_config) and if the admin user is active but the current user is not authenticated, it either redirects to the login page or returns a 403 JSON response. The patch also adds a new test file website/tests/external_tools_checks.py with regression tests verifying that anonymous mutations are denied even with valid CSRF tokens, that authorization precedes JSON validation, that authenticated admins can perform all operations, and that the open-management policy is preserved when no admin password is set. The README is updated to document the new authorization requirement.",
"patchTruncated": false,
"patches": [
{
"commit": "28c27e30f6d3a10e38fe9c54bb52f57ccf70d027",
"date": "Thu, 12 Nov 2026 09:37:23 +0100",
"patchSha256": "a7fa238950e4db922c8ad604a6abe453385d29b8a6bcc58762a4fe72add73775",
"retrievedAt": "2026-11-12T08:58:21.777259Z",
"source": "https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch",
"sourceUrl": "https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch",
"subject": "fix: [website] authorize external tool management"
}
],
"source": "https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T08:59:10Z",
"version": "2.0.3"
},
"subject": "fix: [website] authorize external tool management",
"weaknessRationale": [
{
"cweId": "CWE-862",
"rationale": "The external tools management endpoints (add, delete, change_status, change_config) lacked an authorization check that would verify the requester is an authenticated administrator when the admin-login policy is active. The authentication mechanism (flask_login, ADMIN_PASSWORD) existed in the application but was not applied to these specific endpoints, allowing anonymous users to perform privileged management operations."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (28c27e30f6d3a10e38fe9c54bb52f57ccf70d027): fix: [website] authorize external tool management",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch"
],
"timestamp": "2026-11-12T08:37:23Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch"
],
"timestamp": "2026-11-12T08:58:21.777259Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20323"
}
]
}
},
"cveMetadata": {
"cveId": "CVE-2026-127016",
"datePublished": "2026-11-12T09:40:23.014021Z",
"dateReserved": "2026-11-12T09:45:10.065Z",
"dateUpdated": "2026-11-12T09:49:37.028410Z",
"state": "PUBLISHED",
"vulnId": "gcve-1-2026-20323"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2.0"
}
GCVE-1-2026-20333 (CVE-2026-126991)
Vulnerability from gna-1 – Published: 2026-11-12 07:28 – Updated: 2026-11-12 07:33| Vendor | Product | Version | |
|---|---|---|---|
| misp | misp-modules |
Affected:
unspecified , ≤ 3.1.4
(semver)
cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:* |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-12 05:54 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch
5b0d882d17ba… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
7a2a7e3d9e0f
|
Improve Wikidata enrichment and return MISP standard | 5b0d882d17ba… |
Fix summary
The vulnerability is remediated by properly escaping user-supplied text as a SPARQL string literal using json.dumps with ensure_ascii=False, which neutralizes quotes, backslashes, newlines, and control characters. Additional hardening includes strict validation of the language tag, numeric configuration values, text length, and UUID format before query construction; validation of Wikidata response structure and entity URI format before importing results; replacement of raw exception formatting with generic error messages that do not expose upstream details; use of the modern Wikidata SPARQL endpoint with POST method; a proper MISP user-agent string; and a bounded request timeout.
Patch summary
The patch rewrites the wiki.py handler to: (1) escape user text via json.dumps(text, ensure_ascii=False) before embedding in the SPARQL query; (2) validate language tags with a regex, numeric settings (max_results 1-25, timeout 1-60), text length (1-2000 chars), and UUID format; (3) switch from string concatenation to a properly escaped SPARQL literal; (4) use the modern https://query.wikidata.org/sparql endpoint with POST method and a MISP user-agent; (5) validate Wikidata response bindings and entity URIs against a strict pattern before creating annotation objects; (6) replace the mutable shared misperrors dict and raw exception formatting with a ModuleError class and generic error strings; (7) add a 313-line test suite (tests/test_wiki.py) covering injection vectors, invalid inputs, malformed responses, and error sanitization; (8) update documentation and module metadata to reflect the new misp_standard output format and configuration options.
CVSS rationale
AV:N: The module is invoked over the network via the MISP API. AC:L: The injection requires only crafting a text value with SPARQL metacharacters; no race conditions or complex prerequisites. AT:N: No need to manipulate the attack target. PR:L: Requires authenticated access to a MISP instance with the wiki module enabled. UI:N: No user interaction beyond the API call. VC:N: The queried data is public Wikidata; no confidential MISP data is exposed. VI:L: An attacker can alter the enrichment results (integrity of advisory annotations) and the old error path could leak internal details. VA:N: No meaningful availability impact on the MISP system. SC/SI/SA:N: No impact on external systems beyond the public Wikidata service. Overall severity is low given the limited blast radius.
Weakness rationale
- CWE-94 The module dynamically constructs a SPARQL query by concatenating untrusted user input directly into the query string without neutralizing special elements. This is the same pattern as code/query injection: the intended query structure is modified by attacker-controlled input. SPARQL is a query language interpreted by the Wikidata endpoint, making this a code injection into a query interpreter.
- CWE-209 The old code formatted raw exception objects into the error response string ('wikidata API not accessible {}'.format(e)), which could expose internal details such as proxy credentials, full query text, or upstream response bodies. The fix replaces this with generic error messages.
Attack pattern rationale
- CAPEC-143 CAPEC-143 describes injection of query language fragments through unsanitized input into a dynamically constructed query. Although the CAPEC name references SQL specifically, the attack pattern is identical: an attacker supplies input containing query-language metacharacters (quotes, braces, keywords) that alter the structure of the query sent to an interpreter. SPARQL injection follows the same pattern. This is the closest available CAPEC; no SPARQL-specific CAPEC exists in the catalog. The uncertainty is that the CAPEC is SQL-specific in naming, but the underlying technique (query injection via string concatenation) is the same.
Assumptions to verify
- The CAPEC-143 mapping is the closest available pattern; no SPARQL-specific CAPEC exists in the catalog. The underlying technique (query injection via unsanitized string concatenation) is identical to SQL injection.
- CVSS PR:L assumes the attacker has authenticated access to a MISP instance with the wiki expansion module enabled. The actual privilege level required depends on MISP role configuration, which is not specified in the patch.
- The affected version range is unspecified; the patch does not include version tags or release boundaries. The vulnerability existed in module version 0.2 (as indicated by the old moduleinfo) and was fixed in version 1.0.
- The CVSS VI:L rating accounts for both the query manipulation and the old error-message information disclosure. If only the injection is considered (without the error leak), VI could be rated N.
- The patch is treated as a single vulnerability fix (SPARQL injection) with associated hardening changes (error sanitization, input validation, endpoint update). The caller asserts all changes relate to the same vulnerability.
- No evidence of active exploitation, PoC, or in-the-wild usage was found in the patch or 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 | 11 | medium | 6 |
- 2026-11-12 04:47 UTC Fix developed Corrective change authored (7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9): Improve Wikidata enrichment and return MISP standard https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch
- 2026-11-12 05:53 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*"
],
"modules": [
"misp_modules/modules/expansion/wiki.py"
],
"product": "misp-modules",
"programFiles": [
"misp_modules/modules/expansion/wiki.py"
],
"repo": "https://github.com/MISP/misp-modules",
"vendor": "misp",
"versions": [
{
"lessThanOrEqual": "3.1.4",
"status": "affected",
"version": "unspecified",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*",
"versionEndExcluding": "3.1.4",
"versionStartIncluding": "0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"descriptions": [
{
"lang": "en",
"value": "The Wikidata Lookup expansion module (wiki.py) in MISP misp-modules contained a SPARQL injection vulnerability. The handler function constructed a SPARQL query by directly concatenating the user-supplied text value into the query string without any escaping or parameterization: \u0027SELECT ?item WHERE { ?item rdfs:label\"\u0027 + request.get(\"text\") + \u0027\" @en }\u0027. An authenticated MISP user with access to the module could supply a crafted text attribute value containing SPARQL syntax (quotes, closing braces, UNION, SERVICE, LIMIT, etc.) to alter the structure of the query sent to the Wikidata SPARQL endpoint. This could allow an attacker to modify the query logic, extract unintended data, or cause the query to fail in ways that expose internal error details. Additionally, the old error handling path formatted raw exception objects into the response string (\u0027wikidata API not accessible {}\u0027.format(e)), potentially leaking internal information such as proxy credentials, query contents, or response bodies. The module also used a spoofed browser user-agent string and the deprecated Wikidata endpoint. The vulnerability required authenticated access to the MISP instance and the ability to invoke the wiki expansion module with a text attribute. The impact is limited to manipulation of the enrichment query and potential disclosure of internal error details; it does not directly compromise the MISP server or its stored data."
}
],
"impacts": [
{
"capecId": "CAPEC-143",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-143 SQL Injection"
}
]
}
],
"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"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T05:54:11Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-94",
"description": "CWE-94 Improper Control of Generation of Code (\u0027Code Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-209",
"description": "CWE-209 Generation of Error Message Containing Sensitive Information",
"lang": "en",
"type": "CWE"
}
]
}
],
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9"
},
{
"url": "https://misp.github.io/misp-modules/expansion/#wikidata-lookup"
},
{
"url": "https://github.com/MISP/misp-modules/pull/869"
},
{
"url": "https://github.com/MISP/misp-modules"
}
],
"solutions": [
{
"lang": "en",
"value": "The vulnerability is remediated by properly escaping user-supplied text as a SPARQL string literal using json.dumps with ensure_ascii=False, which neutralizes quotes, backslashes, newlines, and control characters. Additional hardening includes strict validation of the language tag, numeric configuration values, text length, and UUID format before query construction; validation of Wikidata response structure and entity URI format before importing results; replacement of raw exception formatting with generic error messages that do not expose upstream details; use of the modern Wikidata SPARQL endpoint with POST method; a proper MISP user-agent string; and a bounded request timeout."
}
],
"title": "SPARQL Injection in MISP Wikidata Lookup Module via Unescaped User Input",
"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 CAPEC-143 mapping is the closest available pattern; no SPARQL-specific CAPEC exists in the catalog. The underlying technique (query injection via unsanitized string concatenation) is identical to SQL injection.",
"CVSS PR:L assumes the attacker has authenticated access to a MISP instance with the wiki expansion module enabled. The actual privilege level required depends on MISP role configuration, which is not specified in the patch.",
"The affected version range is unspecified; the patch does not include version tags or release boundaries. The vulnerability existed in module version 0.2 (as indicated by the old moduleinfo) and was fixed in version 1.0.",
"The CVSS VI:L rating accounts for both the query manipulation and the old error-message information disclosure. If only the injection is considered (without the error leak), VI could be rated N.",
"The patch is treated as a single vulnerability fix (SPARQL injection) with associated hardening changes (error sanitization, input validation, endpoint update). The caller asserts all changes relate to the same vulnerability.",
"No evidence of active exploitation, PoC, or in-the-wild usage was found in the patch or metadata."
],
"capecRationale": [
{
"capecId": "CAPEC-143",
"rationale": "CAPEC-143 describes injection of query language fragments through unsanitized input into a dynamically constructed query. Although the CAPEC name references SQL specifically, the attack pattern is identical: an attacker supplies input containing query-language metacharacters (quotes, braces, keywords) that alter the structure of the query sent to an interpreter. SPARQL injection follows the same pattern. This is the closest available CAPEC; no SPARQL-specific CAPEC exists in the catalog. The uncertainty is that the CAPEC is SQL-specific in naming, but the underlying technique (query injection via string concatenation) is the same."
}
],
"commit": "7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"cvssRationale": "AV:N: The module is invoked over the network via the MISP API. AC:L: The injection requires only crafting a text value with SPARQL metacharacters; no race conditions or complex prerequisites. AT:N: No need to manipulate the attack target. PR:L: Requires authenticated access to a MISP instance with the wiki module enabled. UI:N: No user interaction beyond the API call. VC:N: The queried data is public Wikidata; no confidential MISP data is exposed. VI:L: An attacker can alter the enrichment results (integrity of advisory annotations) and the old error path could leak internal details. VA:N: No meaningful availability impact on the MISP system. SC/SI/SA:N: No impact on external systems beyond the public Wikidata service. Overall severity is low given the limited blast radius.",
"draft": false,
"fixSummary": "The vulnerability is remediated by properly escaping user-supplied text as a SPARQL string literal using json.dumps with ensure_ascii=False, which neutralizes quotes, backslashes, newlines, and control characters. Additional hardening includes strict validation of the language tag, numeric configuration values, text length, and UUID format before query construction; validation of Wikidata response structure and entity URI format before importing results; replacement of raw exception formatting with generic error messages that do not expose upstream details; use of the modern Wikidata SPARQL endpoint with POST method; a proper MISP user-agent string; and a bounded request timeout.",
"generatedAt": "2026-11-12T05:54:11.233388Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"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": "5b0d882d17baea052254770c3c94d50c8e1ab2314fa4eec89088c15e059f2837",
"patchSummary": "The patch rewrites the wiki.py handler to: (1) escape user text via json.dumps(text, ensure_ascii=False) before embedding in the SPARQL query; (2) validate language tags with a regex, numeric settings (max_results 1-25, timeout 1-60), text length (1-2000 chars), and UUID format; (3) switch from string concatenation to a properly escaped SPARQL literal; (4) use the modern https://query.wikidata.org/sparql endpoint with POST method and a MISP user-agent; (5) validate Wikidata response bindings and entity URIs against a strict pattern before creating annotation objects; (6) replace the mutable shared misperrors dict and raw exception formatting with a ModuleError class and generic error strings; (7) add a 313-line test suite (tests/test_wiki.py) covering injection vectors, invalid inputs, malformed responses, and error sanitization; (8) update documentation and module metadata to reflect the new misp_standard output format and configuration options.",
"patchTruncated": false,
"patches": [
{
"commit": "7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9",
"date": "Thu, 12 Nov 2026 04:47:41 +0000",
"patchSha256": "5b0d882d17baea052254770c3c94d50c8e1ab2314fa4eec89088c15e059f2837",
"retrievedAt": "2026-11-12T05:53:20.752027Z",
"source": "https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch",
"sourceUrl": "https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch",
"subject": "Improve Wikidata enrichment and return MISP standard"
}
],
"source": "https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T05:54:11Z",
"version": "2.0.3"
},
"subject": "Improve Wikidata enrichment and return MISP standard",
"weaknessRationale": [
{
"cweId": "CWE-94",
"rationale": "The module dynamically constructs a SPARQL query by concatenating untrusted user input directly into the query string without neutralizing special elements. This is the same pattern as code/query injection: the intended query structure is modified by attacker-controlled input. SPARQL is a query language interpreted by the Wikidata endpoint, making this a code injection into a query interpreter."
},
{
"cweId": "CWE-209",
"rationale": "The old code formatted raw exception objects into the error response string (\u0027wikidata API not accessible {}\u0027.format(e)), which could expose internal details such as proxy credentials, full query text, or upstream response bodies. The fix replaces this with generic error messages."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9): Improve Wikidata enrichment and return MISP standard",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch"
],
"timestamp": "2026-11-12T04:47:41Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch"
],
"timestamp": "2026-11-12T05:53:20.752027Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20333"
}
]
}
},
"cveMetadata": {
"cveId": "CVE-2026-126991",
"datePublished": "2026-11-12T07:28:09.005889Z",
"dateReserved": "2026-11-12T07:30:41.366Z",
"dateUpdated": "2026-11-12T07:33:42.155982Z",
"state": "PUBLISHED",
"vulnId": "gcve-1-2026-20333"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2.0"
}
GCVE-1-2026-20273 (CVE-2026-125871)
Vulnerability from gna-1 – Published: 2026-11-10 12:48 – Updated: 2026-11-10 15:01| URL | Tags |
|---|---|
| https://github.com/MISP/misp-modules/commit/7cb31… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| MISP | misp-modules |
Affected:
0 , < 3.0.13
(semver)
cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:* |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-10 11:02 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch
736974194693… - Confidence
- high
| Commit | Subject | Patch SHA-256 |
|---|---|---|
7cb31e96a1f5
|
fix: [sourcecache] validate URLs before archiving to block | 736974194693… |
Fix summary
The fix introduces a URL validation gate (is_safe_url) that is invoked before any archiving request is made. The function restricts the scheme to http or https, resolves the hostname via DNS, and verifies that every resolved IP address is globally routable (i.e., not loopback, private, link-local, or otherwise non-global). If any check fails, the module returns an error and the fetch is never performed, preventing the server from being directed to internal or non-HTTP targets.
Patch summary
Adds imports for ipaddress and socket. Introduces a new is_safe_url(url) function that parses the URL, rejects non-http/https schemes, resolves the hostname with socket.getaddrinfo, and rejects the URL if any resolved address fails ipaddress.ip_address().is_global(). In the handler() function, a guard clause calls is_safe_url(tocache) before invoking __archiveLink and returns an error dict if the URL is not safe. Two new unit tests verify that http://127.0.0.1:6379/ and file:///etc/passwd are blocked and that the archive function is never called.
CVSS rationale
AV:N: The MISP API is network-accessible. AC:L: Crafting a URL attribute with an internal address is trivial. AT:N: No special adversary technique is required. PR:L: An authenticated MISP user with attribute-creation rights is needed. UI:N: No victim interaction beyond the attacker's own API call. VC/VI/VA:N: The MISP server's own confidentiality, integrity, and availability are not directly compromised. SC:H: The subsequent component (internal services, cloud metadata) suffers high confidentiality impact because its data is exfiltrated into the MISP event. SI:N: The module only performs GET-style fetches; no evidence of integrity impact on subsequent components. SA:N: No availability impact on subsequent components is indicated.
Weakness rationale
- CWE-918 The module accepts a user-supplied URL and issues a server-side HTTP request to it without validating the target, allowing an attacker to direct requests to internal or non-HTTP resources. This is a textbook SSRF.
- CWE-20 The root cause is the absence of any validation on the URL attribute value before it is used as a request target. The fix adds scheme, hostname, and IP-address validation, confirming the missing input validation was the defect.
Attack pattern rationale
- CAPEC-12 The patch explicitly describes and remediates an SSRF: an attacker-supplied URL causes the MISP server to fetch internal resources (loopback, cloud metadata) and return the data. CAPEC-12 is the direct and most specific attack pattern for this scenario. No uncertainty is noted; the commit message and code changes align precisely with this pattern.
Assumptions to verify
- The MISP server is assumed to be reachable over the network and that an authenticated user with attribute-creation permissions can submit link/url attributes; no specific MISP version or authentication model is stated in the patch.
- CVSS PR:L assumes a low-privilege authenticated MISP user can create attributes; if MISP requires higher-level permissions, PR could be H.
- CVSS SI:N assumes the archiving function only performs read (GET) requests; if it can issue state-changing methods, SI could be elevated.
- SSVC technical_impact 'partial' is the least-assumptive choice; if cloud metadata endpoint access leads to full credential theft and infrastructure takeover, impact could be 'total'.
- The CAPEC-12 mapping is high-confidence based on the explicit SSRF description in the commit message and the code changes; no uncertainty is expected.
- No specific affected or fixed version numbers are provided in the patch metadata; version boundaries are marked as unspecified.
- The is_global check in Python's ipaddress module covers loopback, private, link-local, and other non-global ranges, but DNS rebinding between the check and the actual fetch is not addressed by this patch and could remain a residual risk.
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 | 11 | high | 7 |
- 2026-10-16 22:27 UTC Fix developed Corrective change authored (7cb31e96a1f59bec9afbc087b27b26d9986c6841): fix: [sourcecache] validate URLs before archiving to block https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch
- 2026-11-10 11:01 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*"
],
"modules": [
"sourcecache"
],
"product": "misp-modules",
"programFiles": [
"misp_modules/modules/expansion/sourcecache.py"
],
"repo": "https://github.com/MISP/misp-modules",
"vendor": "MISP",
"versions": [
{
"lessThan": "3.0.13",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:misp:misp_modules:*:*:*:*:*:*:*:*",
"versionEndExcluding": "3.0.13",
"versionStartIncluding": "0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"descriptions": [
{
"lang": "en",
"value": "The sourcecache expansion module in MISP Modules (misp-modules) contains a Server-Side Request Forgery (SSRF) vulnerability. When a user with permission to create or modify attributes of type \u0027link\u0027 or \u0027url\u0027 submits an attribute value, the module passes the URL directly to its internal archiving function without any validation of the target address. An attacker can therefore craft a URL pointing to loopback addresses (e.g., 127.0.0.1), private network ranges, link-local addresses, or cloud metadata endpoints (e.g., 169.254.169.254). The MISP server will issue an HTTP request to that target and store the response body in the event, effectively exfiltrating data from internal services to the attacker through the MISP interface. Non-HTTP schemes such as file:// are also accepted, potentially allowing local file disclosure. The vulnerability requires an authenticated MISP user with the ability to create or edit attributes of the affected types. The security impact is information disclosure from internal services reachable by the MISP server, including sensitive data such as cloud credentials, internal application data, or local files."
}
],
"impacts": [
{
"capecId": "CAPEC-12",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-12 Exploiting SSRF"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 6.3,
"baseSeverity": "MEDIUM",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-10T11:02:25Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-918",
"description": "CWE-918 Server-Side Request Forgery (SSRF)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-20",
"description": "CWE-20 Improper Input Validation",
"lang": "en",
"type": "CWE"
}
]
}
],
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841"
}
],
"solutions": [
{
"lang": "en",
"value": "The fix introduces a URL validation gate (is_safe_url) that is invoked before any archiving request is made. The function restricts the scheme to http or https, resolves the hostname via DNS, and verifies that every resolved IP address is globally routable (i.e., not loopback, private, link-local, or otherwise non-global). If any check fails, the module returns an error and the fetch is never performed, preventing the server from being directed to internal or non-HTTP targets."
}
],
"title": "MISP sourcecache module SSRF allows fetching arbitrary internal URLs via attribute enrichment",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The MISP server is assumed to be reachable over the network and that an authenticated user with attribute-creation permissions can submit link/url attributes; no specific MISP version or authentication model is stated in the patch.",
"CVSS PR:L assumes a low-privilege authenticated MISP user can create attributes; if MISP requires higher-level permissions, PR could be H.",
"CVSS SI:N assumes the archiving function only performs read (GET) requests; if it can issue state-changing methods, SI could be elevated.",
"SSVC technical_impact \u0027partial\u0027 is the least-assumptive choice; if cloud metadata endpoint access leads to full credential theft and infrastructure takeover, impact could be \u0027total\u0027.",
"The CAPEC-12 mapping is high-confidence based on the explicit SSRF description in the commit message and the code changes; no uncertainty is expected.",
"No specific affected or fixed version numbers are provided in the patch metadata; version boundaries are marked as unspecified.",
"The is_global check in Python\u0027s ipaddress module covers loopback, private, link-local, and other non-global ranges, but DNS rebinding between the check and the actual fetch is not addressed by this patch and could remain a residual risk."
],
"capecRationale": [
{
"capecId": "CAPEC-12",
"rationale": "The patch explicitly describes and remediates an SSRF: an attacker-supplied URL causes the MISP server to fetch internal resources (loopback, cloud metadata) and return the data. CAPEC-12 is the direct and most specific attack pattern for this scenario. No uncertainty is noted; the commit message and code changes align precisely with this pattern."
}
],
"commit": "7cb31e96a1f59bec9afbc087b27b26d9986c6841",
"confidence": "high",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"cvssRationale": "AV:N: The MISP API is network-accessible. AC:L: Crafting a URL attribute with an internal address is trivial. AT:N: No special adversary technique is required. PR:L: An authenticated MISP user with attribute-creation rights is needed. UI:N: No victim interaction beyond the attacker\u0027s own API call. VC/VI/VA:N: The MISP server\u0027s own confidentiality, integrity, and availability are not directly compromised. SC:H: The subsequent component (internal services, cloud metadata) suffers high confidentiality impact because its data is exfiltrated into the MISP event. SI:N: The module only performs GET-style fetches; no evidence of integrity impact on subsequent components. SA:N: No availability impact on subsequent components is indicated.",
"draft": false,
"fixSummary": "The fix introduces a URL validation gate (is_safe_url) that is invoked before any archiving request is made. The function restricts the scheme to http or https, resolves the hostname via DNS, and verifies that every resolved IP address is globally routable (i.e., not loopback, private, link-local, or otherwise non-global). If any check fails, the module returns an error and the fetch is never performed, preventing the server from being directed to internal or non-HTTP targets.",
"generatedAt": "2026-11-10T11:02:25.004287Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 7,
"confidence": "high",
"model": "qwen3.8:27b",
"score": 6
}
],
"selectedModel": "qwen3.8:27b",
"selectionMethod": "deterministic-consensus-v1",
"selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
},
"patchSha256": "736974194693496cbcfe68e570862a9e221a43f5f6820180e20958b617ebb97c",
"patchSummary": "Adds imports for ipaddress and socket. Introduces a new is_safe_url(url) function that parses the URL, rejects non-http/https schemes, resolves the hostname with socket.getaddrinfo, and rejects the URL if any resolved address fails ipaddress.ip_address().is_global(). In the handler() function, a guard clause calls is_safe_url(tocache) before invoking __archiveLink and returns an error dict if the URL is not safe. Two new unit tests verify that http://127.0.0.1:6379/ and file:///etc/passwd are blocked and that the archive function is never called.",
"patchTruncated": false,
"patches": [
{
"commit": "7cb31e96a1f59bec9afbc087b27b26d9986c6841",
"date": "Fri, 16 Oct 2026 22:27:37 +0000",
"patchSha256": "736974194693496cbcfe68e570862a9e221a43f5f6820180e20958b617ebb97c",
"retrievedAt": "2026-11-10T11:01:44.851219Z",
"source": "https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch",
"sourceUrl": "https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch",
"subject": "fix: [sourcecache] validate URLs before archiving to block"
}
],
"source": "https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-10T11:02:25Z",
"version": "2.0.3"
},
"subject": "fix: [sourcecache] validate URLs before archiving to block",
"weaknessRationale": [
{
"cweId": "CWE-918",
"rationale": "The module accepts a user-supplied URL and issues a server-side HTTP request to it without validating the target, allowing an attacker to direct requests to internal or non-HTTP resources. This is a textbook SSRF."
},
{
"cweId": "CWE-20",
"rationale": "The root cause is the absence of any validation on the URL attribute value before it is used as a request target. The fix adds scheme, hostname, and IP-address validation, confirming the missing input validation was the defect."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (7cb31e96a1f59bec9afbc087b27b26d9986c6841): fix: [sourcecache] validate URLs before archiving to block",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch"
],
"timestamp": "2026-10-16T22:27:37Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch"
],
"timestamp": "2026-11-10T11:01:44.851219Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20273"
}
]
}
},
"cveMetadata": {
"cveId": "CVE-2026-125871",
"datePublished": "2026-11-10T12:48:56.140741Z",
"dateReserved": "2026-11-10T12:50:34.525Z",
"dateUpdated": "2026-11-10T15:01:59.744395Z",
"state": "PUBLISHED",
"vulnId": "gcve-1-2026-20273"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2.0"
}
GCVE-1-2026-20156 (CVE-2026-124850)
Vulnerability from gna-1 – Published: 2026-11-09 14:32 – Updated: 2026-11-09 21:47- CWE-89 - Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
| URL | Tags |
|---|---|
| https://github.com/flowintel/flowintel/commit/061… | patch |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-09 14:12 - Model
qwen3.8:27b- Input
-
https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch
9ad956ded461… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
061053689dc2
|
fix: [security] Bind stored connector identifiers during | 9ad956ded461… |
Fix summary
The vulnerability is remediated by replacing direct string interpolation of stored database values into SQL queries with parameterized (bound) queries, ensuring that user-supplied or stored data is treated strictly as data rather than executable SQL. Additionally, the NULL handling for identifier fields is corrected to use proper SQL NULL instead of the string literal 'null', preventing both injection and unintended data corruption.
Patch summary
In migrations/versions/5cd03995339b_.py, four SQL statements (two SELECT and two UPDATE) are converted from Python f-string interpolation to SQLAlchemy parameterized queries using named bind parameters (:case_id, :instance_id, :ident, :id, :task_id). The NULL identifier handling is changed from assigning the string 'null' to assigning Python None, which SQLAlchemy translates to a proper SQL NULL value.
CVSS rationale
AV:L: The migration runs locally on the application server; exploitation requires local access to the database. AC:H: High complexity because the attacker must first write a crafted identifier into the database and then wait for a migration to execute. AT:P: Attack targeting is present; the attacker must specifically craft a malicious SQL payload in the identifier field. PR:L: Low privilege; the attacker needs write access to the database (e.g., an authenticated application user or DB access). UI:N: The migration runs automatically during upgrade; no user interaction is required at trigger time. VC:H, VI:H, VA:H: Successful SQL injection allows arbitrary read, write, and destructive operations on the database. SC:N, SI:N, SA:N: Impact is confined to the local database; no evidence of cross-component or cross-system impact.
Weakness rationale
- CWE-89 The patch directly replaces f-string interpolation of stored values into SQL with parameterized queries, which is the canonical fix for CWE-89. The commit message explicitly states that stored identifiers were 'interpolated into SQL, allowing expressions to execute,' confirming SQL injection.
Attack pattern rationale
- CAPEC-126 The vulnerability is a textbook SQL injection: attacker-controlled data (stored connector identifiers) is concatenated into SQL statements without sanitization or parameterization. CAPEC-126 is the most direct and specific match. The stored nature of the injection (data planted earlier, executed later during migration) is a variant but still falls squarely within this pattern.
Assumptions to verify
- The affected version range is inferred from the explicit context (affected_version '0', fixed_version '<=4.0.0'); the exact starting version is not confirmed by the patch itself.
- PR:L assumes the attacker can write to the database via an authenticated application role or direct DB access; the specific authentication mechanism is not stated in the patch.
- The CVSS impact ratings (VC:H, VI:H, VA:H) assume the database user has broad privileges; if the DB account is highly restricted, impact could be lower.
- CAPEC-126 is selected as the closest match; the stored/timed nature of the injection (data planted before migration runs) is a variant not explicitly covered by a more specific CAPEC.
- The patch does not indicate whether the migration has already been executed in deployed instances, which would affect real-world exploitability.
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 | 11 | medium | 5 |
- 2026-11-06 09:54 UTC Fix developed Corrective change authored (061053689dc279a3c2c182f8dc15cd42dc24bd7d): fix: [security] Bind stored connector identifiers during https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch
- 2026-11-09 14:10 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:flowintel:flowintel:*:*:*:*:*:*:*:*"
],
"modules": [
"migrations"
],
"product": "flowintel",
"programFiles": [
"migrations/versions/5cd03995339b_.py"
],
"repo": "https://github.com/flowintel/flowintel",
"vendor": "flowintel",
"versions": [
{
"lessThanOrEqual": "4.0.0",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:flowintel:flowintel:*:*:*:*:*:*:*:*",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "David Cruciani"
}
],
"descriptions": [
{
"lang": "en",
"value": "A SQL injection vulnerability exists in a database migration script in flowintel.\n\nThe migration process reads stored connector identifier values from the database and interpolates them directly into SQL statements without parameterization. An attacker who has previously written a malicious identifier value into the affected tables can cause arbitrary SQL execution when the migration is subsequently run during an application upgrade.\n\n- Requires prior write access to the database to plant a malicious identifier value\n- Triggered automatically during a migration or upgrade operation\n- Can result in unauthorized data disclosure, modification, or deletion\n\nAffected versions: flowintel prior to 4.0.0"
}
],
"impacts": [
{
"capecId": "CAPEC-126",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-126 SQL Injection"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "HIGH",
"attackRequirements": "PRESENT",
"attackVector": "LOCAL",
"baseScore": 7.3,
"baseSeverity": "HIGH",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-09T14:12:17Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-89",
"description": "CWE-89 Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"orgId": "00000000-0000-4000-8000-000000000000"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d"
}
],
"solutions": [
{
"lang": "en",
"value": "The vulnerability is remediated by replacing direct string interpolation of stored database values into SQL queries with parameterized (bound) queries, ensuring that user-supplied or stored data is treated strictly as data rather than executable SQL. Additionally, the NULL handling for identifier fields is corrected to use proper SQL NULL instead of the string literal \u0027null\u0027, preventing both injection and unintended data corruption."
}
],
"title": "SQL Injection in Database Migration via Stored Connector Identifiers in flowintel",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The affected version range is inferred from the explicit context (affected_version \u00270\u0027, fixed_version \u0027\u003c=4.0.0\u0027); the exact starting version is not confirmed by the patch itself.",
"PR:L assumes the attacker can write to the database via an authenticated application role or direct DB access; the specific authentication mechanism is not stated in the patch.",
"The CVSS impact ratings (VC:H, VI:H, VA:H) assume the database user has broad privileges; if the DB account is highly restricted, impact could be lower.",
"CAPEC-126 is selected as the closest match; the stored/timed nature of the injection (data planted before migration runs) is a variant not explicitly covered by a more specific CAPEC.",
"The patch does not indicate whether the migration has already been executed in deployed instances, which would affect real-world exploitability."
],
"capecRationale": [
{
"capecId": "CAPEC-126",
"rationale": "The vulnerability is a textbook SQL injection: attacker-controlled data (stored connector identifiers) is concatenated into SQL statements without sanitization or parameterization. CAPEC-126 is the most direct and specific match. The stored nature of the injection (data planted earlier, executed later during migration) is a variant but still falls squarely within this pattern."
}
],
"commit": "061053689dc279a3c2c182f8dc15cd42dc24bd7d",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "David Cruciani"
}
],
"cvssRationale": "AV:L: The migration runs locally on the application server; exploitation requires local access to the database. AC:H: High complexity because the attacker must first write a crafted identifier into the database and then wait for a migration to execute. AT:P: Attack targeting is present; the attacker must specifically craft a malicious SQL payload in the identifier field. PR:L: Low privilege; the attacker needs write access to the database (e.g., an authenticated application user or DB access). UI:N: The migration runs automatically during upgrade; no user interaction is required at trigger time. VC:H, VI:H, VA:H: Successful SQL injection allows arbitrary read, write, and destructive operations on the database. SC:N, SI:N, SA:N: Impact is confined to the local database; no evidence of cross-component or cross-system impact.",
"fixSummary": "The vulnerability is remediated by replacing direct string interpolation of stored database values into SQL queries with parameterized (bound) queries, ensuring that user-supplied or stored data is treated strictly as data rather than executable SQL. Additionally, the NULL handling for identifier fields is corrected to use proper SQL NULL instead of the string literal \u0027null\u0027, preventing both injection and unintended data corruption.",
"generatedAt": "2026-11-09T14:12:17.714022Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "9ad956ded461ca4c442070a86c76b0239017eeb48e36892684465b9b6fb4ccde",
"patchSummary": "In migrations/versions/5cd03995339b_.py, four SQL statements (two SELECT and two UPDATE) are converted from Python f-string interpolation to SQLAlchemy parameterized queries using named bind parameters (:case_id, :instance_id, :ident, :id, :task_id). The NULL identifier handling is changed from assigning the string \u0027null\u0027 to assigning Python None, which SQLAlchemy translates to a proper SQL NULL value.",
"patchTruncated": false,
"patches": [
{
"commit": "061053689dc279a3c2c182f8dc15cd42dc24bd7d",
"date": "Fri, 6 Nov 2026 10:54:39 +0100",
"patchSha256": "9ad956ded461ca4c442070a86c76b0239017eeb48e36892684465b9b6fb4ccde",
"retrievedAt": "2026-11-09T14:10:44.764240Z",
"source": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch",
"sourceUrl": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch",
"subject": "fix: [security] Bind stored connector identifiers during"
}
],
"source": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-09T14:12:17Z",
"version": "2.0.3"
},
"subject": "fix: [security] Bind stored connector identifiers during",
"weaknessRationale": [
{
"cweId": "CWE-89",
"rationale": "The patch directly replaces f-string interpolation of stored values into SQL with parameterized queries, which is the canonical fix for CWE-89. The commit message explicitly states that stored identifiers were \u0027interpolated into SQL, allowing expressions to execute,\u0027 confirming SQL injection."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (061053689dc279a3c2c182f8dc15cd42dc24bd7d): fix: [security] Bind stored connector identifiers during",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch"
],
"timestamp": "2026-11-06T09:54:39Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch"
],
"timestamp": "2026-11-09T14:10:44.764240Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20156"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "00000000-0000-4000-8000-000000000000",
"cveId": "CVE-2026-124850",
"datePublished": "2026-11-09T14:32:37.866692Z",
"dateReserved": "2026-11-09T14:38:45.169Z",
"dateUpdated": "2026-11-09T21:47:47.877339Z",
"state": "PUBLISHED",
"vulnId": "gcve-1-2026-20156"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
GCVE-1-2026-20157 (CVE-2026-77812)
Vulnerability from gna-1 – Published: 2026-08-21 14:06 – Updated: 2026-11-06 11:18- CWE-311 - Missing Encryption of Sensitive Data
| URL | Tags |
|---|---|
| https://support.dji.com/help/content?customId=en-… | technical-description |
| https://github.com/Wh02m1/CVE-2026-77812 | technical-description |
| https://cyber-defence-campus.github.io/projects/v… | technical-description |
| Vendor | Product | Version | |
|---|---|---|---|
| DJI | Neo |
Affected:
0 , ≤ 01.00.0400
(semver)
|
|
| DJI | Neo 2 |
Affected:
0 , ≤ 01.00.0500
(semver)
|
|
| DJI | DJI Flip |
Affected:
0 , ≤ 01.00.1200
(semver)
|
|
| DJI | Air 3 |
Affected:
0 , ≤ 01.00.1600
(semver)
|
|
| DJI | Air 3S |
Affected:
0 , ≤ 01.00.1400
(semver)
|
|
| DJI | Avata 2 |
Affected:
0 , ≤ 01.00.0400
(semver)
|
|
| DJI | Avata 360 |
Affected:
0 , ≤ 01.00.0300
(semver)
|
|
| DJI | Mavic 3 |
Affected:
0 , ≤ 01.00.1400
(semver)
|
|
| DJI | Mavic 3 Classic |
Affected:
0 , ≤ 01.00.0800
(semver)
|
|
| DJI | Mavic 3 Pro |
Affected:
0 , ≤ 01.01.0700
(semver)
|
|
| DJI | Mavic 4 Pro |
Affected:
0 , ≤ 01.00.0500
(semver)
|
|
| DJI | Mini 2 |
Affected:
0 , ≤ 01.07.0200
(semver)
|
|
| DJI | Mini 3 |
Affected:
0 , ≤ 01.00.0500
(semver)
|
|
| DJI | Mini 3 Pro |
Affected:
0 , ≤ 01.00.0900
(semver)
|
|
| DJI | Mini 4 Pro |
Affected:
0 , ≤ 01.00.1100
(semver)
|
|
| DJI | Mini 5 Pro |
Affected:
0 , ≤ 01.00.0600
(semver)
|
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Neo",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0400",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Neo 2",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0500",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "DJI Flip",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1200",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Air 3",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1600",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Air 3S",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1400",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Avata 2",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0400",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Avata 360",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0300",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mavic 3",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1400",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mavic 3 Classic",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0800",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mavic 3 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.01.0700",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mavic 4 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0500",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 2",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.07.0200",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 3",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0500",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 3 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0900",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 4 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1100",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 5 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0600",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Abdelrahman Yousef"
},
{
"lang": "en",
"type": "finder",
"value": "Dr. Jordan Samhi"
},
{
"lang": "en",
"type": "finder",
"value": "Lloren\u00e7 Rom\u00e1 Alvarez, Cyber-Defence Campus, Armasuisse"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "DJI drones transmit DUML (DJI Universal Markup Language) protocol messages over BLE (Bluetooth Low Energy) without encryption. When a client attempts to connect to the drone over Wi-Fi, or when the drone is switched to QuickTransfer mode, the DJI Fly application exchanges DUML messages with the drone over BLE, including the Wi-Fi credentials. An attacker within BLE range can passively sniff this traffic and recover the credentials in cleartext, including the drone\u0027s Wi-Fi PSK, SSID, and trusted identifier UUID. Obtaining these credentials allows the attacker to join the drone\u0027s internal Wi-Fi network, interact with network services exposed by the drone, and decrypt Wi-Fi traffic exchanged between the drone and the legitimate user.\u003cbr\u003e\u003cbr\u003e* An attacker within BLE range recovers the Wi-Fi SSID and PSK in cleartext, and can then join the drone\u0027s network \u003cbr\u003e* The same capture also exposes the session UUID identifier, which is the only thing the drone uses to tell a trusted client from an unknown one, so the attacker can replay it and skip the physical confirmation of new connected devices.\u003cbr\u003e* The credentials do not change between sessions unless the operator manually resets the Wi-Fi settings, so one capture stays valid indefinitely\u003cbr\u003e* The attack is fully passive, with nothing transmitted and no connection made, so neither the operator nor the drone has any indication the session was observed\u003cbr\u003e* A BLE sniffer and presence during one normal DJI Fly connection are needed\u003cbr\u003e\u003cbr\u003eAffected models are DJI Neo until 01.00.0400, DJI Neo 2 until 01.00.0500, DJI Flip until 01.00.1200, DJI Air 3 until 01.00.1600, DJI Air 3S until 01.00.1400, DJI Avata 2 until 01.00.0400, DJI Avata 360 until 01.00.0300, DJI Mavic 3 until 01.00.1400, DJI Mavic 3 Classic until 01.00.0800, DJI Mavic 3 Pro until 01.01.0700, DJI Mavic 4 Pro until 01.00.0500, DJI Mini 2 until 01.07.0200, DJI Mini 3 until 01.00.0500, DJI Mini 3 Pro until 01.00.0900, DJI Mini 4 Pro until 01.00.1100, and DJI Mini 5 Pro until 01.00.0600.\u003cbr\u003e\u003cbr\u003eRemediation requires a firmware update from the vendor. There is no user-side mitigation that fully addresses the vulnerability without upgrading."
}
],
"value": "DJI drones transmit DUML (DJI Universal Markup Language) protocol messages over BLE (Bluetooth Low Energy) without encryption. When a client attempts to connect to the drone over Wi-Fi, or when the drone is switched to QuickTransfer mode, the DJI Fly application exchanges DUML messages with the drone over BLE, including the Wi-Fi credentials. An attacker within BLE range can passively sniff this traffic and recover the credentials in cleartext, including the drone\u0027s Wi-Fi PSK, SSID, and trusted identifier UUID. Obtaining these credentials allows the attacker to join the drone\u0027s internal Wi-Fi network, interact with network services exposed by the drone, and decrypt Wi-Fi traffic exchanged between the drone and the legitimate user.\n\n* An attacker within BLE range recovers the Wi-Fi SSID and PSK in cleartext, and can then join the drone\u0027s network \n* The same capture also exposes the session UUID identifier, which is the only thing the drone uses to tell a trusted client from an unknown one, so the attacker can replay it and skip the physical confirmation of new connected devices.\n* The credentials do not change between sessions unless the operator manually resets the Wi-Fi settings, so one capture stays valid indefinitely\n* The attack is fully passive, with nothing transmitted and no connection made, so neither the operator nor the drone has any indication the session was observed\n* A BLE sniffer and presence during one normal DJI Fly connection are needed\n\nAffected models are DJI Neo until 01.00.0400, DJI Neo 2 until 01.00.0500, DJI Flip until 01.00.1200, DJI Air 3 until 01.00.1600, DJI Air 3S until 01.00.1400, DJI Avata 2 until 01.00.0400, DJI Avata 360 until 01.00.0300, DJI Mavic 3 until 01.00.1400, DJI Mavic 3 Classic until 01.00.0800, DJI Mavic 3 Pro until 01.01.0700, DJI Mavic 4 Pro until 01.00.0500, DJI Mini 2 until 01.07.0200, DJI Mini 3 until 01.00.0500, DJI Mini 3 Pro until 01.00.0900, DJI Mini 4 Pro until 01.00.1100, and DJI Mini 5 Pro until 01.00.0600.\n\nRemediation requires a firmware update from the vendor. There is no user-side mitigation that fully addresses the vulnerability without upgrading."
}
],
"impacts": [
{
"capecId": "CAPEC-115",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-115 Authentication Bypass"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "ADJACENT",
"baseScore": 9.4,
"baseSeverity": "CRITICAL",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "HIGH",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "HIGH",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-311",
"description": "CWE-311 Missing Encryption of Sensitive Data",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"orgId": "00000000-0000-4000-9000-000000000000"
},
"references": [
{
"tags": [
"technical-description"
],
"url": "https://support.dji.com/help/content?customId=en-us03400011149\u0026amp;spaceId=34\u0026amp;re=US\u0026amp;lang=en"
},
{
"tags": [
"technical-description"
],
"url": "https://github.com/Wh02m1/CVE-2026-77812"
},
{
"tags": [
"technical-description"
],
"url": "https://cyber-defence-campus.github.io/projects/vulnerabilities/CVE-2026-77812/"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Cleartext Exposure of DJI Drone Wi-Fi Credentials via BLE",
"x_gcve": [
{
"recordType": "advisory",
"vulnId": "gcve-1-2026-20157"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "00000000-0000-4000-9000-000000000000",
"cveId": "CVE-2026-77812",
"datePublished": "2026-08-21T14:06:00.000Z",
"dateReserved": "2026-08-21T14:06:00.000Z",
"dateUpdated": "2026-11-06T11:18:30.981592Z",
"requesterUserId": "00000000-0000-4000-9000-000000000000",
"serial": 1,
"state": "PUBLISHED",
"vulnId": "gcve-1-2026-20157"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}
GCVE-1-2026-20054 (CVE-2026-123660)
Vulnerability from gna-1 – Published: 2026-11-06 08:43 – Updated: 2026-11-06 09:04| URL | Tags |
|---|---|
| https://github.com/vulnerability-lookup/vulnerabi… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| vulnerability-lookup | vulnerability-lookup |
Affected:
5.5.1 , < 6.4.1
(semver)
|
- Report to fix
- same day (reported 2026-11-05 19:41 UTC → fix available 2026-11-06 08:24 UTC)
- Report to disclosure
- same day (reported 2026-11-05 19:41 UTC → public disclosure 2026-11-06 08:24 UTC)
- 2026-11-05 19:41 UTC Reported researcher Private report sent to info@circl.lu, based on a bounded local run against commit 2bb9b2f0; no request was sent to the public service.
- 2026-11-06 Validated vendor Reproduced on the save and delivery paths; review found related amplification via repeated placeholders and an unhandled recursion error.
- 2026-11-06 fix-deployed vendor 6.4.1 deployed on the CIRCL production instance.
- 2026-11-06 08:10 UTC Fix developed vendor https://github.com/vulnerability-lookup/vulnerability-lookup/commit/2076ffdae3d024649114eeb6fd185338d4bb1f40
- 2026-11-06 08:24 UTC Fix available vendor Vulnerability-Lookup 6.4.1 released. https://github.com/vulnerability-lookup/vulnerability-lookup/releases/tag/v6.4.1
- 2026-11-06 08:24 UTC Public disclosure vendor Fix and changelog entry describing the issue made public with the 6.4.1 release. https://github.com/vulnerability-lookup/vulnerability-lookup/blob/v6.4.1/CHANGELOG.md
- 2026-11-06 08:43 UTC Identifier assigned gna GCVE-1-2026-20054 assigned.
- 2026-11-06 08:43 UTC Advisory published gna https://vulnerability.circl.lu/vuln/gcve-1-2026-20054
EU-CRA
EU
Not applicable
No exploitation observed; the Article 14 notification obligations for actively exploited vulnerabilities do not apply.
Deadlines and status are stated by the publisher. Submitting on time is not evidence of compliance, and this page does not judge it.
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "vulnerability-lookup",
"vendor": "vulnerability-lookup",
"versions": [
{
"lessThan": "6.4.1",
"status": "affected",
"version": "5.5.1",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Matteo Panzeri (Universit\u00e0 di Pavia), GitHub @matte1782"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5"
},
{
"lang": "en",
"type": "coordinator",
"value": "C\u00e9dric Bonhomme"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "In Vulnerability-Lookup 5.5.1 up to but not including 6.4.1, a signed-in user could make the server allocate memory far out of proportion to their input through a webhook notification\u0027s payload template. Each placeholder\u0027s format specifier was passed unchanged to Python\u0027s string formatting, which builds the padded result before its size can be checked. A template of a few dozen bytes, such as {\"text\": \"{title:\u0026gt;999999999}\"}, therefore produced a string of about 1 GB when the notification form test-rendered it on save, and repeating such fields multiplied the cost. Templates that passed the save check could also repeat placeholders such as {text} thousands of times; the notification daemon rebuilt those on every webhook delivery. Deeply nested templates raised an unhandled recursion error (HTTP 500). An attacker needs only an account, which the default configuration lets anyone create after e-mail confirmation. They could exhaust the memory of web workers or the notification daemon, causing a denial of service. Version 6.4.1 caps every number in a format specifier at 256, limits a rendered template to 1,000,000 characters both on save and at delivery, and rejects templates nested deeper than 32 levels."
}
],
"value": "In Vulnerability-Lookup 5.5.1 up to but not including 6.4.1, a signed-in user could make the server allocate memory far out of proportion to their input through a webhook notification\u0027s payload template. Each placeholder\u0027s format specifier was passed unchanged to Python\u0027s string formatting, which builds the padded result before its size can be checked. A template of a few dozen bytes, such as {\"text\": \"{title:\u003e999999999}\"}, therefore produced a string of about 1 GB when the notification form test-rendered it on save, and repeating such fields multiplied the cost. Templates that passed the save check could also repeat placeholders such as {text} thousands of times; the notification daemon rebuilt those on every webhook delivery. Deeply nested templates raised an unhandled recursion error (HTTP 500). An attacker needs only an account, which the default configuration lets anyone create after e-mail confirmation. They could exhaust the memory of web workers or the notification daemon, causing a denial of service. Version 6.4.1 caps every number in a format specifier at 256, limits a rendered template to 1,000,000 characters both on save and at delivery, and rejects templates nested deeper than 32 levels."
}
],
"impacts": [
{
"capecId": "CAPEC-130",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-130 Excessive Allocation"
}
]
}
],
"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: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-1284",
"description": "CWE-1284 Improper Validation of Specified Quantity in Input",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-674",
"description": "CWE-674 Uncontrolled Recursion",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"orgId": "00000000-0000-4000-9000-000000000000"
},
"references": [
{
"tags": [
"patch"
],
"url": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/2076ffdae3d024649114eeb6fd185338d4bb1f40"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Vulnerability-Lookup: memory amplification through webhook payload template format specifiers",
"x_gcve": [
{
"extensions": {
"bcp-05-x-03": {
"x_timeline": {
"entities": [
{
"category": "discoverer",
"id": "entity-reporter",
"name": "Matteo Panzeri",
"references": [
"https://github.com/matte1782"
]
},
{
"category": "vendor",
"description": "Maintainer of Vulnerability-Lookup and operator of the vulnerability.circl.lu instance.",
"id": "entity-circl",
"name": "CIRCL",
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup"
]
}
],
"events": [
{
"actor": "researcher",
"actorRefs": [
"entity-reporter"
],
"description": "Private report sent to info@circl.lu, based on a bounded local run against commit 2bb9b2f0; no request was sent to the public service.",
"id": "evt-reported",
"recipientRefs": [
"entity-circl"
],
"timestamp": "2026-11-05T19:41:52Z",
"type": "reported"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "Reproduced on the save and delivery paths; review found related amplification via repeated placeholders and an unhandled recursion error.",
"id": "evt-validated",
"referencedEvents": [
"evt-reported"
],
"timestamp": "2026-11-06",
"type": "validated"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"id": "evt-fix-developed",
"referencedEvents": [
"evt-validated"
],
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup/commit/2076ffdae3d024649114eeb6fd185338d4bb1f40"
],
"timestamp": "2026-11-06T08:10:26Z",
"type": "fix-developed"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "Vulnerability-Lookup 6.4.1 released.",
"id": "evt-fix-available",
"referencedEvents": [
"evt-fix-developed"
],
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup/releases/tag/v6.4.1"
],
"timestamp": "2026-11-06T08:24:38Z",
"type": "fix-available"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "Fix and changelog entry describing the issue made public with the 6.4.1 release.",
"id": "evt-public-disclosure",
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup/blob/v6.4.1/CHANGELOG.md"
],
"timestamp": "2026-11-06T08:24:38Z",
"type": "public-disclosure"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "6.4.1 deployed on the CIRCL production instance.",
"id": "evt-fix-deployed",
"referencedEvents": [
"evt-fix-available"
],
"timestamp": "2026-11-06",
"type": "fix-deployed"
},
{
"actor": "gna",
"actorRefs": [
"entity-circl"
],
"description": "GCVE-1-2026-20054 assigned.",
"id": "evt-identifier-assigned",
"timestamp": "2026-11-06T08:43:51Z",
"type": "identifier-assigned"
},
{
"actor": "gna",
"actorRefs": [
"entity-circl"
],
"id": "evt-advisory-published",
"referencedEvents": [
"evt-identifier-assigned"
],
"references": [
"https://vulnerability.circl.lu/vuln/gcve-1-2026-20054"
],
"timestamp": "2026-11-06T08:43:51Z",
"type": "advisory-published"
}
],
"regulatory": [
{
"assessment": "not-applicable",
"framework": "EU-CRA",
"jurisdiction": "EU",
"notes": "No exploitation observed; the Article 14 notification obligations for actively exploited vulnerabilities do not apply."
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20054"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "00000000-0000-4000-9000-000000000000",
"cveId": "CVE-2026-123660",
"datePublished": "2026-11-06T08:43:00.000Z",
"dateReserved": "2026-11-06T08:57:00.000Z",
"dateUpdated": "2026-11-06T09:04:18.592363Z",
"requesterUserId": "00000000-0000-4000-9000-000000000000",
"serial": 1,
"state": "PUBLISHED",
"vulnId": "GCVE-1-2026-20054"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}
GCVE-1-2026-20186 (CVE-2026-119682)
Vulnerability from gna-1 – Published: 2026-10-30 12:59 – Updated: 2026-10-30 14:20- CWE-862 - Missing Authorization
| URL | Tags |
|---|---|
| https://pitstop.manageengine.com/portal/en/commun… | release-notes |
| Vendor | Product | Version | |
|---|---|---|---|
| ManageEngine | SharePoint Manager Plus |
Affected:
450 , < 4507
(semver)
|
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "SharePoint Manager Plus",
"vendor": "ManageEngine",
"versions": [
{
"lessThan": "4507",
"status": "affected",
"version": "450",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Anas LAABAB with IMRIM (https://imrim.lu)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAn improper access control vulnerability exists in the multi-factor authentication (MFA) functionality of ManageEngine SharePoint Manager Plus (SPMP). A low-privileged authenticated user can bypass authorization checks to read and modify MFA configuration settings, enable or disable MFA for the application, enumerate MFA-enrolled users, and delete MFA-enrolled accounts. Successful exploitation could allow an attacker to weaken authentication protections or cause a denial of service by configuring invalid MFA settings, potentially locking legitimate users out of the application. This vulnerability was fixed in build 4507.\u0026nbsp;The reproduction explicitly uses build 4506.\u003c/p\u003e"
}
],
"value": "An improper access control vulnerability exists in the multi-factor authentication (MFA) functionality of ManageEngine SharePoint Manager Plus (SPMP). A low-privileged authenticated user can bypass authorization checks to read and modify MFA configuration settings, enable or disable MFA for the application, enumerate MFA-enrolled users, and delete MFA-enrolled accounts. Successful exploitation could allow an attacker to weaken authentication protections or cause a denial of service by configuring invalid MFA settings, potentially locking legitimate users out of the application. This vulnerability was fixed in build 4507.\u00a0The reproduction explicitly uses build 4506."
}
],
"impacts": [
{
"capecId": "CAPEC-1",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-1 Accessing Functionality Not Properly Constrained by ACLs"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7.9,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "HIGH",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "HIGH",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:H/SI:H/SA:H",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"orgId": "00000000-0000-4000-9000-000000000000"
},
"references": [
{
"tags": [
"release-notes"
],
"url": "https://pitstop.manageengine.com/portal/en/community/topic/sharepoint-manager-plus-build-4507-released"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Improper Access Control in Multi-Factor Authentication (MFA) Functionality in ManageEngine SharePoint Manager Plus",
"x_gcve": [
{
"recordType": "advisory",
"vulnId": "gcve-1-2026-20186"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "00000000-0000-4000-9000-000000000000",
"cveId": "CVE-2026-119682",
"datePublished": "2026-10-30T12:59:00.000Z",
"dateReserved": "2026-10-30T14:18:00.000Z",
"dateUpdated": "2026-10-30T14:20:49.039715Z",
"requesterUserId": "00000000-0000-4000-9000-000000000000",
"serial": 1,
"state": "PUBLISHED",
"vulnId": "GCVE-1-2026-20186"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}
GCVE-1-2026-20247 (CVE-2026-119680)
Vulnerability from gna-1 – Published: 2026-10-30 12:49 – Updated: 2026-10-30 14:14- CWE-79 - Improper Neutralization of Input During Web Page Generation (XSS or 'Cross-site Scripting')
| URL | Tags |
|---|---|
| https://pitstop.manageengine.com/portal/en/commun… | release-notes |
| Vendor | Product | Version | |
|---|---|---|---|
| ManageEngine | SharePoint Manager Plus |
Unaffected:
450 , < 4508
(semver)
|
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "SharePoint Manager Plus",
"vendor": "ManageEngine",
"versions": [
{
"lessThan": "4508",
"status": "unaffected",
"version": "450",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Anas LAABAB with IMRIM (https://imrim.lu)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eA stored cross-site scripting (XSS) vulnerability exists in the chart feature of SharePoint Manager Plus (SPMP) due to improper sanitization and HTML encoding of user-controlled data. An attacker can inject malicious HTML or JavaScript into attributes used to generate charts, including users\u0027 full names, site names, or group names. The injected content is stored and subsequently executed in the context of other users\u0027 browsers when the affected charts are rendered. This vulnerability was fixed in client application build 4508.\u003c/p\u003e"
}
],
"value": "A stored cross-site scripting (XSS) vulnerability exists in the chart feature of SharePoint Manager Plus (SPMP) due to improper sanitization and HTML encoding of user-controlled data. An attacker can inject malicious HTML or JavaScript into attributes used to generate charts, including users\u0027 full names, site names, or group names. The injected content is stored and subsequently executed in the context of other users\u0027 browsers when the affected charts are rendered. This vulnerability was fixed in client application build 4508."
}
],
"impacts": [
{
"capecId": "CAPEC-592",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-592 Stored XSS"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 8.5,
"baseSeverity": "HIGH",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "HIGH",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "HIGH",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:L/VA:N/SC:H/SI:H/SA:H",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"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 (XSS or \u0027Cross-site Scripting\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"orgId": "00000000-0000-4000-9000-000000000000"
},
"references": [
{
"tags": [
"release-notes"
],
"url": "https://pitstop.manageengine.com/portal/en/community/topic/sharepoint-manager-plus-build-4508-is-here"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Stored Cross-Site Scripting (XSS) in SharePoint Manager Plus Chart Feature",
"x_gcve": [
{
"recordType": "advisory",
"vulnId": "gcve-1-2026-20247"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "00000000-0000-4000-9000-000000000000",
"cveId": "CVE-2026-119680",
"datePublished": "2026-10-30T12:49:16.658136Z",
"dateReserved": "2026-10-30T14:14:17.240Z",
"dateUpdated": "2026-10-30T14:14:18.188070Z",
"requesterUserId": "00000000-0000-4000-9000-000000000000",
"serial": 1,
"state": "PUBLISHED",
"vulnId": "GCVE-1-2026-20247"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}
GCVE-1-2026-20310 (CVE-2026-112192)
Vulnerability from gna-1 – Published: 2026-10-19 09:28 – Updated: 2026-10-30 10:05| URL | Tags |
|---|---|
| https://github.com/MISP/MISP/commit/6c02f0f5c | patch |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-10-19 09:23 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/MISP/commit/6c02f0f5c.patch
e7e99bab776b… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
6c02f0f5c33a
|
fix: [settings] Module settings keep the flags the module | e7e99bab776b… |
Fix summary
The fix ensures that the redacted and cli_only flags declared by a module in its own setting definition are preserved when the server rebuilds the setting for API exposure. By carrying these flags through to the final setting object, the existing enforcement logic (which checks these flags before serving values or accepting edits) now correctly applies to module-supplied settings, preventing disclosure of redacted values and blocking API-based modification of CLI-only settings.
Patch summary
In app/Model/Server.php, within the readModuleSettings() method, a loop was added after the setting fields are populated that iterates over the strings 'redacted' and 'cli_only'. For each flag, if the module's own result array contains a truthy value for that key, the flag is set to true on the rebuilt $setting object before it is stored in $serverSettings. This is a 6-line addition that preserves the module-declared guard flags that were previously discarded during the setting reconstruction.
CVSS rationale
AV:N: MISP is a web application accessible over the network. AC:L: No special race conditions or complex setup are needed; a standard API call to the settings endpoint triggers the issue. AT:N: No manipulation of the attack target is required. PR:L: The attacker needs an authenticated MISP account with permission to view server settings. UI:N: No user interaction is required. VC:L: Sensitive module API keys are exposed, but the scope is limited to settings of modules that declare the redacted flag. VI:N: No direct integrity impact on the vulnerable component's data beyond the VA impact. VA:L: CLI-only settings can be modified via the API, representing a limited integrity impact on the vulnerable component's configuration. SC/SI/SA:N: No evidence of impact on other components or systems.
Weakness rationale
- CWE-200 The redacted flag, which instructs the server to mask a setting's value (e.g., an API key), was dropped during setting reconstruction. This caused the sensitive value to be served in plaintext via API endpoints to any authenticated user, constituting an information exposure.
- CWE-862 The cli_only flag, which restricts a setting to command-line modification only, was dropped during setting reconstruction. This allowed the setting to be modified via the web API without the intended authorization restriction, effectively bypassing the access control the module author specified.
Attack pattern rationale
- CAPEC-126 The primary impact is that sensitive data (module API keys marked as redacted) is discoverable via standard API endpoints because the redaction flag was not enforced. An authenticated user querying server settings can obtain credentials that the module author intended to keep hidden. This is the closest CAPEC to the information-disclosure aspect of the vulnerability. The secondary aspect (CLI-only settings editable via API) is an authorization bypass that does not map cleanly to a single CAPEC; CAPEC-126 is selected as the best available match for the overall pattern of accessing data that should be restricted.
Assumptions to verify
- The affected version boundary is inferred from the tag_version_boundary metadata (fix is 10 commits after v2.5.48); the exact fixed release version is not stated in the patch metadata.
- PR:L assumes that reading server settings requires an authenticated MISP user with appropriate role permissions; the patch does not specify the exact permission level required.
- The CAPEC-126 mapping is the closest available pattern for the information-disclosure aspect; the authorization-bypass aspect (cli_only) does not have a precise CAPEC match and is subsumed under the same mapping.
- VC:L assumes the exposed data is limited to module-specific API keys rather than system-wide credentials; the actual sensitivity depends on which modules are installed.
- The commit message references a separate issue (branch read) reported by Jeroen Pinoy; this vulnerability was discovered as a side effect of fixing that issue, so Jeroen Pinoy is not credited as a finder of this specific vulnerability.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
7 | 11 | medium | 5 |
- 2026-09-28 10:14 UTC Fix developed Corrective change authored (6c02f0f5c33aab96e90df8791c3873303d7e99ce): fix: [settings] Module settings keep the flags the module https://github.com/MISP/MISP/commit/6c02f0f5c.patch
- 2026-09-29 08:11 UTC Fix available Fix released in MISP v2.5.48. https://github.com/MISP/MISP/releases/tag/v2.5.48
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"app/Model/Server.php (readModuleSettings)"
],
"product": "MISP",
"programFiles": [
"app/Model/Server.php"
],
"repo": "https://github.com/MISP/MISP",
"vendor": "MISP",
"versions": [
{
"lessThan": "2.5.48",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eMISP contains a vulnerability in the handling of module plugin settings. When the server rebuilds module-supplied settings for API consumption, it drops the redacted and cli_only flags that a module declares in its own configuration metadata.\u003c/p\u003e\u003cp\u003eAs a result:\u003c/p\u003e\u003cp\u003e- A module that marks a setting (such as an API key) as redacted still has its value returned in full by the servers/getSetting and servers/serverSettingsEdit endpoints, exposing sensitive credentials to any authenticated user who can read server settings.\u003c/p\u003e\u003cp\u003e- A module that marks a setting as cli_only (intended to be editable only via the command-line interface) can still be modified through the web API, bypassing the intended access restriction.\u003c/p\u003e\u003cp\u003eAn authenticated user with access to server settings can therefore read sensitive module credentials and modify settings that the module author intended to restrict to CLI-only access.\u003c/p\u003e\u003cp\u003eAffected: \u0026lt;2.5.48\u003c/p\u003e"
}
],
"value": "MISP contains a vulnerability in the handling of module plugin settings. When the server rebuilds module-supplied settings for API consumption, it drops the redacted and cli_only flags that a module declares in its own configuration metadata.\n\nAs a result:\n\n- A module that marks a setting (such as an API key) as redacted still has its value returned in full by the servers/getSetting and servers/serverSettingsEdit endpoints, exposing sensitive credentials to any authenticated user who can read server settings.\n\n- A module that marks a setting as cli_only (intended to be editable only via the command-line interface) can still be modified through the web API, bypassing the intended access restriction.\n\nAn authenticated user with access to server settings can therefore read sensitive module credentials and modify settings that the module author intended to restrict to CLI-only access.\n\nAffected: \u003c2.5.48"
}
],
"impacts": [
{
"capecId": "CAPEC-126",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-126 Sensitive Data Discovery"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 5.3,
"baseSeverity": "MEDIUM",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:L/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "LOW",
"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-19T09:23:47Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-200",
"description": "CWE-200 Exposure of Sensitive Information to an Unauthorized Actor",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"orgId": "00000000-0000-4000-9000-000000000000"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/MISP/commit/6c02f0f5c"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe fix ensures that the redacted and cli_only flags declared by a module in its own setting definition are preserved when the server rebuilds the setting for API exposure. By carrying these flags through to the final setting object, the existing enforcement logic (which checks these flags before serving values or accepting edits) now correctly applies to module-supplied settings, preventing disclosure of redacted values and blocking API-based modification of CLI-only settings.\u003c/p\u003e"
}
],
"value": "The fix ensures that the redacted and cli_only flags declared by a module in its own setting definition are preserved when the server rebuilds the setting for API exposure. By carrying these flags through to the final setting object, the existing enforcement logic (which checks these flags before serving values or accepting edits) now correctly applies to module-supplied settings, preventing disclosure of redacted values and blocking API-based modification of CLI-only settings."
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "MISP Module Settings Expose Redacted Values and Allow API Modification of CLI-Only Settings",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The affected version boundary is inferred from the tag_version_boundary metadata (fix is 10 commits after v2.5.48); the exact fixed release version is not stated in the patch metadata.",
"PR:L assumes that reading server settings requires an authenticated MISP user with appropriate role permissions; the patch does not specify the exact permission level required.",
"The CAPEC-126 mapping is the closest available pattern for the information-disclosure aspect; the authorization-bypass aspect (cli_only) does not have a precise CAPEC match and is subsumed under the same mapping.",
"VC:L assumes the exposed data is limited to module-specific API keys rather than system-wide credentials; the actual sensitivity depends on which modules are installed.",
"The commit message references a separate issue (branch read) reported by Jeroen Pinoy; this vulnerability was discovered as a side effect of fixing that issue, so Jeroen Pinoy is not credited as a finder of this specific vulnerability."
],
"capecRationale": [
{
"capecId": "CAPEC-126",
"rationale": "The primary impact is that sensitive data (module API keys marked as redacted) is discoverable via standard API endpoints because the redaction flag was not enforced. An authenticated user querying server settings can obtain credentials that the module author intended to keep hidden. This is the closest CAPEC to the information-disclosure aspect of the vulnerability. The secondary aspect (CLI-only settings editable via API) is an authorization bypass that does not map cleanly to a single CAPEC; CAPEC-126 is selected as the best available match for the overall pattern of accessing data that should be restricted."
}
],
"commit": "6c02f0f5c33aab96e90df8791c3873303d7e99ce",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "iglocska"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5"
}
],
"cvssRationale": "AV:N: MISP is a web application accessible over the network. AC:L: No special race conditions or complex setup are needed; a standard API call to the settings endpoint triggers the issue. AT:N: No manipulation of the attack target is required. PR:L: The attacker needs an authenticated MISP account with permission to view server settings. UI:N: No user interaction is required. VC:L: Sensitive module API keys are exposed, but the scope is limited to settings of modules that declare the redacted flag. VI:N: No direct integrity impact on the vulnerable component\u0027s data beyond the VA impact. VA:L: CLI-only settings can be modified via the API, representing a limited integrity impact on the vulnerable component\u0027s configuration. SC/SI/SA:N: No evidence of impact on other components or systems.",
"fixSummary": "The fix ensures that the redacted and cli_only flags declared by a module in its own setting definition are preserved when the server rebuilds the setting for API exposure. By carrying these flags through to the final setting object, the existing enforcement logic (which checks these flags before serving values or accepting edits) now correctly applies to module-supplied settings, preventing disclosure of redacted values and blocking API-based modification of CLI-only settings.",
"generatedAt": "2026-10-19T09:23:47.526920Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "e7e99bab776b221dd41bf562693fc308d8a2ee619806b1bfef26bb008212205a",
"patchSummary": "In app/Model/Server.php, within the readModuleSettings() method, a loop was added after the setting fields are populated that iterates over the strings \u0027redacted\u0027 and \u0027cli_only\u0027. For each flag, if the module\u0027s own result array contains a truthy value for that key, the flag is set to true on the rebuilt $setting object before it is stored in $serverSettings. This is a 6-line addition that preserves the module-declared guard flags that were previously discarded during the setting reconstruction.",
"patchTruncated": false,
"patches": [
{
"commit": "6c02f0f5c33aab96e90df8791c3873303d7e99ce",
"date": "Mon, 28 Sep 2026 12:14:28 +0200",
"patchSha256": "e7e99bab776b221dd41bf562693fc308d8a2ee619806b1bfef26bb008212205a",
"source": "https://github.com/MISP/MISP/commit/6c02f0f5c.patch",
"sourceUrl": "https://github.com/MISP/MISP/commit/6c02f0f5c.patch",
"subject": "fix: [settings] Module settings keep the flags the module"
}
],
"source": "https://github.com/MISP/MISP/commit/6c02f0f5c.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-19T09:23:47Z",
"version": "2.0.3"
},
"subject": "fix: [settings] Module settings keep the flags the module",
"tagVersionBoundary": {
"commits_after_fix": 10,
"repository": "https://github.com/MISP/MISP",
"tag": "v2.5.48",
"version": "2.5.48",
"version_type": "semver"
},
"weaknessRationale": [
{
"cweId": "CWE-200",
"rationale": "The redacted flag, which instructs the server to mask a setting\u0027s value (e.g., an API key), was dropped during setting reconstruction. This caused the sensitive value to be served in plaintext via API endpoints to any authenticated user, constituting an information exposure."
},
{
"cweId": "CWE-862",
"rationale": "The cli_only flag, which restricts a setting to command-line modification only, was dropped during setting reconstruction. This allowed the setting to be modified via the web API without the intended authorization restriction, effectively bypassing the access control the module author specified."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (6c02f0f5c33aab96e90df8791c3873303d7e99ce): fix: [settings] Module settings keep the flags the module",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/MISP/commit/6c02f0f5c.patch"
],
"timestamp": "2026-09-28T10:14:28Z",
"type": "fix-developed"
},
{
"description": "Fix released in MISP v2.5.48.",
"id": "evt-fix-available-1",
"referencedEvents": [
"evt-fix-developed-1"
],
"references": [
"https://github.com/MISP/MISP/releases/tag/v2.5.48"
],
"timestamp": "2026-09-29T08:11:29Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "GCVE-1-2026-20310"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "00000000-0000-4000-9000-000000000000",
"cveId": "CVE-2026-112192",
"datePublished": "2026-10-19T09:28:00.000Z",
"dateReserved": "2026-10-19T09:28:00.000Z",
"dateUpdated": "2026-10-30T10:05:21.534948Z",
"requesterUserId": "00000000-0000-4000-9000-000000000000",
"serial": 1,
"state": "PUBLISHED",
"vulnId": "GCVE-1-2026-20310"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}
CVE-2026-124850 (GCVE-0-2026-124850)
Vulnerability from cvelistv5 – Published: 2026-11-09 14:43 – Updated: 2026-11-12 16:24- CWE-89 - Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
| URL | Tags |
|---|---|
| https://github.com/flowintel/flowintel/commit/061… | patch |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-09 14:12 - Model
qwen3.8:27b- Input
-
https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch
9ad956ded461… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
061053689dc2
|
fix: [security] Bind stored connector identifiers during | 9ad956ded461… |
Fix summary
The vulnerability is remediated by replacing direct string interpolation of stored database values into SQL queries with parameterized (bound) queries, ensuring that user-supplied or stored data is treated strictly as data rather than executable SQL. Additionally, the NULL handling for identifier fields is corrected to use proper SQL NULL instead of the string literal 'null', preventing both injection and unintended data corruption.
Patch summary
In migrations/versions/5cd03995339b_.py, four SQL statements (two SELECT and two UPDATE) are converted from Python f-string interpolation to SQLAlchemy parameterized queries using named bind parameters (:case_id, :instance_id, :ident, :id, :task_id). The NULL identifier handling is changed from assigning the string 'null' to assigning Python None, which SQLAlchemy translates to a proper SQL NULL value.
CVSS rationale
AV:L: The migration runs locally on the application server; exploitation requires local access to the database. AC:H: High complexity because the attacker must first write a crafted identifier into the database and then wait for a migration to execute. AT:P: Attack targeting is present; the attacker must specifically craft a malicious SQL payload in the identifier field. PR:L: Low privilege; the attacker needs write access to the database (e.g., an authenticated application user or DB access). UI:N: The migration runs automatically during upgrade; no user interaction is required at trigger time. VC:H, VI:H, VA:H: Successful SQL injection allows arbitrary read, write, and destructive operations on the database. SC:N, SI:N, SA:N: Impact is confined to the local database; no evidence of cross-component or cross-system impact.
Weakness rationale
- CWE-89 The patch directly replaces f-string interpolation of stored values into SQL with parameterized queries, which is the canonical fix for CWE-89. The commit message explicitly states that stored identifiers were 'interpolated into SQL, allowing expressions to execute,' confirming SQL injection.
Attack pattern rationale
- CAPEC-126 The vulnerability is a textbook SQL injection: attacker-controlled data (stored connector identifiers) is concatenated into SQL statements without sanitization or parameterization. CAPEC-126 is the most direct and specific match. The stored nature of the injection (data planted earlier, executed later during migration) is a variant but still falls squarely within this pattern.
Assumptions to verify
- The affected version range is inferred from the explicit context (affected_version '0', fixed_version '<=4.0.0'); the exact starting version is not confirmed by the patch itself.
- PR:L assumes the attacker can write to the database via an authenticated application role or direct DB access; the specific authentication mechanism is not stated in the patch.
- The CVSS impact ratings (VC:H, VI:H, VA:H) assume the database user has broad privileges; if the DB account is highly restricted, impact could be lower.
- CAPEC-126 is selected as the closest match; the stored/timed nature of the injection (data planted before migration runs) is a variant not explicitly covered by a more specific CAPEC.
- The patch does not indicate whether the migration has already been executed in deployed instances, which would affect real-world exploitability.
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 | 11 | medium | 5 |
- 2026-11-06 09:54 UTC Fix developed Corrective change authored (061053689dc279a3c2c182f8dc15cd42dc24bd7d): fix: [security] Bind stored connector identifiers during https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch
- 2026-11-09 14:10 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-124850",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-12T16:24:26.530803Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-12T16:24:54.028Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:flowintel:flowintel:*:*:*:*:*:*:*:*"
],
"modules": [
"migrations"
],
"product": "flowintel",
"programFiles": [
"migrations/versions/5cd03995339b_.py"
],
"repo": "https://github.com/flowintel/flowintel",
"vendor": "flowintel",
"versions": [
{
"lessThanOrEqual": "4.0.0",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:flowintel:flowintel:*:*:*:*:*:*:*:*",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "David Cruciani"
}
],
"descriptions": [
{
"lang": "en",
"value": "A SQL injection vulnerability exists in a database migration script in flowintel.\n\nThe migration process reads stored connector identifier values from the database and interpolates them directly into SQL statements without parameterization. An attacker who has previously written a malicious identifier value into the affected tables can cause arbitrary SQL execution when the migration is subsequently run during an application upgrade.\n\n- Requires prior write access to the database to plant a malicious identifier value\n- Triggered automatically during a migration or upgrade operation\n- Can result in unauthorized data disclosure, modification, or deletion\n\nAffected versions: flowintel prior to 4.0.0"
}
],
"impacts": [
{
"capecId": "CAPEC-126",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-126 SQL Injection"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "HIGH",
"attackRequirements": "PRESENT",
"attackVector": "LOCAL",
"baseScore": 7.3,
"baseSeverity": "HIGH",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-09T14:12:17Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-89",
"description": "CWE-89 Improper Neutralization of Special Elements used in an SQL Command (\u0027SQL Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-09T14:43:27.959Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d"
}
],
"solutions": [
{
"lang": "en",
"value": "The vulnerability is remediated by replacing direct string interpolation of stored database values into SQL queries with parameterized (bound) queries, ensuring that user-supplied or stored data is treated strictly as data rather than executable SQL. Additionally, the NULL handling for identifier fields is corrected to use proper SQL NULL instead of the string literal \u0027null\u0027, preventing both injection and unintended data corruption."
}
],
"title": "SQL Injection in Database Migration via Stored Connector Identifiers in flowintel",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The affected version range is inferred from the explicit context (affected_version \u00270\u0027, fixed_version \u0027\u003c=4.0.0\u0027); the exact starting version is not confirmed by the patch itself.",
"PR:L assumes the attacker can write to the database via an authenticated application role or direct DB access; the specific authentication mechanism is not stated in the patch.",
"The CVSS impact ratings (VC:H, VI:H, VA:H) assume the database user has broad privileges; if the DB account is highly restricted, impact could be lower.",
"CAPEC-126 is selected as the closest match; the stored/timed nature of the injection (data planted before migration runs) is a variant not explicitly covered by a more specific CAPEC.",
"The patch does not indicate whether the migration has already been executed in deployed instances, which would affect real-world exploitability."
],
"capecRationale": [
{
"capecId": "CAPEC-126",
"rationale": "The vulnerability is a textbook SQL injection: attacker-controlled data (stored connector identifiers) is concatenated into SQL statements without sanitization or parameterization. CAPEC-126 is the most direct and specific match. The stored nature of the injection (data planted earlier, executed later during migration) is a variant but still falls squarely within this pattern."
}
],
"commit": "061053689dc279a3c2c182f8dc15cd42dc24bd7d",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "David Cruciani"
}
],
"cvssRationale": "AV:L: The migration runs locally on the application server; exploitation requires local access to the database. AC:H: High complexity because the attacker must first write a crafted identifier into the database and then wait for a migration to execute. AT:P: Attack targeting is present; the attacker must specifically craft a malicious SQL payload in the identifier field. PR:L: Low privilege; the attacker needs write access to the database (e.g., an authenticated application user or DB access). UI:N: The migration runs automatically during upgrade; no user interaction is required at trigger time. VC:H, VI:H, VA:H: Successful SQL injection allows arbitrary read, write, and destructive operations on the database. SC:N, SI:N, SA:N: Impact is confined to the local database; no evidence of cross-component or cross-system impact.",
"fixSummary": "The vulnerability is remediated by replacing direct string interpolation of stored database values into SQL queries with parameterized (bound) queries, ensuring that user-supplied or stored data is treated strictly as data rather than executable SQL. Additionally, the NULL handling for identifier fields is corrected to use proper SQL NULL instead of the string literal \u0027null\u0027, preventing both injection and unintended data corruption.",
"generatedAt": "2026-11-09T14:12:17.714022Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "9ad956ded461ca4c442070a86c76b0239017eeb48e36892684465b9b6fb4ccde",
"patchSummary": "In migrations/versions/5cd03995339b_.py, four SQL statements (two SELECT and two UPDATE) are converted from Python f-string interpolation to SQLAlchemy parameterized queries using named bind parameters (:case_id, :instance_id, :ident, :id, :task_id). The NULL identifier handling is changed from assigning the string \u0027null\u0027 to assigning Python None, which SQLAlchemy translates to a proper SQL NULL value.",
"patchTruncated": false,
"patches": [
{
"commit": "061053689dc279a3c2c182f8dc15cd42dc24bd7d",
"date": "Fri, 6 Nov 2026 10:54:39 +0100",
"patchSha256": "9ad956ded461ca4c442070a86c76b0239017eeb48e36892684465b9b6fb4ccde",
"retrievedAt": "2026-11-09T14:10:44.764240Z",
"source": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch",
"sourceUrl": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch",
"subject": "fix: [security] Bind stored connector identifiers during"
}
],
"source": "https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-09T14:12:17Z",
"version": "2.0.3"
},
"subject": "fix: [security] Bind stored connector identifiers during",
"weaknessRationale": [
{
"cweId": "CWE-89",
"rationale": "The patch directly replaces f-string interpolation of stored values into SQL with parameterized queries, which is the canonical fix for CWE-89. The commit message explicitly states that stored identifiers were \u0027interpolated into SQL, allowing expressions to execute,\u0027 confirming SQL injection."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (061053689dc279a3c2c182f8dc15cd42dc24bd7d): fix: [security] Bind stored connector identifiers during",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch"
],
"timestamp": "2026-11-06T09:54:39Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d.patch"
],
"timestamp": "2026-11-09T14:10:44.764240Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20156"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-124850",
"datePublished": "2026-11-09T14:43:27.959Z",
"dateReserved": "2026-11-09T14:38:45.169Z",
"dateUpdated": "2026-11-12T16:24:54.028Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-127046 (GCVE-0-2026-127046)
Vulnerability from cvelistv5 – Published: 2026-11-12 12:05 – Updated: 2026-11-12 13:49| URL | Tags |
|---|---|
| https://github.com/MISP/misp-modules/commit/61c27… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| misp | misp-modules |
Affected:
0 , ≤ 3.1.4
(semver)
cpe:2.3:a:misp:misp_modules:*:*:*:*:*:*:*:* |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-12 11:59 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch
200a89910bce… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
61c27893066c
|
fix: [website] keep external tool API keys out of responses | 200a89910bce… |
Fix summary
The fix removes the api_key field from the ExternalTools.to_json() serializer so that /external_tools/list no longer returns credentials. The edit form is changed to a write-only pattern: the API key input starts empty, a blank or missing value on save retains the previously stored key, and a non-empty value replaces it. After a successful save the client clears the key field and does not propagate the credential into the in-memory tool list. Input validation is tightened to reject non-string or over-length key values. Server-side tool submissions continue to use the stored key from the database.
Patch summary
models.py: removed the api_key entry from ExternalTools.to_json(). external_tools.py (change_config endpoint): replaced the nested if-chain that required tool_api_key to be present and non-empty with a flat validation loop for tool_id/tool_name/tool_url, added a type-and-length check (string, max 60 chars) for tool_api_key when present, and made the field optional (write-only semantics). external_tools_core.py (change_config_core): changed tool.api_key assignment to be conditional on a truthy request_json.get('tool_api_key'). external_tools_index.html: initialized the form key field to empty string instead of tool.api_key, added placeholder and helper text, fixed a bug where the error-clearing selector referenced the wrong field, moved browser-state updates to after a successful HTTP response (res.ok check), and cleared the key input after save. README.md: documented the write-only key behavior. Tests: added browser-level (Playwright) and unit-level regression tests verifying the list endpoint omits api_key,空
CVSS rationale
AV:N: the /external_tools/list endpoint is reachable over the network via HTTP. AC:L: exploitation requires only a single GET request with no special conditions. AT:N: no attack prerequisites such as race conditions or specific timing. PR:N: regression tests confirm the endpoint returns 200 and previously included api_key for both authenticated and unauthenticated clients, indicating no privilege is required. UI:N: no victim interaction is needed; the attacker simply reads the response. VC:H: the exposed data is API keys (credentials) for external services, representing high confidentiality loss. VI:N and VA:N: no integrity or availability impact on the MISP Modules website. SC:H: the stolen API keys can be used to authenticate to external analysis/enrichment services, representing high confidentiality impact on a subsequent component. SI:N and SA:N: no integrity or availability impact on subsequent components is indicated.
Weakness rationale
- CWE-200 The /external_tools/list endpoint returned stored API keys in its JSON response to any client (authenticated or not), exposing credentials to unauthorized parties. The browser form also pre-populated the key in the DOM.
- CWE-522 API keys used to authenticate to external services were stored and transmitted without adequate protection: they appeared in API responses and in client-side form state, violating the principle that credentials should be write-only from the client perspective.
Attack pattern rationale
- CAPEC-126 The closest available CAPEC pattern. The attack involves an attacker obtaining credential material (API keys) from a web application response and using it to authenticate to a subsequent service. CAPEC-126 covers the theft of session/credential tokens from a web application. The mapping is imperfect because the keys are long-lived API credentials rather than short-lived session tokens, and the attack does not involve a session per se, but the underlying mechanism (reading a credential from an HTTP response and replaying it) is the same class of attack. No CAPEC pattern specifically covers 'sensitive data in API response' without a session-hijacking framing, so this is the best available match.
Assumptions to verify
- The /external_tools/list endpoint is accessible without authentication based on regression tests that verify the response for both authenticated and unauthenticated clients; however, the README notes that management operations require ADMIN_PASSWORD, so the list endpoint's access control may vary by deployment configuration.
- CVSS SC:H assumes the exposed API keys grant meaningful access to external services; the actual scope of access depends on the specific external tools configured and is not specified in the patch.
- No specific product version or release boundary is identified in the patch; the affected version range is therefore marked as unspecified.
- CAPEC-126 is the closest available pattern but is not a perfect match; the vulnerability is more precisely an API response information disclosure than a session hijacking. No CAPEC pattern specifically covers 'sensitive credential in API JSON response' without a session framing.
- The commit references issue #816 but no reporter or finder is named in the patch metadata or commit message.
- The 60-character maximum length validation for API keys is a new constraint introduced by the patch; it is unclear whether keys longer than 60 characters were previously valid, which could affect deployments with longer keys.
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 | 11 | medium | 6 |
- 2026-11-12 08:37 UTC Fix developed Corrective change authored (61c27893066cee80d9711649765ebc2bccd0e4af): fix: [website] keep external tool API keys out of responses https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch
- 2026-11-12 11:58 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp_modules:*:*:*:*:*:*:*:*"
],
"modules": [
"website/app/external_tools",
"website/app/models"
],
"product": "misp-modules",
"programFiles": [
"website/app/models/models.py",
"website/app/external_tools/external_tools.py",
"website/app/external_tools/external_tools_core.py",
"website/app/templates/external_tools/external_tools_index.html"
],
"repo": "https://github.com/MISP/misp-modules",
"vendor": "misp",
"versions": [
{
"lessThanOrEqual": "3.1.4",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*",
"versionEndIncluding": "3.1.4",
"versionStartIncluding": "0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"descriptions": [
{
"lang": "en",
"value": "The MISP Modules website component contains an information disclosure vulnerability in the external tools management interface. The /external_tools/list endpoint returned stored API keys (the api_key field) in its JSON response via the ExternalTools model serializer. Additionally, the browser-based edit form pre-populated the API key input field with the stored credential value, exposing it in the DOM.\n\nThe /external_tools/list endpoint is accessible without authentication (the regression tests verify the response for both authenticated and unauthenticated clients), meaning any network-reachable client could retrieve the API keys for all configured external tools. These keys are used by the server to authenticate submissions to external analysis or enrichment services, so their disclosure allows an attacker to impersonate the MISP instance or directly access those external services.\n\nThe vulnerability also affected the edit workflow: the change_config endpoint previously required the API key to be present and non-empty on every save, forcing the key to round-trip through the client. The browser JavaScript stored the key in a reactive state object and updated the in-memory tool list with the credential value, further increasing the window of exposure in client-side memory and network traffic.\n\nAffected component: the website sub-application of MISP Modules, specifically the external_tools module (serializer in models.py, list endpoint, and the external_tools_index.html template). The impact is limited to confidentiality of the stored API keys; no integrity or availability impact on the MISP Modules website itself is indicated by the patch."
}
],
"impacts": [
{
"capecId": "CAPEC-126",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-126 Web Application Session Hijacking"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 9.2,
"baseSeverity": "CRITICAL",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T11:59:08Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-200",
"description": "CWE-200 Exposure of Sensitive Information to an Unauthorized Actor",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-522",
"description": "CWE-522 Insufficiently Protected Credentials",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-12T13:49:57.139Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af"
}
],
"solutions": [
{
"lang": "en",
"value": "The fix removes the api_key field from the ExternalTools.to_json() serializer so that /external_tools/list no longer returns credentials. The edit form is changed to a write-only pattern: the API key input starts empty, a blank or missing value on save retains the previously stored key, and a non-empty value replaces it. After a successful save the client clears the key field and does not propagate the credential into the in-memory tool list. Input validation is tightened to reject non-string or over-length key values. Server-side tool submissions continue to use the stored key from the database."
}
],
"title": "MISP Modules Website Exposes External Tool API Keys in /external_tools/list Response",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "none",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The /external_tools/list endpoint is accessible without authentication based on regression tests that verify the response for both authenticated and unauthenticated clients; however, the README notes that management operations require ADMIN_PASSWORD, so the list endpoint\u0027s access control may vary by deployment configuration.",
"CVSS SC:H assumes the exposed API keys grant meaningful access to external services; the actual scope of access depends on the specific external tools configured and is not specified in the patch.",
"No specific product version or release boundary is identified in the patch; the affected version range is therefore marked as unspecified.",
"CAPEC-126 is the closest available pattern but is not a perfect match; the vulnerability is more precisely an API response information disclosure than a session hijacking. No CAPEC pattern specifically covers \u0027sensitive credential in API JSON response\u0027 without a session framing.",
"The commit references issue #816 but no reporter or finder is named in the patch metadata or commit message.",
"The 60-character maximum length validation for API keys is a new constraint introduced by the patch; it is unclear whether keys longer than 60 characters were previously valid, which could affect deployments with longer keys."
],
"capecRationale": [
{
"capecId": "CAPEC-126",
"rationale": "The closest available CAPEC pattern. The attack involves an attacker obtaining credential material (API keys) from a web application response and using it to authenticate to a subsequent service. CAPEC-126 covers the theft of session/credential tokens from a web application. The mapping is imperfect because the keys are long-lived API credentials rather than short-lived session tokens, and the attack does not involve a session per se, but the underlying mechanism (reading a credential from an HTTP response and replaying it) is the same class of attack. No CAPEC pattern specifically covers \u0027sensitive data in API response\u0027 without a session-hijacking framing, so this is the best available match."
}
],
"commit": "61c27893066cee80d9711649765ebc2bccd0e4af",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"cvssRationale": "AV:N: the /external_tools/list endpoint is reachable over the network via HTTP. AC:L: exploitation requires only a single GET request with no special conditions. AT:N: no attack prerequisites such as race conditions or specific timing. PR:N: regression tests confirm the endpoint returns 200 and previously included api_key for both authenticated and unauthenticated clients, indicating no privilege is required. UI:N: no victim interaction is needed; the attacker simply reads the response. VC:H: the exposed data is API keys (credentials) for external services, representing high confidentiality loss. VI:N and VA:N: no integrity or availability impact on the MISP Modules website. SC:H: the stolen API keys can be used to authenticate to external analysis/enrichment services, representing high confidentiality impact on a subsequent component. SI:N and SA:N: no integrity or availability impact on subsequent components is indicated.",
"draft": false,
"fixSummary": "The fix removes the api_key field from the ExternalTools.to_json() serializer so that /external_tools/list no longer returns credentials. The edit form is changed to a write-only pattern: the API key input starts empty, a blank or missing value on save retains the previously stored key, and a non-empty value replaces it. After a successful save the client clears the key field and does not propagate the credential into the in-memory tool list. Input validation is tightened to reject non-string or over-length key values. Server-side tool submissions continue to use the stored key from the database.",
"generatedAt": "2026-11-12T11:59:08.631868Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"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": "200a89910bce4823c08ee129545edc9fe7177cb0de9c5555925aa075155ca61b",
"patchSummary": "models.py: removed the api_key entry from ExternalTools.to_json(). external_tools.py (change_config endpoint): replaced the nested if-chain that required tool_api_key to be present and non-empty with a flat validation loop for tool_id/tool_name/tool_url, added a type-and-length check (string, max 60 chars) for tool_api_key when present, and made the field optional (write-only semantics). external_tools_core.py (change_config_core): changed tool.api_key assignment to be conditional on a truthy request_json.get(\u0027tool_api_key\u0027). external_tools_index.html: initialized the form key field to empty string instead of tool.api_key, added placeholder and helper text, fixed a bug where the error-clearing selector referenced the wrong field, moved browser-state updates to after a successful HTTP response (res.ok check), and cleared the key input after save. README.md: documented the write-only key behavior. Tests: added browser-level (Playwright) and unit-level regression tests verifying the list endpoint omits api_key,\u7a7a",
"patchTruncated": false,
"patches": [
{
"commit": "61c27893066cee80d9711649765ebc2bccd0e4af",
"date": "Thu, 12 Nov 2026 09:37:45 +0100",
"patchSha256": "200a89910bce4823c08ee129545edc9fe7177cb0de9c5555925aa075155ca61b",
"retrievedAt": "2026-11-12T11:58:13.406720Z",
"source": "https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch",
"sourceUrl": "https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch",
"subject": "fix: [website] keep external tool API keys out of responses"
}
],
"source": "https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T11:59:08Z",
"version": "2.0.3"
},
"subject": "fix: [website] keep external tool API keys out of responses",
"weaknessRationale": [
{
"cweId": "CWE-200",
"rationale": "The /external_tools/list endpoint returned stored API keys in its JSON response to any client (authenticated or not), exposing credentials to unauthorized parties. The browser form also pre-populated the key in the DOM."
},
{
"cweId": "CWE-522",
"rationale": "API keys used to authenticate to external services were stored and transmitted without adequate protection: they appeared in API responses and in client-side form state, violating the principle that credentials should be write-only from the client perspective."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (61c27893066cee80d9711649765ebc2bccd0e4af): fix: [website] keep external tool API keys out of responses",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch"
],
"timestamp": "2026-11-12T08:37:45Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/MISP/misp-modules/commit/61c27893066cee80d9711649765ebc2bccd0e4af.patch"
],
"timestamp": "2026-11-12T11:58:13.406720Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20141"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-127046",
"datePublished": "2026-11-12T12:05:04.052Z",
"dateReserved": "2026-11-12T12:04:58.364Z",
"dateUpdated": "2026-11-12T13:49:57.139Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-127016 (GCVE-0-2026-127016)
Vulnerability from cvelistv5 – Published: 2026-11-12 09:45 – Updated: 2026-11-12 09:49- CWE-862 - Missing Authorization
| URL | Tags |
|---|---|
| https://github.com/MISP/misp-modules/commit/28c27… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| misp | misp-modules |
Affected:
0 , ≤ 3.1.4
(semver)
cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:* |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-12 08:59 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch
a7fa238950e4… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
28c27e30f6d3
|
fix: [website] authorize external tool management | a7fa238950e4… |
Fix summary
A before_request authorization handler is added to the external_tools blueprint that checks whether the admin user is active (ADMIN_PASSWORD configured) and whether the current user is authenticated before any management endpoint executes. When both conditions indicate an unauthenticated request to a protected endpoint, the handler redirects to the login page (for the add endpoint) or returns a 403 Permission Denied response (for delete, status, and configuration endpoints). This enforces the same optional-admin policy already applied to module configuration, while preserving the existing open-management behavior when no admin password is configured.
Patch summary
The patch adds a before_request decorator on external_tools_blueprint in website/app/external_tools/external_tools.py that imports current_user from flask_login and admin_user_active from app.utils. The handler checks if the request endpoint is one of the four management endpoints (add_external_tool, delete_tool, change_status, change_config) and if the admin user is active but the current user is not authenticated, it either redirects to the login page or returns a 403 JSON response. The patch also adds a new test file website/tests/external_tools_checks.py with regression tests verifying that anonymous mutations are denied even with valid CSRF tokens, that authorization precedes JSON validation, that authenticated admins can perform all operations, and that the open-management policy is preserved when no admin password is set. The README is updated to document the new authorization requirement.
CVSS rationale
AV:N: The vulnerability is exploitable over the network via HTTP requests to the website. AC:L: No special conditions are required; standard HTTP POST/GET requests to known endpoints suffice. AT:N: No attack target manipulation is needed. PR:N: No privileges are required; the attack works as an anonymous user. UI:N: No user interaction is required. VC:L: Tool configurations including API keys and URLs are accessible/modifiable by the attacker. VI:H: The attacker can add, delete, and modify external tools, fully compromising the integrity of the tool management function. VA:L: Deleting or disabling tools reduces availability of data ingestion. SC:N: No secondary system confidentiality impact identified. SI:H: External tools feed into the broader MISP data pipeline; modifying them can corrupt or redirect data ingestion for the entire MISP instance. SA:N: No secondary availability impact beyond the direct effect.
Weakness rationale
- CWE-862 The external tools management endpoints (add, delete, change_status, change_config) lacked an authorization check that would verify the requester is an authenticated administrator when the admin-login policy is active. The authentication mechanism (flask_login, ADMIN_PASSWORD) existed in the application but was not applied to these specific endpoints, allowing anonymous users to perform privileged management operations.
Attack pattern rationale
- CAPEC-1 The closest available CAPEC pattern is Software Feature Discovery, as the attacker must identify the external tools management endpoints (e.g., /add_external_tool, /external_tools/<id>/delete_tool, /external_tools/change_status, /external_tools/change_config) and then issue unauthenticated requests to them. The vulnerability is exploited by discovering that these management functions are accessible without the authorization that the application's own documentation and parallel module-configuration endpoints imply. No CAPEC specifically models 'missing authorization on a discovered endpoint,' so CAPEC-1 is the best available match for the discovery-and-exploitation sequence.
Assumptions to verify
- The CAPEC mapping to CAPEC-1 (Software Feature Discovery) is the closest available pattern; no CAPEC specifically models exploitation of a missing authorization check on a discovered endpoint. The mapping is uncertain but is the best fit given the attack sequence of discovering and then invoking unauthenticated management endpoints.
- CVSS SI:H assumes that external tools in MISP feed into a broader data ingestion pipeline whose integrity is affected by unauthorized modification of tool configurations. If external tools are isolated to a single instance with no downstream consumers, SI could be reduced.
- The vulnerability is conditional on ADMIN_PASSWORD being configured. Installations without ADMIN_PASSWORD intentionally allow open management access by design and are not considered vulnerable.
- No specific version boundaries are identified in the patch; the affected version range is unspecified.
- The patch references issue #816 in the MISP/misp-modules repository, but no additional context about the issue tracker entry is available to confirm reporter or finder credits.
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 | 11 | medium | 5 |
- 2026-11-12 08:37 UTC Fix developed Corrective change authored (28c27e30f6d3a10e38fe9c54bb52f57ccf70d027): fix: [website] authorize external tool management https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch
- 2026-11-12 08:58 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*"
],
"modules": [
"external_tools"
],
"product": "misp-modules",
"programFiles": [
"website/app/external_tools/external_tools.py"
],
"repo": "https://github.com/MISP/misp-modules",
"vendor": "misp",
"versions": [
{
"lessThanOrEqual": "3.1.4",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*",
"versionEndIncluding": "3.1.4",
"versionStartIncluding": "0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"descriptions": [
{
"lang": "en",
"value": "The MISP Modules website component exposes external tool management endpoints (add, delete, change status, and change configuration) that did not enforce the optional administrator authentication policy. When ADMIN_PASSWORD was configured in the application environment, the module configuration endpoints correctly required an authenticated administrator session, but the external tools management handlers processed requests from anonymous users without any authorization check. An unauthenticated attacker with network access to the website could add arbitrary external tools, delete existing tools, toggle their active status, and modify their configurations including API keys and ingestion URLs. This inconsistency allowed bypass of the intended access control for the external tools management functionality. The vulnerability is conditional on ADMIN_PASSWORD being set; installations without an admin password intentionally permit open management access by design. The affected component is the external_tools Flask blueprint within the MISP Modules website application."
}
],
"impacts": [
{
"capecId": "CAPEC-1",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-1 Software Feature Discovery"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 9.2,
"baseSeverity": "CRITICAL",
"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:L/VI:H/VA:L/SC:N/SI:H/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "LOW",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T08:59:10Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-12T09:49:48.735Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027"
}
],
"solutions": [
{
"lang": "en",
"value": "A before_request authorization handler is added to the external_tools blueprint that checks whether the admin user is active (ADMIN_PASSWORD configured) and whether the current user is authenticated before any management endpoint executes. When both conditions indicate an unauthenticated request to a protected endpoint, the handler redirects to the login page (for the add endpoint) or returns a 403 Permission Denied response (for delete, status, and configuration endpoints). This enforces the same optional-admin policy already applied to module configuration, while preserving the existing open-management behavior when no admin password is configured."
}
],
"title": "MISP Modules Website: Missing Authorization on External Tool Management Endpoints",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The CAPEC mapping to CAPEC-1 (Software Feature Discovery) is the closest available pattern; no CAPEC specifically models exploitation of a missing authorization check on a discovered endpoint. The mapping is uncertain but is the best fit given the attack sequence of discovering and then invoking unauthenticated management endpoints.",
"CVSS SI:H assumes that external tools in MISP feed into a broader data ingestion pipeline whose integrity is affected by unauthorized modification of tool configurations. If external tools are isolated to a single instance with no downstream consumers, SI could be reduced.",
"The vulnerability is conditional on ADMIN_PASSWORD being configured. Installations without ADMIN_PASSWORD intentionally allow open management access by design and are not considered vulnerable.",
"No specific version boundaries are identified in the patch; the affected version range is unspecified.",
"The patch references issue #816 in the MISP/misp-modules repository, but no additional context about the issue tracker entry is available to confirm reporter or finder credits."
],
"capecRationale": [
{
"capecId": "CAPEC-1",
"rationale": "The closest available CAPEC pattern is Software Feature Discovery, as the attacker must identify the external tools management endpoints (e.g., /add_external_tool, /external_tools/\u003cid\u003e/delete_tool, /external_tools/change_status, /external_tools/change_config) and then issue unauthenticated requests to them. The vulnerability is exploited by discovering that these management functions are accessible without the authorization that the application\u0027s own documentation and parallel module-configuration endpoints imply. No CAPEC specifically models \u0027missing authorization on a discovered endpoint,\u0027 so CAPEC-1 is the best available match for the discovery-and-exploitation sequence."
}
],
"commit": "28c27e30f6d3a10e38fe9c54bb52f57ccf70d027",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"cvssRationale": "AV:N: The vulnerability is exploitable over the network via HTTP requests to the website. AC:L: No special conditions are required; standard HTTP POST/GET requests to known endpoints suffice. AT:N: No attack target manipulation is needed. PR:N: No privileges are required; the attack works as an anonymous user. UI:N: No user interaction is required. VC:L: Tool configurations including API keys and URLs are accessible/modifiable by the attacker. VI:H: The attacker can add, delete, and modify external tools, fully compromising the integrity of the tool management function. VA:L: Deleting or disabling tools reduces availability of data ingestion. SC:N: No secondary system confidentiality impact identified. SI:H: External tools feed into the broader MISP data pipeline; modifying them can corrupt or redirect data ingestion for the entire MISP instance. SA:N: No secondary availability impact beyond the direct effect.",
"draft": false,
"fixSummary": "A before_request authorization handler is added to the external_tools blueprint that checks whether the admin user is active (ADMIN_PASSWORD configured) and whether the current user is authenticated before any management endpoint executes. When both conditions indicate an unauthenticated request to a protected endpoint, the handler redirects to the login page (for the add endpoint) or returns a 403 Permission Denied response (for delete, status, and configuration endpoints). This enforces the same optional-admin policy already applied to module configuration, while preserving the existing open-management behavior when no admin password is configured.",
"generatedAt": "2026-11-12T08:59:10.622852Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "a7fa238950e4db922c8ad604a6abe453385d29b8a6bcc58762a4fe72add73775",
"patchSummary": "The patch adds a before_request decorator on external_tools_blueprint in website/app/external_tools/external_tools.py that imports current_user from flask_login and admin_user_active from app.utils. The handler checks if the request endpoint is one of the four management endpoints (add_external_tool, delete_tool, change_status, change_config) and if the admin user is active but the current user is not authenticated, it either redirects to the login page or returns a 403 JSON response. The patch also adds a new test file website/tests/external_tools_checks.py with regression tests verifying that anonymous mutations are denied even with valid CSRF tokens, that authorization precedes JSON validation, that authenticated admins can perform all operations, and that the open-management policy is preserved when no admin password is set. The README is updated to document the new authorization requirement.",
"patchTruncated": false,
"patches": [
{
"commit": "28c27e30f6d3a10e38fe9c54bb52f57ccf70d027",
"date": "Thu, 12 Nov 2026 09:37:23 +0100",
"patchSha256": "a7fa238950e4db922c8ad604a6abe453385d29b8a6bcc58762a4fe72add73775",
"retrievedAt": "2026-11-12T08:58:21.777259Z",
"source": "https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch",
"sourceUrl": "https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch",
"subject": "fix: [website] authorize external tool management"
}
],
"source": "https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "total"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T08:59:10Z",
"version": "2.0.3"
},
"subject": "fix: [website] authorize external tool management",
"weaknessRationale": [
{
"cweId": "CWE-862",
"rationale": "The external tools management endpoints (add, delete, change_status, change_config) lacked an authorization check that would verify the requester is an authenticated administrator when the admin-login policy is active. The authentication mechanism (flask_login, ADMIN_PASSWORD) existed in the application but was not applied to these specific endpoints, allowing anonymous users to perform privileged management operations."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (28c27e30f6d3a10e38fe9c54bb52f57ccf70d027): fix: [website] authorize external tool management",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch"
],
"timestamp": "2026-11-12T08:37:23Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/MISP/misp-modules/commit/28c27e30f6d3a10e38fe9c54bb52f57ccf70d027.patch"
],
"timestamp": "2026-11-12T08:58:21.777259Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20323"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-127016",
"datePublished": "2026-11-12T09:45:17.779Z",
"dateReserved": "2026-11-12T09:45:10.065Z",
"dateUpdated": "2026-11-12T09:49:48.735Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-126991 (GCVE-0-2026-126991)
Vulnerability from cvelistv5 – Published: 2026-11-12 07:33 – Updated: 2026-11-12 07:33| Vendor | Product | Version | |
|---|---|---|---|
| misp | misp-modules |
Affected:
unspecified , ≤ 3.1.4
(semver)
cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:* |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-12 05:54 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch
5b0d882d17ba… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
7a2a7e3d9e0f
|
Improve Wikidata enrichment and return MISP standard | 5b0d882d17ba… |
Fix summary
The vulnerability is remediated by properly escaping user-supplied text as a SPARQL string literal using json.dumps with ensure_ascii=False, which neutralizes quotes, backslashes, newlines, and control characters. Additional hardening includes strict validation of the language tag, numeric configuration values, text length, and UUID format before query construction; validation of Wikidata response structure and entity URI format before importing results; replacement of raw exception formatting with generic error messages that do not expose upstream details; use of the modern Wikidata SPARQL endpoint with POST method; a proper MISP user-agent string; and a bounded request timeout.
Patch summary
The patch rewrites the wiki.py handler to: (1) escape user text via json.dumps(text, ensure_ascii=False) before embedding in the SPARQL query; (2) validate language tags with a regex, numeric settings (max_results 1-25, timeout 1-60), text length (1-2000 chars), and UUID format; (3) switch from string concatenation to a properly escaped SPARQL literal; (4) use the modern https://query.wikidata.org/sparql endpoint with POST method and a MISP user-agent; (5) validate Wikidata response bindings and entity URIs against a strict pattern before creating annotation objects; (6) replace the mutable shared misperrors dict and raw exception formatting with a ModuleError class and generic error strings; (7) add a 313-line test suite (tests/test_wiki.py) covering injection vectors, invalid inputs, malformed responses, and error sanitization; (8) update documentation and module metadata to reflect the new misp_standard output format and configuration options.
CVSS rationale
AV:N: The module is invoked over the network via the MISP API. AC:L: The injection requires only crafting a text value with SPARQL metacharacters; no race conditions or complex prerequisites. AT:N: No need to manipulate the attack target. PR:L: Requires authenticated access to a MISP instance with the wiki module enabled. UI:N: No user interaction beyond the API call. VC:N: The queried data is public Wikidata; no confidential MISP data is exposed. VI:L: An attacker can alter the enrichment results (integrity of advisory annotations) and the old error path could leak internal details. VA:N: No meaningful availability impact on the MISP system. SC/SI/SA:N: No impact on external systems beyond the public Wikidata service. Overall severity is low given the limited blast radius.
Weakness rationale
- CWE-94 The module dynamically constructs a SPARQL query by concatenating untrusted user input directly into the query string without neutralizing special elements. This is the same pattern as code/query injection: the intended query structure is modified by attacker-controlled input. SPARQL is a query language interpreted by the Wikidata endpoint, making this a code injection into a query interpreter.
- CWE-209 The old code formatted raw exception objects into the error response string ('wikidata API not accessible {}'.format(e)), which could expose internal details such as proxy credentials, full query text, or upstream response bodies. The fix replaces this with generic error messages.
Attack pattern rationale
- CAPEC-143 CAPEC-143 describes injection of query language fragments through unsanitized input into a dynamically constructed query. Although the CAPEC name references SQL specifically, the attack pattern is identical: an attacker supplies input containing query-language metacharacters (quotes, braces, keywords) that alter the structure of the query sent to an interpreter. SPARQL injection follows the same pattern. This is the closest available CAPEC; no SPARQL-specific CAPEC exists in the catalog. The uncertainty is that the CAPEC is SQL-specific in naming, but the underlying technique (query injection via string concatenation) is the same.
Assumptions to verify
- The CAPEC-143 mapping is the closest available pattern; no SPARQL-specific CAPEC exists in the catalog. The underlying technique (query injection via unsanitized string concatenation) is identical to SQL injection.
- CVSS PR:L assumes the attacker has authenticated access to a MISP instance with the wiki expansion module enabled. The actual privilege level required depends on MISP role configuration, which is not specified in the patch.
- The affected version range is unspecified; the patch does not include version tags or release boundaries. The vulnerability existed in module version 0.2 (as indicated by the old moduleinfo) and was fixed in version 1.0.
- The CVSS VI:L rating accounts for both the query manipulation and the old error-message information disclosure. If only the injection is considered (without the error leak), VI could be rated N.
- The patch is treated as a single vulnerability fix (SPARQL injection) with associated hardening changes (error sanitization, input validation, endpoint update). The caller asserts all changes relate to the same vulnerability.
- No evidence of active exploitation, PoC, or in-the-wild usage was found in the patch or 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 | 11 | medium | 6 |
- 2026-11-12 04:47 UTC Fix developed Corrective change authored (7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9): Improve Wikidata enrichment and return MISP standard https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch
- 2026-11-12 05:53 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*"
],
"modules": [
"misp_modules/modules/expansion/wiki.py"
],
"product": "misp-modules",
"programFiles": [
"misp_modules/modules/expansion/wiki.py"
],
"repo": "https://github.com/MISP/misp-modules",
"vendor": "misp",
"versions": [
{
"lessThanOrEqual": "3.1.4",
"status": "affected",
"version": "unspecified",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*",
"versionEndExcluding": "3.1.4",
"versionStartIncluding": "0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"descriptions": [
{
"lang": "en",
"value": "The Wikidata Lookup expansion module (wiki.py) in MISP misp-modules contained a SPARQL injection vulnerability. The handler function constructed a SPARQL query by directly concatenating the user-supplied text value into the query string without any escaping or parameterization: \u0027SELECT ?item WHERE { ?item rdfs:label\"\u0027 + request.get(\"text\") + \u0027\" @en }\u0027. An authenticated MISP user with access to the module could supply a crafted text attribute value containing SPARQL syntax (quotes, closing braces, UNION, SERVICE, LIMIT, etc.) to alter the structure of the query sent to the Wikidata SPARQL endpoint. This could allow an attacker to modify the query logic, extract unintended data, or cause the query to fail in ways that expose internal error details. Additionally, the old error handling path formatted raw exception objects into the response string (\u0027wikidata API not accessible {}\u0027.format(e)), potentially leaking internal information such as proxy credentials, query contents, or response bodies. The module also used a spoofed browser user-agent string and the deprecated Wikidata endpoint. The vulnerability required authenticated access to the MISP instance and the ability to invoke the wiki expansion module with a text attribute. The impact is limited to manipulation of the enrichment query and potential disclosure of internal error details; it does not directly compromise the MISP server or its stored data."
}
],
"impacts": [
{
"capecId": "CAPEC-143",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-143 SQL Injection"
}
]
}
],
"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"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T05:54:11Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-94",
"description": "CWE-94 Improper Control of Generation of Code (\u0027Code Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-209",
"description": "CWE-209 Generation of Error Message Containing Sensitive Information",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-12T07:33:51.485Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9"
},
{
"url": "https://misp.github.io/misp-modules/expansion/#wikidata-lookup"
},
{
"url": "https://github.com/MISP/misp-modules/pull/869"
},
{
"url": "https://github.com/MISP/misp-modules"
}
],
"solutions": [
{
"lang": "en",
"value": "The vulnerability is remediated by properly escaping user-supplied text as a SPARQL string literal using json.dumps with ensure_ascii=False, which neutralizes quotes, backslashes, newlines, and control characters. Additional hardening includes strict validation of the language tag, numeric configuration values, text length, and UUID format before query construction; validation of Wikidata response structure and entity URI format before importing results; replacement of raw exception formatting with generic error messages that do not expose upstream details; use of the modern Wikidata SPARQL endpoint with POST method; a proper MISP user-agent string; and a bounded request timeout."
}
],
"title": "SPARQL Injection in MISP Wikidata Lookup Module via Unescaped User Input",
"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 CAPEC-143 mapping is the closest available pattern; no SPARQL-specific CAPEC exists in the catalog. The underlying technique (query injection via unsanitized string concatenation) is identical to SQL injection.",
"CVSS PR:L assumes the attacker has authenticated access to a MISP instance with the wiki expansion module enabled. The actual privilege level required depends on MISP role configuration, which is not specified in the patch.",
"The affected version range is unspecified; the patch does not include version tags or release boundaries. The vulnerability existed in module version 0.2 (as indicated by the old moduleinfo) and was fixed in version 1.0.",
"The CVSS VI:L rating accounts for both the query manipulation and the old error-message information disclosure. If only the injection is considered (without the error leak), VI could be rated N.",
"The patch is treated as a single vulnerability fix (SPARQL injection) with associated hardening changes (error sanitization, input validation, endpoint update). The caller asserts all changes relate to the same vulnerability.",
"No evidence of active exploitation, PoC, or in-the-wild usage was found in the patch or metadata."
],
"capecRationale": [
{
"capecId": "CAPEC-143",
"rationale": "CAPEC-143 describes injection of query language fragments through unsanitized input into a dynamically constructed query. Although the CAPEC name references SQL specifically, the attack pattern is identical: an attacker supplies input containing query-language metacharacters (quotes, braces, keywords) that alter the structure of the query sent to an interpreter. SPARQL injection follows the same pattern. This is the closest available CAPEC; no SPARQL-specific CAPEC exists in the catalog. The uncertainty is that the CAPEC is SQL-specific in naming, but the underlying technique (query injection via string concatenation) is the same."
}
],
"commit": "7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9",
"confidence": "medium",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Alexandre Dulaunoy"
}
],
"cvssRationale": "AV:N: The module is invoked over the network via the MISP API. AC:L: The injection requires only crafting a text value with SPARQL metacharacters; no race conditions or complex prerequisites. AT:N: No need to manipulate the attack target. PR:L: Requires authenticated access to a MISP instance with the wiki module enabled. UI:N: No user interaction beyond the API call. VC:N: The queried data is public Wikidata; no confidential MISP data is exposed. VI:L: An attacker can alter the enrichment results (integrity of advisory annotations) and the old error path could leak internal details. VA:N: No meaningful availability impact on the MISP system. SC/SI/SA:N: No impact on external systems beyond the public Wikidata service. Overall severity is low given the limited blast radius.",
"draft": false,
"fixSummary": "The vulnerability is remediated by properly escaping user-supplied text as a SPARQL string literal using json.dumps with ensure_ascii=False, which neutralizes quotes, backslashes, newlines, and control characters. Additional hardening includes strict validation of the language tag, numeric configuration values, text length, and UUID format before query construction; validation of Wikidata response structure and entity URI format before importing results; replacement of raw exception formatting with generic error messages that do not expose upstream details; use of the modern Wikidata SPARQL endpoint with POST method; a proper MISP user-agent string; and a bounded request timeout.",
"generatedAt": "2026-11-12T05:54:11.233388Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"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": "5b0d882d17baea052254770c3c94d50c8e1ab2314fa4eec89088c15e059f2837",
"patchSummary": "The patch rewrites the wiki.py handler to: (1) escape user text via json.dumps(text, ensure_ascii=False) before embedding in the SPARQL query; (2) validate language tags with a regex, numeric settings (max_results 1-25, timeout 1-60), text length (1-2000 chars), and UUID format; (3) switch from string concatenation to a properly escaped SPARQL literal; (4) use the modern https://query.wikidata.org/sparql endpoint with POST method and a MISP user-agent; (5) validate Wikidata response bindings and entity URIs against a strict pattern before creating annotation objects; (6) replace the mutable shared misperrors dict and raw exception formatting with a ModuleError class and generic error strings; (7) add a 313-line test suite (tests/test_wiki.py) covering injection vectors, invalid inputs, malformed responses, and error sanitization; (8) update documentation and module metadata to reflect the new misp_standard output format and configuration options.",
"patchTruncated": false,
"patches": [
{
"commit": "7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9",
"date": "Thu, 12 Nov 2026 04:47:41 +0000",
"patchSha256": "5b0d882d17baea052254770c3c94d50c8e1ab2314fa4eec89088c15e059f2837",
"retrievedAt": "2026-11-12T05:53:20.752027Z",
"source": "https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch",
"sourceUrl": "https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch",
"subject": "Improve Wikidata enrichment and return MISP standard"
}
],
"source": "https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-12T05:54:11Z",
"version": "2.0.3"
},
"subject": "Improve Wikidata enrichment and return MISP standard",
"weaknessRationale": [
{
"cweId": "CWE-94",
"rationale": "The module dynamically constructs a SPARQL query by concatenating untrusted user input directly into the query string without neutralizing special elements. This is the same pattern as code/query injection: the intended query structure is modified by attacker-controlled input. SPARQL is a query language interpreted by the Wikidata endpoint, making this a code injection into a query interpreter."
},
{
"cweId": "CWE-209",
"rationale": "The old code formatted raw exception objects into the error response string (\u0027wikidata API not accessible {}\u0027.format(e)), which could expose internal details such as proxy credentials, full query text, or upstream response bodies. The fix replaces this with generic error messages."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9): Improve Wikidata enrichment and return MISP standard",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch"
],
"timestamp": "2026-11-12T04:47:41Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/MISP/misp-modules/commit/7a2a7e3d9e0f67f6732bd8050ab7da79e7b344d9.patch"
],
"timestamp": "2026-11-12T05:53:20.752027Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20333"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-126991",
"datePublished": "2026-11-12T07:33:51.485Z",
"dateReserved": "2026-11-12T07:30:41.366Z",
"dateUpdated": "2026-11-12T07:33:51.485Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123660 (GCVE-0-2026-123660)
Vulnerability from cvelistv5 – Published: 2026-11-06 08:58 – Updated: 2026-11-10 17:40| URL | Tags |
|---|---|
| https://github.com/vulnerability-lookup/vulnerabi… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| vulnerability-lookup | vulnerability-lookup |
Affected:
5.5.1 , < 6.4.1
(semver)
|
- Report to fix
- same day (reported 2026-11-05 19:41 UTC → fix available 2026-11-06 08:24 UTC)
- Report to disclosure
- same day (reported 2026-11-05 19:41 UTC → public disclosure 2026-11-06 08:24 UTC)
- 2026-11-05 19:41 UTC Reported researcher Private report sent to info@circl.lu, based on a bounded local run against commit 2bb9b2f0; no request was sent to the public service.
- 2026-11-06 Validated vendor Reproduced on the save and delivery paths; review found related amplification via repeated placeholders and an unhandled recursion error.
- 2026-11-06 fix-deployed vendor 6.4.1 deployed on the CIRCL production instance.
- 2026-11-06 08:10 UTC Fix developed vendor https://github.com/vulnerability-lookup/vulnerability-lookup/commit/2076ffdae3d024649114eeb6fd185338d4bb1f40
- 2026-11-06 08:24 UTC Fix available vendor Vulnerability-Lookup 6.4.1 released. https://github.com/vulnerability-lookup/vulnerability-lookup/releases/tag/v6.4.1
- 2026-11-06 08:24 UTC Public disclosure vendor Fix and changelog entry describing the issue made public with the 6.4.1 release. https://github.com/vulnerability-lookup/vulnerability-lookup/blob/v6.4.1/CHANGELOG.md
- 2026-11-06 08:43 UTC Identifier assigned gna GCVE-1-2026-20054 assigned.
- 2026-11-06 08:43 UTC Advisory published gna https://vulnerability.circl.lu/vuln/gcve-1-2026-20054
EU-CRA
EU
Not applicable
No exploitation observed; the Article 14 notification obligations for actively exploited vulnerabilities do not apply.
Deadlines and status are stated by the publisher. Submitting on time is not evidence of compliance, and this page does not judge it.
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-123660",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-10T17:39:52.273550Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-10T17:40:09.862Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "vulnerability-lookup",
"vendor": "vulnerability-lookup",
"versions": [
{
"lessThan": "6.4.1",
"status": "affected",
"version": "5.5.1",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Matteo Panzeri (Universit\u00e0 di Pavia), GitHub @matte1782"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5"
},
{
"lang": "en",
"type": "coordinator",
"value": "C\u00e9dric Bonhomme"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "In Vulnerability-Lookup 5.5.1 up to but not including 6.4.1, a signed-in user could make the server allocate memory far out of proportion to their input through a webhook notification\u0027s payload template. Each placeholder\u0027s format specifier was passed unchanged to Python\u0027s string formatting, which builds the padded result before its size can be checked. A template of a few dozen bytes, such as {\"text\": \"{title:\u0026gt;999999999}\"}, therefore produced a string of about 1 GB when the notification form test-rendered it on save, and repeating such fields multiplied the cost. Templates that passed the save check could also repeat placeholders such as {text} thousands of times; the notification daemon rebuilt those on every webhook delivery. Deeply nested templates raised an unhandled recursion error (HTTP 500). An attacker needs only an account, which the default configuration lets anyone create after e-mail confirmation. They could exhaust the memory of web workers or the notification daemon, causing a denial of service. Version 6.4.1 caps every number in a format specifier at 256, limits a rendered template to 1,000,000 characters both on save and at delivery, and rejects templates nested deeper than 32 levels."
}
],
"value": "In Vulnerability-Lookup 5.5.1 up to but not including 6.4.1, a signed-in user could make the server allocate memory far out of proportion to their input through a webhook notification\u0027s payload template. Each placeholder\u0027s format specifier was passed unchanged to Python\u0027s string formatting, which builds the padded result before its size can be checked. A template of a few dozen bytes, such as {\"text\": \"{title:\u003e999999999}\"}, therefore produced a string of about 1 GB when the notification form test-rendered it on save, and repeating such fields multiplied the cost. Templates that passed the save check could also repeat placeholders such as {text} thousands of times; the notification daemon rebuilt those on every webhook delivery. Deeply nested templates raised an unhandled recursion error (HTTP 500). An attacker needs only an account, which the default configuration lets anyone create after e-mail confirmation. They could exhaust the memory of web workers or the notification daemon, causing a denial of service. Version 6.4.1 caps every number in a format specifier at 256, limits a rendered template to 1,000,000 characters both on save and at delivery, and rejects templates nested deeper than 32 levels."
}
],
"impacts": [
{
"capecId": "CAPEC-130",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-130 Excessive Allocation"
}
]
}
],
"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: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-1284",
"description": "CWE-1284 Improper Validation of Specified Quantity in Input",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-674",
"description": "CWE-674 Uncontrolled Recursion",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-06T09:04:51.732Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"tags": [
"patch"
],
"url": "https://github.com/vulnerability-lookup/vulnerability-lookup/commit/2076ffdae3d024649114eeb6fd185338d4bb1f40"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Vulnerability-Lookup: memory amplification through webhook payload template format specifiers",
"x_gcve": [
{
"extensions": {
"bcp-05-x-03": {
"x_timeline": {
"entities": [
{
"category": "discoverer",
"id": "entity-reporter",
"name": "Matteo Panzeri",
"references": [
"https://github.com/matte1782"
]
},
{
"category": "vendor",
"description": "Maintainer of Vulnerability-Lookup and operator of the vulnerability.circl.lu instance.",
"id": "entity-circl",
"name": "CIRCL",
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup"
]
}
],
"events": [
{
"actor": "researcher",
"actorRefs": [
"entity-reporter"
],
"description": "Private report sent to info@circl.lu, based on a bounded local run against commit 2bb9b2f0; no request was sent to the public service.",
"id": "evt-reported",
"recipientRefs": [
"entity-circl"
],
"timestamp": "2026-11-05T19:41:52Z",
"type": "reported"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "Reproduced on the save and delivery paths; review found related amplification via repeated placeholders and an unhandled recursion error.",
"id": "evt-validated",
"referencedEvents": [
"evt-reported"
],
"timestamp": "2026-11-06",
"type": "validated"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"id": "evt-fix-developed",
"referencedEvents": [
"evt-validated"
],
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup/commit/2076ffdae3d024649114eeb6fd185338d4bb1f40"
],
"timestamp": "2026-11-06T08:10:26Z",
"type": "fix-developed"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "Vulnerability-Lookup 6.4.1 released.",
"id": "evt-fix-available",
"referencedEvents": [
"evt-fix-developed"
],
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup/releases/tag/v6.4.1"
],
"timestamp": "2026-11-06T08:24:38Z",
"type": "fix-available"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "Fix and changelog entry describing the issue made public with the 6.4.1 release.",
"id": "evt-public-disclosure",
"references": [
"https://github.com/vulnerability-lookup/vulnerability-lookup/blob/v6.4.1/CHANGELOG.md"
],
"timestamp": "2026-11-06T08:24:38Z",
"type": "public-disclosure"
},
{
"actor": "vendor",
"actorRefs": [
"entity-circl"
],
"description": "6.4.1 deployed on the CIRCL production instance.",
"id": "evt-fix-deployed",
"referencedEvents": [
"evt-fix-available"
],
"timestamp": "2026-11-06",
"type": "fix-deployed"
},
{
"actor": "gna",
"actorRefs": [
"entity-circl"
],
"description": "GCVE-1-2026-20054 assigned.",
"id": "evt-identifier-assigned",
"timestamp": "2026-11-06T08:43:51Z",
"type": "identifier-assigned"
},
{
"actor": "gna",
"actorRefs": [
"entity-circl"
],
"id": "evt-advisory-published",
"referencedEvents": [
"evt-identifier-assigned"
],
"references": [
"https://vulnerability.circl.lu/vuln/gcve-1-2026-20054"
],
"timestamp": "2026-11-06T08:43:51Z",
"type": "advisory-published"
}
],
"regulatory": [
{
"assessment": "not-applicable",
"framework": "EU-CRA",
"jurisdiction": "EU",
"notes": "No exploitation observed; the Article 14 notification obligations for actively exploited vulnerabilities do not apply."
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20054"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-123660",
"datePublished": "2026-11-06T08:58:24.857Z",
"dateReserved": "2026-11-06T08:57:03.368Z",
"dateUpdated": "2026-11-10T17:40:09.862Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-125871 (GCVE-0-2026-125871)
Vulnerability from cvelistv5 – Published: 2026-11-10 12:57 – Updated: 2026-11-10 15:45| URL | Tags |
|---|---|
| https://github.com/MISP/misp-modules/commit/7cb31… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| MISP | misp-modules |
Affected:
0 , < 3.0.13
(semver)
cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:* |
qwen3.8:27b
2 events
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-11-10 11:02 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch
736974194693… - Confidence
- high
| Commit | Subject | Patch SHA-256 |
|---|---|---|
7cb31e96a1f5
|
fix: [sourcecache] validate URLs before archiving to block | 736974194693… |
Fix summary
The fix introduces a URL validation gate (is_safe_url) that is invoked before any archiving request is made. The function restricts the scheme to http or https, resolves the hostname via DNS, and verifies that every resolved IP address is globally routable (i.e., not loopback, private, link-local, or otherwise non-global). If any check fails, the module returns an error and the fetch is never performed, preventing the server from being directed to internal or non-HTTP targets.
Patch summary
Adds imports for ipaddress and socket. Introduces a new is_safe_url(url) function that parses the URL, rejects non-http/https schemes, resolves the hostname with socket.getaddrinfo, and rejects the URL if any resolved address fails ipaddress.ip_address().is_global(). In the handler() function, a guard clause calls is_safe_url(tocache) before invoking __archiveLink and returns an error dict if the URL is not safe. Two new unit tests verify that http://127.0.0.1:6379/ and file:///etc/passwd are blocked and that the archive function is never called.
CVSS rationale
AV:N: The MISP API is network-accessible. AC:L: Crafting a URL attribute with an internal address is trivial. AT:N: No special adversary technique is required. PR:L: An authenticated MISP user with attribute-creation rights is needed. UI:N: No victim interaction beyond the attacker's own API call. VC/VI/VA:N: The MISP server's own confidentiality, integrity, and availability are not directly compromised. SC:H: The subsequent component (internal services, cloud metadata) suffers high confidentiality impact because its data is exfiltrated into the MISP event. SI:N: The module only performs GET-style fetches; no evidence of integrity impact on subsequent components. SA:N: No availability impact on subsequent components is indicated.
Weakness rationale
- CWE-918 The module accepts a user-supplied URL and issues a server-side HTTP request to it without validating the target, allowing an attacker to direct requests to internal or non-HTTP resources. This is a textbook SSRF.
- CWE-20 The root cause is the absence of any validation on the URL attribute value before it is used as a request target. The fix adds scheme, hostname, and IP-address validation, confirming the missing input validation was the defect.
Attack pattern rationale
- CAPEC-12 The patch explicitly describes and remediates an SSRF: an attacker-supplied URL causes the MISP server to fetch internal resources (loopback, cloud metadata) and return the data. CAPEC-12 is the direct and most specific attack pattern for this scenario. No uncertainty is noted; the commit message and code changes align precisely with this pattern.
Assumptions to verify
- The MISP server is assumed to be reachable over the network and that an authenticated user with attribute-creation permissions can submit link/url attributes; no specific MISP version or authentication model is stated in the patch.
- CVSS PR:L assumes a low-privilege authenticated MISP user can create attributes; if MISP requires higher-level permissions, PR could be H.
- CVSS SI:N assumes the archiving function only performs read (GET) requests; if it can issue state-changing methods, SI could be elevated.
- SSVC technical_impact 'partial' is the least-assumptive choice; if cloud metadata endpoint access leads to full credential theft and infrastructure takeover, impact could be 'total'.
- The CAPEC-12 mapping is high-confidence based on the explicit SSRF description in the commit message and the code changes; no uncertainty is expected.
- No specific affected or fixed version numbers are provided in the patch metadata; version boundaries are marked as unspecified.
- The is_global check in Python's ipaddress module covers loopback, private, link-local, and other non-global ranges, but DNS rebinding between the check and the actual fetch is not addressed by this patch and could remain a residual risk.
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 | 11 | high | 7 |
- 2026-10-16 22:27 UTC Fix developed Corrective change authored (7cb31e96a1f59bec9afbc087b27b26d9986c6841): fix: [sourcecache] validate URLs before archiving to block https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch
- 2026-11-10 11:01 UTC Fix available Patch retrieved from the supplied URL; retrieval time is used as the default availability time. https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch
{
"containers": {
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp-modules:*:*:*:*:*:*:*:*"
],
"modules": [
"sourcecache"
],
"product": "misp-modules",
"programFiles": [
"misp_modules/modules/expansion/sourcecache.py"
],
"repo": "https://github.com/MISP/misp-modules",
"vendor": "MISP",
"versions": [
{
"lessThan": "3.0.13",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:misp:misp_modules:*:*:*:*:*:*:*:*",
"versionEndExcluding": "3.0.13",
"versionStartIncluding": "0",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"descriptions": [
{
"lang": "en",
"value": "The sourcecache expansion module in MISP Modules (misp-modules) contains a Server-Side Request Forgery (SSRF) vulnerability. When a user with permission to create or modify attributes of type \u0027link\u0027 or \u0027url\u0027 submits an attribute value, the module passes the URL directly to its internal archiving function without any validation of the target address. An attacker can therefore craft a URL pointing to loopback addresses (e.g., 127.0.0.1), private network ranges, link-local addresses, or cloud metadata endpoints (e.g., 169.254.169.254). The MISP server will issue an HTTP request to that target and store the response body in the event, effectively exfiltrating data from internal services to the attacker through the MISP interface. Non-HTTP schemes such as file:// are also accepted, potentially allowing local file disclosure. The vulnerability requires an authenticated MISP user with the ability to create or edit attributes of the affected types. The security impact is information disclosure from internal services reachable by the MISP server, including sensitive data such as cloud credentials, internal application data, or local files."
}
],
"impacts": [
{
"capecId": "CAPEC-12",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-12 Exploiting SSRF"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 6.3,
"baseSeverity": "MEDIUM",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
},
{
"format": "SSVC",
"other": {
"content": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-10T11:02:25Z",
"version": "2.0.3"
},
"type": "SSVC"
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-918",
"description": "CWE-918 Server-Side Request Forgery (SSRF)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-20",
"description": "CWE-20 Improper Input Validation",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-10T15:45:50.479Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841"
}
],
"solutions": [
{
"lang": "en",
"value": "The fix introduces a URL validation gate (is_safe_url) that is invoked before any archiving request is made. The function restricts the scheme to http or https, resolves the hostname via DNS, and verifies that every resolved IP address is globally routable (i.e., not loopback, private, link-local, or otherwise non-global). If any check fails, the module returns an error and the fetch is never performed, preventing the server from being directed to internal or non-HTTP targets."
}
],
"title": "MISP sourcecache module SSRF allows fetching arbitrary internal URLs via attribute enrichment",
"x_gcve": [
{
"extensions": {
"bcp-05-x-01": {
"ai_annotations": [
{
"ai_level": "generated",
"description": "Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.",
"gna_source": 1,
"models": [
{
"gna_source": 1,
"identifier": "qwen3.8:27b",
"name": "qwen3.8:27b",
"source": "ollama"
}
],
"review_status": "full",
"scope": "record",
"tags": [
"ai-computer-assisted:llm-generated",
"ai-computer-assisted:classification"
]
}
]
},
"bcp-05-x-02": {
"x_patch2vuln": {
"assumptions": [
"The MISP server is assumed to be reachable over the network and that an authenticated user with attribute-creation permissions can submit link/url attributes; no specific MISP version or authentication model is stated in the patch.",
"CVSS PR:L assumes a low-privilege authenticated MISP user can create attributes; if MISP requires higher-level permissions, PR could be H.",
"CVSS SI:N assumes the archiving function only performs read (GET) requests; if it can issue state-changing methods, SI could be elevated.",
"SSVC technical_impact \u0027partial\u0027 is the least-assumptive choice; if cloud metadata endpoint access leads to full credential theft and infrastructure takeover, impact could be \u0027total\u0027.",
"The CAPEC-12 mapping is high-confidence based on the explicit SSRF description in the commit message and the code changes; no uncertainty is expected.",
"No specific affected or fixed version numbers are provided in the patch metadata; version boundaries are marked as unspecified.",
"The is_global check in Python\u0027s ipaddress module covers loopback, private, link-local, and other non-global ranges, but DNS rebinding between the check and the actual fetch is not addressed by this patch and could remain a residual risk."
],
"capecRationale": [
{
"capecId": "CAPEC-12",
"rationale": "The patch explicitly describes and remediates an SSRF: an attacker-supplied URL causes the MISP server to fetch internal resources (loopback, cloud metadata) and return the data. CAPEC-12 is the direct and most specific attack pattern for this scenario. No uncertainty is noted; the commit message and code changes align precisely with this pattern."
}
],
"commit": "7cb31e96a1f59bec9afbc087b27b26d9986c6841",
"confidence": "high",
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "elhoim"
},
{
"lang": "en",
"type": "remediation developer",
"value": "Claude Opus 5 (1M context)"
}
],
"cvssRationale": "AV:N: The MISP API is network-accessible. AC:L: Crafting a URL attribute with an internal address is trivial. AT:N: No special adversary technique is required. PR:L: An authenticated MISP user with attribute-creation rights is needed. UI:N: No victim interaction beyond the attacker\u0027s own API call. VC/VI/VA:N: The MISP server\u0027s own confidentiality, integrity, and availability are not directly compromised. SC:H: The subsequent component (internal services, cloud metadata) suffers high confidentiality impact because its data is exfiltrated into the MISP event. SI:N: The module only performs GET-style fetches; no evidence of integrity impact on subsequent components. SA:N: No availability impact on subsequent components is indicated.",
"draft": false,
"fixSummary": "The fix introduces a URL validation gate (is_safe_url) that is invoked before any archiving request is made. The function restricts the scheme to http or https, resolves the hostname via DNS, and verifies that every resolved IP address is globally routable (i.e., not loopback, private, link-local, or otherwise non-global). If any check fails, the module returns an error and the fetch is never performed, preventing the server from being directed to internal or non-HTTP targets.",
"generatedAt": "2026-11-10T11:02:25.004287Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"potentialErrors": [],
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 7,
"confidence": "high",
"model": "qwen3.8:27b",
"score": 6
}
],
"selectedModel": "qwen3.8:27b",
"selectionMethod": "deterministic-consensus-v1",
"selectionNotice": "The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."
},
"patchSha256": "736974194693496cbcfe68e570862a9e221a43f5f6820180e20958b617ebb97c",
"patchSummary": "Adds imports for ipaddress and socket. Introduces a new is_safe_url(url) function that parses the URL, rejects non-http/https schemes, resolves the hostname with socket.getaddrinfo, and rejects the URL if any resolved address fails ipaddress.ip_address().is_global(). In the handler() function, a guard clause calls is_safe_url(tocache) before invoking __archiveLink and returns an error dict if the URL is not safe. Two new unit tests verify that http://127.0.0.1:6379/ and file:///etc/passwd are blocked and that the archive function is never called.",
"patchTruncated": false,
"patches": [
{
"commit": "7cb31e96a1f59bec9afbc087b27b26d9986c6841",
"date": "Fri, 16 Oct 2026 22:27:37 +0000",
"patchSha256": "736974194693496cbcfe68e570862a9e221a43f5f6820180e20958b617ebb97c",
"retrievedAt": "2026-11-10T11:01:44.851219Z",
"source": "https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch",
"sourceUrl": "https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch",
"subject": "fix: [sourcecache] validate URLs before archiving to block"
}
],
"source": "https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-11-10T11:02:25Z",
"version": "2.0.3"
},
"subject": "fix: [sourcecache] validate URLs before archiving to block",
"weaknessRationale": [
{
"cweId": "CWE-918",
"rationale": "The module accepts a user-supplied URL and issues a server-side HTTP request to it without validating the target, allowing an attacker to direct requests to internal or non-HTTP resources. This is a textbook SSRF."
},
{
"cweId": "CWE-20",
"rationale": "The root cause is the absence of any validation on the URL attribute value before it is used as a request target. The fix adds scheme, hostname, and IP-address validation, confirming the missing input validation was the defect."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (7cb31e96a1f59bec9afbc087b27b26d9986c6841): fix: [sourcecache] validate URLs before archiving to block",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch"
],
"timestamp": "2026-10-16T22:27:37Z",
"type": "fix-developed"
},
{
"description": "Patch retrieved from the supplied URL; retrieval time is used as the default availability time.",
"id": "evt-fix-available-1",
"references": [
"https://github.com/MISP/misp-modules/commit/7cb31e96a1f59bec9afbc087b27b26d9986c6841.patch"
],
"timestamp": "2026-11-10T11:01:44.851219Z",
"type": "fix-available"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20273"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-125871",
"datePublished": "2026-11-10T12:57:57.142Z",
"dateReserved": "2026-11-10T12:50:34.525Z",
"dateUpdated": "2026-11-10T15:45:50.479Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-119680 (GCVE-0-2026-119680)
Vulnerability from cvelistv5 – Published: 2026-10-30 14:14 – Updated: 2026-11-06 16:26- CWE-79 - Improper Neutralization of Input During Web Page Generation (XSS or 'Cross-site Scripting')
| URL | Tags |
|---|---|
| https://pitstop.manageengine.com/portal/en/commun… | release-notes |
| Vendor | Product | Version | |
|---|---|---|---|
| ManageEngine | SharePoint Manager Plus |
Unaffected:
450 , < 4508
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-119680",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-06T16:25:31.658536Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-06T16:26:33.327Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "SharePoint Manager Plus",
"vendor": "ManageEngine",
"versions": [
{
"lessThan": "4508",
"status": "unaffected",
"version": "450",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Anas LAABAB with IMRIM (https://imrim.lu)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eA stored cross-site scripting (XSS) vulnerability exists in the chart feature of SharePoint Manager Plus (SPMP) due to improper sanitization and HTML encoding of user-controlled data. An attacker can inject malicious HTML or JavaScript into attributes used to generate charts, including users\u0027 full names, site names, or group names. The injected content is stored and subsequently executed in the context of other users\u0027 browsers when the affected charts are rendered. This vulnerability was fixed in client application build 4508.\u003c/p\u003e"
}
],
"value": "A stored cross-site scripting (XSS) vulnerability exists in the chart feature of SharePoint Manager Plus (SPMP) due to improper sanitization and HTML encoding of user-controlled data. An attacker can inject malicious HTML or JavaScript into attributes used to generate charts, including users\u0027 full names, site names, or group names. The injected content is stored and subsequently executed in the context of other users\u0027 browsers when the affected charts are rendered. This vulnerability was fixed in client application build 4508."
}
],
"impacts": [
{
"capecId": "CAPEC-592",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-592 Stored XSS"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 8.5,
"baseSeverity": "HIGH",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "HIGH",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "HIGH",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:L/VA:N/SC:H/SI:H/SA:H",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH",
"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 (XSS or \u0027Cross-site Scripting\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-30T14:14:24.193Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"tags": [
"release-notes"
],
"url": "https://pitstop.manageengine.com/portal/en/community/topic/sharepoint-manager-plus-build-4508-is-here"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Stored Cross-Site Scripting (XSS) in SharePoint Manager Plus Chart Feature",
"x_gcve": [
{
"recordType": "advisory",
"vulnId": "gcve-1-2026-20247"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-119680",
"datePublished": "2026-10-30T14:14:24.193Z",
"dateReserved": "2026-10-30T14:14:17.240Z",
"dateUpdated": "2026-11-06T16:26:33.327Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-119682 (GCVE-0-2026-119682)
Vulnerability from cvelistv5 – Published: 2026-10-30 14:21 – Updated: 2026-11-06 16:25- CWE-862 - Missing Authorization
| URL | Tags |
|---|---|
| https://pitstop.manageengine.com/portal/en/commun… | release-notes |
| Vendor | Product | Version | |
|---|---|---|---|
| ManageEngine | SharePoint Manager Plus |
Affected:
450 , < 4507
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-119682",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-06T16:24:50.328785Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-06T16:25:08.642Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "SharePoint Manager Plus",
"vendor": "ManageEngine",
"versions": [
{
"lessThan": "4507",
"status": "affected",
"version": "450",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Anas LAABAB with IMRIM (https://imrim.lu)"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eAn improper access control vulnerability exists in the multi-factor authentication (MFA) functionality of ManageEngine SharePoint Manager Plus (SPMP). A low-privileged authenticated user can bypass authorization checks to read and modify MFA configuration settings, enable or disable MFA for the application, enumerate MFA-enrolled users, and delete MFA-enrolled accounts. Successful exploitation could allow an attacker to weaken authentication protections or cause a denial of service by configuring invalid MFA settings, potentially locking legitimate users out of the application. This vulnerability was fixed in build 4507.\u0026nbsp;The reproduction explicitly uses build 4506.\u003c/p\u003e"
}
],
"value": "An improper access control vulnerability exists in the multi-factor authentication (MFA) functionality of ManageEngine SharePoint Manager Plus (SPMP). A low-privileged authenticated user can bypass authorization checks to read and modify MFA configuration settings, enable or disable MFA for the application, enumerate MFA-enrolled users, and delete MFA-enrolled accounts. Successful exploitation could allow an attacker to weaken authentication protections or cause a denial of service by configuring invalid MFA settings, potentially locking legitimate users out of the application. This vulnerability was fixed in build 4507.\u00a0The reproduction explicitly uses build 4506."
}
],
"impacts": [
{
"capecId": "CAPEC-1",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-1 Accessing Functionality Not Properly Constrained by ACLs"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7.9,
"baseSeverity": "HIGH",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "HIGH",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "HIGH",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:H/SI:H/SA:H",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-862",
"description": "CWE-862 Missing Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-30T14:21:21.154Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"tags": [
"release-notes"
],
"url": "https://pitstop.manageengine.com/portal/en/community/topic/sharepoint-manager-plus-build-4507-released"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Improper Access Control in Multi-Factor Authentication (MFA) Functionality in ManageEngine SharePoint Manager Plus",
"x_gcve": [
{
"recordType": "advisory",
"vulnId": "gcve-1-2026-20186"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-119682",
"datePublished": "2026-10-30T14:21:21.154Z",
"dateReserved": "2026-10-30T14:18:42.530Z",
"dateUpdated": "2026-11-06T16:25:08.642Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-77812 (GCVE-0-2026-77812)
Vulnerability from cvelistv5 – Published: 2026-08-21 14:06 – Updated: 2026-11-06 11:19- CWE-311 - Missing Encryption of Sensitive Data
| URL | Tags |
|---|---|
| https://support.dji.com/help/content?customId=en-… | technical-description |
| https://github.com/Wh02m1/CVE-2026-77812 | technical-description |
| https://cyber-defence-campus.github.io/projects/v… | technical-description |
| Vendor | Product | Version | |
|---|---|---|---|
| DJI | Neo |
Affected:
0 , ≤ 01.00.0400
(semver)
|
|
| DJI | Neo 2 |
Affected:
0 , ≤ 01.00.0500
(semver)
|
|
| DJI | DJI Flip |
Affected:
0 , ≤ 01.00.1200
(semver)
|
|
| DJI | Air 3 |
Affected:
0 , ≤ 01.00.1600
(semver)
|
|
| DJI | Air 3S |
Affected:
0 , ≤ 01.00.1400
(semver)
|
|
| DJI | Avata 2 |
Affected:
0 , ≤ 01.00.0400
(semver)
|
|
| DJI | Avata 360 |
Affected:
0 , ≤ 01.00.0300
(semver)
|
|
| DJI | Mavic 3 |
Affected:
0 , ≤ 01.00.1400
(semver)
|
|
| DJI | Mavic 3 Classic |
Affected:
0 , ≤ 01.00.0800
(semver)
|
|
| DJI | Mavic 3 Pro |
Affected:
0 , ≤ 01.01.0700
(semver)
|
|
| DJI | Mavic 4 Pro |
Affected:
0 , ≤ 01.00.0500
(semver)
|
|
| DJI | Mini 2 |
Affected:
0 , ≤ 01.07.0200
(semver)
|
|
| DJI | Mini 3 |
Affected:
0 , ≤ 01.00.0500
(semver)
|
|
| DJI | Mini 3 Pro |
Affected:
0 , ≤ 01.00.0900
(semver)
|
|
| DJI | Mini 4 Pro |
Affected:
0 , ≤ 01.00.1100
(semver)
|
|
| DJI | Mini 5 Pro |
Affected:
0 , ≤ 01.00.0600
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-77812",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-21T17:42:02.404909Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-21T17:42:36.191Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Neo",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0400",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Neo 2",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0500",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "DJI Flip",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1200",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Air 3",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1600",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Air 3S",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1400",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Avata 2",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0400",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Avata 360",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0300",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mavic 3",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1400",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mavic 3 Classic",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0800",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mavic 3 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.01.0700",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mavic 4 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0500",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 2",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.07.0200",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 3",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0500",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 3 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0900",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 4 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.1100",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Mini 5 Pro",
"vendor": "DJI",
"versions": [
{
"lessThanOrEqual": "01.00.0600",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Abdelrahman Yousef"
},
{
"lang": "en",
"type": "finder",
"value": "Dr. Jordan Samhi"
},
{
"lang": "en",
"type": "finder",
"value": "Lloren\u00e7 Rom\u00e1 Alvarez, Cyber-Defence Campus, Armasuisse"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "DJI drones transmit DUML (DJI Universal Markup Language) protocol messages over BLE (Bluetooth Low Energy) without encryption. When a client attempts to connect to the drone over Wi-Fi, or when the drone is switched to QuickTransfer mode, the DJI Fly application exchanges DUML messages with the drone over BLE, including the Wi-Fi credentials. An attacker within BLE range can passively sniff this traffic and recover the credentials in cleartext, including the drone\u0027s Wi-Fi PSK, SSID, and trusted identifier UUID. Obtaining these credentials allows the attacker to join the drone\u0027s internal Wi-Fi network, interact with network services exposed by the drone, and decrypt Wi-Fi traffic exchanged between the drone and the legitimate user.\u003cbr\u003e\u003cbr\u003e* An attacker within BLE range recovers the Wi-Fi SSID and PSK in cleartext, and can then join the drone\u0027s network \u003cbr\u003e* The same capture also exposes the session UUID identifier, which is the only thing the drone uses to tell a trusted client from an unknown one, so the attacker can replay it and skip the physical confirmation of new connected devices.\u003cbr\u003e* The credentials do not change between sessions unless the operator manually resets the Wi-Fi settings, so one capture stays valid indefinitely\u003cbr\u003e* The attack is fully passive, with nothing transmitted and no connection made, so neither the operator nor the drone has any indication the session was observed\u003cbr\u003e* A BLE sniffer and presence during one normal DJI Fly connection are needed\u003cbr\u003e\u003cbr\u003eAffected models are DJI Neo until 01.00.0400, DJI Neo 2 until 01.00.0500, DJI Flip until 01.00.1200, DJI Air 3 until 01.00.1600, DJI Air 3S until 01.00.1400, DJI Avata 2 until 01.00.0400, DJI Avata 360 until 01.00.0300, DJI Mavic 3 until 01.00.1400, DJI Mavic 3 Classic until 01.00.0800, DJI Mavic 3 Pro until 01.01.0700, DJI Mavic 4 Pro until 01.00.0500, DJI Mini 2 until 01.07.0200, DJI Mini 3 until 01.00.0500, DJI Mini 3 Pro until 01.00.0900, DJI Mini 4 Pro until 01.00.1100, and DJI Mini 5 Pro until 01.00.0600.\u003cbr\u003e\u003cbr\u003eRemediation requires a firmware update from the vendor. There is no user-side mitigation that fully addresses the vulnerability without upgrading."
}
],
"value": "DJI drones transmit DUML (DJI Universal Markup Language) protocol messages over BLE (Bluetooth Low Energy) without encryption. When a client attempts to connect to the drone over Wi-Fi, or when the drone is switched to QuickTransfer mode, the DJI Fly application exchanges DUML messages with the drone over BLE, including the Wi-Fi credentials. An attacker within BLE range can passively sniff this traffic and recover the credentials in cleartext, including the drone\u0027s Wi-Fi PSK, SSID, and trusted identifier UUID. Obtaining these credentials allows the attacker to join the drone\u0027s internal Wi-Fi network, interact with network services exposed by the drone, and decrypt Wi-Fi traffic exchanged between the drone and the legitimate user.\n\n* An attacker within BLE range recovers the Wi-Fi SSID and PSK in cleartext, and can then join the drone\u0027s network \n* The same capture also exposes the session UUID identifier, which is the only thing the drone uses to tell a trusted client from an unknown one, so the attacker can replay it and skip the physical confirmation of new connected devices.\n* The credentials do not change between sessions unless the operator manually resets the Wi-Fi settings, so one capture stays valid indefinitely\n* The attack is fully passive, with nothing transmitted and no connection made, so neither the operator nor the drone has any indication the session was observed\n* A BLE sniffer and presence during one normal DJI Fly connection are needed\n\nAffected models are DJI Neo until 01.00.0400, DJI Neo 2 until 01.00.0500, DJI Flip until 01.00.1200, DJI Air 3 until 01.00.1600, DJI Air 3S until 01.00.1400, DJI Avata 2 until 01.00.0400, DJI Avata 360 until 01.00.0300, DJI Mavic 3 until 01.00.1400, DJI Mavic 3 Classic until 01.00.0800, DJI Mavic 3 Pro until 01.01.0700, DJI Mavic 4 Pro until 01.00.0500, DJI Mini 2 until 01.07.0200, DJI Mini 3 until 01.00.0500, DJI Mini 3 Pro until 01.00.0900, DJI Mini 4 Pro until 01.00.1100, and DJI Mini 5 Pro until 01.00.0600.\n\nRemediation requires a firmware update from the vendor. There is no user-side mitigation that fully addresses the vulnerability without upgrading."
}
],
"impacts": [
{
"capecId": "CAPEC-115",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-115 Authentication Bypass"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "ADJACENT",
"baseScore": 9.4,
"baseSeverity": "CRITICAL",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "HIGH",
"subConfidentialityImpact": "HIGH",
"subIntegrityImpact": "HIGH",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-311",
"description": "CWE-311 Missing Encryption of Sensitive Data",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-06T11:19:05.887Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"tags": [
"technical-description"
],
"url": "https://support.dji.com/help/content?customId=en-us03400011149\u0026amp;spaceId=34\u0026amp;re=US\u0026amp;lang=en"
},
{
"tags": [
"technical-description"
],
"url": "https://github.com/Wh02m1/CVE-2026-77812"
},
{
"tags": [
"technical-description"
],
"url": "https://cyber-defence-campus.github.io/projects/vulnerabilities/CVE-2026-77812/"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Cleartext Exposure of DJI Drone Wi-Fi Credentials via BLE",
"x_gcve": [
{
"recordType": "advisory",
"vulnId": "gcve-1-2026-20157"
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-77812",
"datePublished": "2026-08-21T14:06:55.723Z",
"dateReserved": "2026-08-21T14:06:52.579Z",
"dateUpdated": "2026-11-06T11:19:05.887Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-118173 (GCVE-0-2026-118173)
Vulnerability from cvelistv5 – Published: 2026-10-27 18:11 – Updated: 2026-11-04 16:41| URL | Tags |
|---|---|
| https://github.com/MISP/misp-guard/commit/6127d94… | patch |
| Vendor | Product | Version | |
|---|---|---|---|
| MISP | misp-guard |
Affected:
0 , < 1.4
(semver)
cpe:2.3:a:misp:misp-guard:*:*:*:*:*:*:*:* |
qwen3.8:27b
1 event
advisory
bcp-05-x-01bcp-05-x-02bcp-05-x-03
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-10-27 18:09 - Model
qwen3.8:27b- Input
-
https://github.com/MISP/misp-guard/commit/6127d94c350e4dfe31fd4426ba26f51294ed3867.patch
96c08da8be43… - Confidence
- medium
| Commit | Subject | Patch SHA-256 |
|---|---|---|
6127d94c350e
|
fix: [security] enforce allowed tags on every tag of a | 96c08da8be43… |
Fix summary
The fix introduces a new validation function, check_required_taxonomy_tags_allowed, that iterates over every tag belonging to a required taxonomy and verifies each one is present in the configured allowed-tags list, raising a ForbiddenException if any tag is not allowed. This check is applied at both the event level and the attribute level. Additionally, an inherit_event_taxonomies flag is introduced so that attributes without their own required-taxonomy tags inherit the event's already-validated taxonomy, while attributes that do carry tags of the required taxonomy are still fully validated against the allowed list. This ensures that no non-allowed tag of a required taxonomy can pass the guard regardless of whether an allowed tag is also present.
Patch summary
In src/mispguard.py: (1) Added a new method check_required_taxonomy_tags_allowed that loops over all tags of a required taxonomy and rejects any tag not in the allowed list. (2) Modified check_event_required_taxonomies to call the new method after the existing existence check. (3) Modified check_attribute_required_taxonomies to accept an inherit_event_taxonomies parameter; when True, the existence check is skipped (the event already satisfied it) but the new allowed-tags check still runs on any tags the attribute does hold. (4) Added the inherit_event_taxonomies parameter to check_attribute_level_rules and check_object_level_rules, threading it through recursive calls for ShadowAttribute and object attributes. (5) Updated check_required_taxonomy_exists to accept an entity parameter for clearer error messages. (6) Added 172 lines of test cases in src/test/test_misp_guard.py covering: event with both allowed and non-allowed taxonomy tags (blocked), untagged attribute under a tagged event (allowed), attribute in
CVSS rationale
AV:N: The vulnerability is exploitable over the network via MISP feed endpoints. AC:L: The attack is straightforward; the attacker simply includes a non-allowed tag alongside an allowed one. AT:N: No need to manipulate or bypass any additional protection. PR:H: The attacker requires high privileges, specifically the ability to author or modify MISP events in a feed source (write access to a MISP instance). UI:N: No user interaction is required. VC:N/VI:N/VA:N: The guard process itself is not compromised in terms of its own confidentiality, integrity, or availability. SC:N: No direct impact on connected systems' confidentiality. SI:H: The integrity of the data distribution policy is significantly violated; data with higher sensitivity/classification is distributed to consumers who should only receive lower-classification data, undermining the trust model of the feed. SA:N: No cascading security impact on other systems.
Weakness rationale
- CWE-20 The guard's validation logic for required taxonomy tags was incomplete: it only checked for the existence of at least one allowed tag rather than verifying that all tags of the required taxonomy were in the allowed list. This is a classic incomplete input validation flaw where the check does not cover all relevant input values.
- CWE-285 The guard's purpose is to enforce authorization policies on data flowing through MISP feeds. The incomplete tag check effectively allowed unauthorized (non-allowed) tags to pass, resulting in improper enforcement of the data distribution authorization policy.
Attack pattern rationale
- CAPEC-120 The closest plausible attack pattern is parameter tampering: an attacker who can author MISP feed events manipulates the tag parameters to include a non-allowed taxonomy tag (e.g., tlp:red) alongside an allowed one (e.g., tlp:clear), exploiting the guard's incomplete validation that only checked for the presence of at least one allowed tag. The uncertainty is that this is not a traditional HTTP parameter tampering scenario but rather manipulation of structured data fields (tags) within MISP event objects; however, the fundamental technique of altering input values to bypass validation aligns with CAPEC-120.
Assumptions to verify
- The CAPEC-120 mapping is the closest available match but is not a perfect fit; the attack involves manipulation of structured MISP event tag fields rather than traditional HTTP parameters. No more specific CAPEC for structured-data tag manipulation exists in the CAPEC catalog.
- The CVSS PR:H assumption is based on the inference that an attacker needs write access to a MISP instance to author events with non-allowed tags. If the guard is deployed in a context where feed sources are fully trusted, the practical exploitability may be lower.
- The exact fixed version is not specified in the patch metadata. The tag_version_boundary indicates v1.4 is the nearest tag with 15 commits after the fix, suggesting the fix landed in a version after 1.4, but the precise version number is unknown.
- The SI:H rating assumes the data distribution policy violation (higher-TLP data reaching lower-TLP consumers) constitutes a significant integrity impact on the feed's trust model. A different rating (e.g., SI:L) could be argued if the policy is considered advisory rather than binding.
- The patch does not specify whether the vulnerability was discovered through a security audit, bug report, or internal testing. No finder or reporter credit is assigned beyond the remediation developer.
Model comparison
Selected qwen3.8:27b
by deterministic-consensus-v1
The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required.
| Model | Score | Agreement | Confidence | Assumptions |
|---|---|---|---|---|
qwen3.8:27b |
7 | 11 | medium | 5 |
- 2026-10-26 07:44 UTC Fix developed Corrective change authored (6127d94c350e4dfe31fd4426ba26f51294ed3867): fix: [security] enforce allowed tags on every tag of a https://github.com/MISP/misp-guard/commit/6127d94c350e4dfe31fd4426ba26f51294ed3867.patch
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-118173",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-04T16:41:01.309893Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-04T16:41:17.851Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"cpes": [
"cpe:2.3:a:misp:misp-guard:*:*:*:*:*:*:*:*"
],
"modules": [
"src/mispguard.py"
],
"product": "misp-guard",
"programFiles": [
"src/mispguard.py"
],
"repo": "https://github.com/MISP/misp-guard",
"vendor": "MISP",
"versions": [
{
"lessThan": "1.4",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Luciano Righetti"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eMISP Guard, a proxy that enforces security policies on MISP feed data, contained an incomplete validation check for required taxonomy tags. When a feed event or its attributes carried tags belonging to a required taxonomy (for example, TLP), the guard only verified that at least one tag of that taxonomy matched the configured allowed list. It did not verify that every tag of the required taxonomy present on the event or attribute was in the allowed list. As a result, an event or attribute could simultaneously carry an allowed tag (e.g., tlp:clear) and a non-allowed tag (e.g., tlp:red or tlp:amber) and still pass the guard\u0027s policy check. This allowed data marked with a higher classification or sensitivity level to be distributed through feeds configured to only distribute lower-classification data, effectively bypassing the intended data-handling restrictions. The vulnerability affected both event-level and attribute-level tag validation, including attributes nested within objects and shadow attributes. An attacker with the ability to author or modify MISP events in a feed source could include non-allowed taxonomy tags alongside allowed ones to exfiltrate more sensitive data to feed consumers than the guard policy intended to permit.\u003c/p\u003e"
}
],
"value": "MISP Guard, a proxy that enforces security policies on MISP feed data, contained an incomplete validation check for required taxonomy tags. When a feed event or its attributes carried tags belonging to a required taxonomy (for example, TLP), the guard only verified that at least one tag of that taxonomy matched the configured allowed list. It did not verify that every tag of the required taxonomy present on the event or attribute was in the allowed list. As a result, an event or attribute could simultaneously carry an allowed tag (e.g., tlp:clear) and a non-allowed tag (e.g., tlp:red or tlp:amber) and still pass the guard\u0027s policy check. This allowed data marked with a higher classification or sensitivity level to be distributed through feeds configured to only distribute lower-classification data, effectively bypassing the intended data-handling restrictions. The vulnerability affected both event-level and attribute-level tag validation, including attributes nested within objects and shadow attributes. An attacker with the ability to author or modify MISP events in a feed source could include non-allowed taxonomy tags alongside allowed ones to exfiltrate more sensitive data to feed consumers than the guard policy intended to permit."
}
],
"impacts": [
{
"capecId": "CAPEC-120",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-120 Parameter Tampering"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 6.1,
"baseSeverity": "MEDIUM",
"privilegesRequired": "HIGH",
"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:H/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-27T18:09:46Z",
"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"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-285",
"description": "CWE-285 Improper Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-27T18:11:51.815Z",
"orgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"shortName": "CIRCL"
},
"references": [
{
"name": "Security patch",
"tags": [
"patch"
],
"url": "https://github.com/MISP/misp-guard/commit/6127d94c350e4dfe31fd4426ba26f51294ed3867"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe fix introduces a new validation function, check_required_taxonomy_tags_allowed, that iterates over every tag belonging to a required taxonomy and verifies each one is present in the configured allowed-tags list, raising a ForbiddenException if any tag is not allowed. This check is applied at both the event level and the attribute level. Additionally, an inherit_event_taxonomies flag is introduced so that attributes without their own required-taxonomy tags inherit the event\u0027s already-validated taxonomy, while attributes that do carry tags of the required taxonomy are still fully validated against the allowed list. This ensures that no non-allowed tag of a required taxonomy can pass the guard regardless of whether an allowed tag is also present.\u003c/p\u003e"
}
],
"value": "The fix introduces a new validation function, check_required_taxonomy_tags_allowed, that iterates over every tag belonging to a required taxonomy and verifies each one is present in the configured allowed-tags list, raising a ForbiddenException if any tag is not allowed. This check is applied at both the event level and the attribute level. Additionally, an inherit_event_taxonomies flag is introduced so that attributes without their own required-taxonomy tags inherit the event\u0027s already-validated taxonomy, while attributes that do carry tags of the required taxonomy are still fully validated against the allowed list. This ensures that no non-allowed tag of a required taxonomy can pass the guard regardless of whether an allowed tag is also present."
}
],
"title": "MISP Guard Incomplete Tag Validation Allows Non-Allowed Taxonomy Tags to Bypass Feed Policy Enforcement",
"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 CAPEC-120 mapping is the closest available match but is not a perfect fit; the attack involves manipulation of structured MISP event tag fields rather than traditional HTTP parameters. No more specific CAPEC for structured-data tag manipulation exists in the CAPEC catalog.",
"The CVSS PR:H assumption is based on the inference that an attacker needs write access to a MISP instance to author events with non-allowed tags. If the guard is deployed in a context where feed sources are fully trusted, the practical exploitability may be lower.",
"The exact fixed version is not specified in the patch metadata. The tag_version_boundary indicates v1.4 is the nearest tag with 15 commits after the fix, suggesting the fix landed in a version after 1.4, but the precise version number is unknown.",
"The SI:H rating assumes the data distribution policy violation (higher-TLP data reaching lower-TLP consumers) constitutes a significant integrity impact on the feed\u0027s trust model. A different rating (e.g., SI:L) could be argued if the policy is considered advisory rather than binding.",
"The patch does not specify whether the vulnerability was discovered through a security audit, bug report, or internal testing. No finder or reporter credit is assigned beyond the remediation developer."
],
"capecRationale": [
{
"capecId": "CAPEC-120",
"rationale": "The closest plausible attack pattern is parameter tampering: an attacker who can author MISP feed events manipulates the tag parameters to include a non-allowed taxonomy tag (e.g., tlp:red) alongside an allowed one (e.g., tlp:clear), exploiting the guard\u0027s incomplete validation that only checked for the presence of at least one allowed tag. The uncertainty is that this is not a traditional HTTP parameter tampering scenario but rather manipulation of structured data fields (tags) within MISP event objects; however, the fundamental technique of altering input values to bypass validation aligns with CAPEC-120."
}
],
"commit": "6127d94c350e4dfe31fd4426ba26f51294ed3867",
"confidence": "medium",
"cpeReview": [
{
"api": "https://cpe.gcve.eu/api/cpes",
"cpe": "cpe:2.3:a:misp:misp-guard:*:*:*:*:*:*:*:*",
"exactSearchTruncated": false,
"searchTruncated": false,
"status": "not_found"
}
],
"credits": [
{
"lang": "en",
"type": "remediation developer",
"value": "Luciano Righetti"
}
],
"cvssRationale": "AV:N: The vulnerability is exploitable over the network via MISP feed endpoints. AC:L: The attack is straightforward; the attacker simply includes a non-allowed tag alongside an allowed one. AT:N: No need to manipulate or bypass any additional protection. PR:H: The attacker requires high privileges, specifically the ability to author or modify MISP events in a feed source (write access to a MISP instance). UI:N: No user interaction is required. VC:N/VI:N/VA:N: The guard process itself is not compromised in terms of its own confidentiality, integrity, or availability. SC:N: No direct impact on connected systems\u0027 confidentiality. SI:H: The integrity of the data distribution policy is significantly violated; data with higher sensitivity/classification is distributed to consumers who should only receive lower-classification data, undermining the trust model of the feed. SA:N: No cascading security impact on other systems.",
"fixSummary": "The fix introduces a new validation function, check_required_taxonomy_tags_allowed, that iterates over every tag belonging to a required taxonomy and verifies each one is present in the configured allowed-tags list, raising a ForbiddenException if any tag is not allowed. This check is applied at both the event level and the attribute level. Additionally, an inherit_event_taxonomies flag is introduced so that attributes without their own required-taxonomy tags inherit the event\u0027s already-validated taxonomy, while attributes that do carry tags of the required taxonomy are still fully validated against the allowed list. This ensures that no non-allowed tag of a required taxonomy can pass the guard regardless of whether an allowed tag is also present.",
"generatedAt": "2026-10-27T18:09:46.639416Z",
"generator": "patch2vuln.py",
"model": "qwen3.8:27b",
"modelComparison": {
"rankings": [
{
"agreementScore": 11,
"assumptionCount": 5,
"confidence": "medium",
"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": "96c08da8be43b5e5165fc57cebe9904273d91d56fcf14a0566ecd3dfb50ce099",
"patchSummary": "In src/mispguard.py: (1) Added a new method check_required_taxonomy_tags_allowed that loops over all tags of a required taxonomy and rejects any tag not in the allowed list. (2) Modified check_event_required_taxonomies to call the new method after the existing existence check. (3) Modified check_attribute_required_taxonomies to accept an inherit_event_taxonomies parameter; when True, the existence check is skipped (the event already satisfied it) but the new allowed-tags check still runs on any tags the attribute does hold. (4) Added the inherit_event_taxonomies parameter to check_attribute_level_rules and check_object_level_rules, threading it through recursive calls for ShadowAttribute and object attributes. (5) Updated check_required_taxonomy_exists to accept an entity parameter for clearer error messages. (6) Added 172 lines of test cases in src/test/test_misp_guard.py covering: event with both allowed and non-allowed taxonomy tags (blocked), untagged attribute under a tagged event (allowed), attribute in",
"patchTruncated": false,
"patches": [
{
"commit": "6127d94c350e4dfe31fd4426ba26f51294ed3867",
"date": "Mon, 26 Oct 2026 08:44:32 +0100",
"patchSha256": "96c08da8be43b5e5165fc57cebe9904273d91d56fcf14a0566ecd3dfb50ce099",
"source": "https://github.com/MISP/misp-guard/commit/6127d94c350e4dfe31fd4426ba26f51294ed3867.patch",
"sourceUrl": "https://github.com/MISP/misp-guard/commit/6127d94c350e4dfe31fd4426ba26f51294ed3867.patch",
"subject": "fix: [security] enforce allowed tags on every tag of a"
}
],
"source": "https://github.com/MISP/misp-guard/commit/6127d94c350e4dfe31fd4426ba26f51294ed3867.patch",
"ssvc": {
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "Supplier",
"timestamp": "2026-10-27T18:09:46Z",
"version": "2.0.3"
},
"subject": "fix: [security] enforce allowed tags on every tag of a",
"tagVersionBoundary": {
"commits_after_fix": 15,
"repository": "https://github.com/MISP/misp-guard",
"tag": "v1.4",
"version": "1.4",
"version_type": "custom"
},
"weaknessRationale": [
{
"cweId": "CWE-20",
"rationale": "The guard\u0027s validation logic for required taxonomy tags was incomplete: it only checked for the existence of at least one allowed tag rather than verifying that all tags of the required taxonomy were in the allowed list. This is a classic incomplete input validation flaw where the check does not cover all relevant input values."
},
{
"cweId": "CWE-285",
"rationale": "The guard\u0027s purpose is to enforce authorization policies on data flowing through MISP feeds. The incomplete tag check effectively allowed unauthorized (non-allowed) tags to pass, resulting in improper enforcement of the data distribution authorization policy."
}
]
}
},
"bcp-05-x-03": {
"x_timeline": {
"events": [
{
"description": "Corrective change authored (6127d94c350e4dfe31fd4426ba26f51294ed3867): fix: [security] enforce allowed tags on every tag of a",
"id": "evt-fix-developed-1",
"references": [
"https://github.com/MISP/misp-guard/commit/6127d94c350e4dfe31fd4426ba26f51294ed3867.patch"
],
"timestamp": "2026-10-26T07:44:32Z",
"type": "fix-developed"
}
]
}
}
},
"recordType": "advisory",
"vulnId": "gcve-1-2026-20219"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "5a6e4751-2f3f-4070-9419-94fb35b644e8",
"assignerShortName": "CIRCL",
"cveId": "CVE-2026-118173",
"datePublished": "2026-10-27T18:11:51.815Z",
"dateReserved": "2026-10-27T18:11:43.078Z",
"dateUpdated": "2026-11-04T16:41:17.851Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}