{"api_version":"1","generated_at":"2026-09-25T11:47:51+00:00","cve":"CVE-2026-97863","urls":{"html":"https://cve.report/CVE-2026-97863","api":"https://cve.report/api/cve/CVE-2026-97863.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-97863","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-97863"},"summary":{"title":"misp-modules: Shell Command Injection in MISP cisco_firesight_manager_ACL_rule_export Module via Unescaped Attribute Values","description":"The cisco_firesight_manager_ACL_rule_export module in misp-modules generates a shell script (.sh) that authenticates to and calls the Cisco fireSIGHT Manager API. The module interpolates configuration values (IP address, login, password, domain ID, policy ID) and MISP attribute values (destination IPs, URLs, event info comments) directly into single-quoted shell string assignments without any escaping or sanitization. Because the values are placed inside single-quoted shell strings, any value containing a single-quote character (e.g., a crafted ip-dst or url attribute value submitted to MISP) breaks out of the quoting context, allowing an attacker to inject arbitrary shell commands into the exported script. A security analyst who subsequently executes the generated .sh file unmodified would run the injected commands with their own privileges, potentially exposing fireSIGHT Manager credentials, modifying ACL rules, or compromising the analyst workstation. Additionally, the module contained a secondary defect where the variable 'config' was only assigned inside a conditional block but referenced unconditionally afterward, causing a NameError (denial of service) when the request payload lacked a 'config' key. The vulnerability requires the attacker to have the ability to submit MISP events or attributes containing a single-quote character and the victim to execute the exported script. No authentication bypass is required beyond standard MISP event-submission privileges.","state":"PUBLISHED","assigner":"CIRCL","published_at":"2026-09-25 09:17:08","updated_at":"2026-09-25 10:17:08"},"problem_types":["CWE-78","CWE-78 CWE-78 Improper Neutralization of Special Elements used in a Command (\"Command Injection\")"],"metrics":[{"version":"4.0","source":"5a6e4751-2f3f-4070-9419-94fb35b644e8","type":"Secondary","score":"6.3","severity":"MEDIUM","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","data":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":6.3,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"LOW","userInteraction":"ACTIVE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"HIGH","subIntegrityImpact":"HIGH","subAvailabilityImpact":"HIGH","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}},{"version":"4.0","source":"CNA","type":"CVSS","score":"6.3","severity":"MEDIUM","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H","data":{"Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","Safety":"NOT_DEFINED","attackComplexity":"LOW","attackRequirements":"NONE","attackVector":"NETWORK","baseScore":6.3,"baseSeverity":"MEDIUM","privilegesRequired":"LOW","providerUrgency":"NOT_DEFINED","subAvailabilityImpact":"HIGH","subConfidentialityImpact":"HIGH","subIntegrityImpact":"HIGH","userInteraction":"ACTIVE","valueDensity":"NOT_DEFINED","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnerabilityResponseEffort":"NOT_DEFINED"}}],"references":[{"url":"https://github.com/misp/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748","name":"https://github.com/misp/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748","refsource":"5a6e4751-2f3f-4070-9419-94fb35b644e8","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/elhoim/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748","name":"https://github.com/elhoim/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748","refsource":"MITRE","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-97863","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-97863","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"misp","product":"misp-modules","version":"affected 3.0.10 semver","platforms":[]}],"timeline":[],"solutions":[{"source":"CNA","title":"","value":"All user-controlled and configuration values interpolated into the generated shell script are now passed through Python's shlex.quote() function, which produces a safely quoted string that cannot be broken out of by embedded shell metacharacters. For the JSON access-rule block that embeds multiple attribute values within a single shell assignment, the JSON content is first assembled as plain text and then the entire assembled string is shlex-quoted once, preventing stray quote characters from corrupting the outer quoting. The 'config' variable is now initialized to an empty dictionary before the conditional assignment, eliminating the NameError.","time":"","lang":"en"}],"workarounds":[],"exploits":[],"credits":[{"source":"CNA","value":"elhoim","lang":"en"},{"source":"CNA","value":"Claude Opus 5","lang":"en"}],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"collectionURL":"https://github.com/MISP/misp-modules","defaultStatus":"unaffected","modules":["cisco_firesight_manager_ACL_rule_export"],"product":"misp-modules","programFiles":["misp_modules/modules/export_mod/cisco_firesight_manager_ACL_rule_export.py"],"repo":"https://github.com/misp/misp-modules","vendor":"misp","versions":[{"lessThanOrEqual":"3.0.10","status":"affected","version":"0","versionType":"semver"}]}],"credits":[{"lang":"en","type":"remediation developer","value":"elhoim"},{"lang":"en","type":"remediation developer","value":"Claude Opus 5"}],"descriptions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>The cisco_firesight_manager_ACL_rule_export module in misp-modules generates a shell script (.sh) that authenticates to and calls the Cisco fireSIGHT Manager API. The module interpolates configuration values (IP address, login, password, domain ID, policy ID) and MISP attribute values (destination IPs, URLs, event info comments) directly into single-quoted shell string assignments without any escaping or sanitization. Because the values are placed inside single-quoted shell strings, any value containing a single-quote character (e.g., a crafted ip-dst or url attribute value submitted to MISP) breaks out of the quoting context, allowing an attacker to inject arbitrary shell commands into the exported script. A security analyst who subsequently executes the generated .sh file unmodified would run the injected commands with their own privileges, potentially exposing fireSIGHT Manager credentials, modifying ACL rules, or compromising the analyst workstation. Additionally, the module contained a secondary defect where the variable 'config' was only assigned inside a conditional block but referenced unconditionally afterward, causing a NameError (denial of service) when the request payload lacked a 'config' key. The vulnerability requires the attacker to have the ability to submit MISP events or attributes containing a single-quote character and the victim to execute the exported script. No authentication bypass is required beyond standard MISP event-submission privileges.</p>"}],"value":"The cisco_firesight_manager_ACL_rule_export module in misp-modules generates a shell script (.sh) that authenticates to and calls the Cisco fireSIGHT Manager API. The module interpolates configuration values (IP address, login, password, domain ID, policy ID) and MISP attribute values (destination IPs, URLs, event info comments) directly into single-quoted shell string assignments without any escaping or sanitization. Because the values are placed inside single-quoted shell strings, any value containing a single-quote character (e.g., a crafted ip-dst or url attribute value submitted to MISP) breaks out of the quoting context, allowing an attacker to inject arbitrary shell commands into the exported script. A security analyst who subsequently executes the generated .sh file unmodified would run the injected commands with their own privileges, potentially exposing fireSIGHT Manager credentials, modifying ACL rules, or compromising the analyst workstation. Additionally, the module contained a secondary defect where the variable 'config' was only assigned inside a conditional block but referenced unconditionally afterward, causing a NameError (denial of service) when the request payload lacked a 'config' key. The vulnerability requires the attacker to have the ability to submit MISP events or attributes containing a single-quote character and the victim to execute the exported script. No authentication bypass is required beyond standard MISP event-submission privileges."}],"impacts":[{"capecId":"CAPEC-88","descriptions":[{"lang":"en","value":"CAPEC-88 Shell Command Injection"}]}],"metrics":[{"cvssV4_0":{"Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","Safety":"NOT_DEFINED","attackComplexity":"LOW","attackRequirements":"NONE","attackVector":"NETWORK","baseScore":6.3,"baseSeverity":"MEDIUM","privilegesRequired":"LOW","providerUrgency":"NOT_DEFINED","subAvailabilityImpact":"HIGH","subConfidentialityImpact":"HIGH","subIntegrityImpact":"HIGH","userInteraction":"ACTIVE","valueDensity":"NOT_DEFINED","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H","version":"4.0","vulnAvailabilityImpact":"NONE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnerabilityResponseEffort":"NOT_DEFINED"},"format":"CVSS","scenarios":[{"lang":"en","value":"GENERAL"}]}],"problemTypes":[{"descriptions":[{"cweId":"CWE-78","description":"CWE-78 Improper Neutralization of Special Elements used in a Command (\"Command Injection\")","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-09-25T09:50:00.869Z","orgId":"5a6e4751-2f3f-4070-9419-94fb35b644e8","shortName":"CIRCL"},"references":[{"name":"Security patch","tags":["patch"],"url":"https://github.com/misp/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748"}],"solutions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>All user-controlled and configuration values interpolated into the generated shell script are now passed through Python's shlex.quote() function, which produces a safely quoted string that cannot be broken out of by embedded shell metacharacters. For the JSON access-rule block that embeds multiple attribute values within a single shell assignment, the JSON content is first assembled as plain text and then the entire assembled string is shlex-quoted once, preventing stray quote characters from corrupting the outer quoting. The 'config' variable is now initialized to an empty dictionary before the conditional assignment, eliminating the NameError.</p>"}],"value":"All user-controlled and configuration values interpolated into the generated shell script are now passed through Python's shlex.quote() function, which produces a safely quoted string that cannot be broken out of by embedded shell metacharacters. For the JSON access-rule block that embeds multiple attribute values within a single shell assignment, the JSON content is first assembled as plain text and then the entire assembled string is shlex-quoted once, preventing stray quote characters from corrupting the outer quoting. The 'config' variable is now initialized to an empty dictionary before the conditional assignment, eliminating the NameError."}],"source":{"discovery":"UNKNOWN"},"title":"misp-modules: Shell Command Injection in MISP cisco_firesight_manager_ACL_rule_export Module via Unescaped Attribute Values","x_gcve":[{"extensions":{"bcp-05-x-01":{"ai_annotations":[{"ai_level":"generated","description":"Draft vulnerability metadata was generated from a git-format patch using an Ollama-hosted language model. Human validation is required before publication.","gna_source":1,"models":[{"gna_source":1,"identifier":"qwen3.8:27b","name":"qwen3.8:27b","source":"ollama"}],"review_status":"none","scope":"record","tags":["ai-computer-assisted:llm-generated","ai-computer-assisted:classification"]}]},"bcp-05-x-02":{"x_patch2vuln":{"assumptions":["The CVSS UI metric is set to A (Active) because the victim analyst must deliberately execute the generated .sh file; CVSS v4.0 does not use the v3.x 'R' value.","PR is set to L assuming the attacker holds a basic MISP user role sufficient to create or modify events and attributes; the patch does not specify exact role requirements.","SC, SI, SA are rated H based on the potential for arbitrary command execution on the analyst workstation and the fireSIGHT Manager; actual impact depends on the analyst's local privileges and the fireSIGHT Manager's exposure.","The CAPEC-88 mapping is the closest available pattern; the vulnerability is specifically an output-encoding failure in generated shell script rather than direct command-line injection, but CAPEC-88 is the narrowest defensible match.","No specific affected or fixed version numbers are available from the patch metadata; the commit date (2026-08-31) is the only temporal anchor.","The secondary NameError bug (config variable) is a minor denial-of-service issue included in the same patch but is not the primary security concern."],"capecRationale":[{"capecId":"CAPEC-88","rationale":"The attack pattern involves an attacker supplying input containing shell metacharacters (specifically a single quote) that is incorporated into a shell command or script without proper sanitization, resulting in execution of attacker-controlled commands. The patch confirms the vulnerable pattern: values are interpolated into single-quoted shell assignments, and the fix is to apply shlex.quote() to neutralize shell metacharacters. This is the closest and most specific CAPEC mapping for the observed vulnerability."}],"commit":"625b54908efbd6acc8343aa3370d401dd370e748","confidence":"high","credits":[{"lang":"en","type":"remediation developer","value":"elhoim"},{"lang":"en","type":"remediation developer","value":"Claude Opus 5"}],"cvssRationale":"AV:N: The attacker submits crafted MISP attribute values over the network to a MISP instance. AC:L: Injecting a single-quote character into an attribute value is trivial and requires no race conditions or special timing. AT:N: No special data manipulation or prior access to the target system is needed beyond submitting an event. PR:L: The attacker needs only basic MISP user privileges to create or modify events/attributes. UI:A: The victim analyst must actively execute the generated .sh file for the injected commands to run. VC:N, VI:N, VA:N: The MISP instance itself is not directly compromised; the impact is on the downstream system where the script executes. SC:H: The injected commands can exfiltrate fireSIGHT Manager credentials and analyst system data. SI:H: Arbitrary command execution allows modification of ACL rules, system files, or other integrity-critical resources. SA:H: Injected commands can disrupt or destroy the analyst workstation or fireSIGHT Manager availability.","draft":false,"fixSummary":"All user-controlled and configuration values interpolated into the generated shell script are now passed through Python's shlex.quote() function, which produces a safely quoted string that cannot be broken out of by embedded shell metacharacters. For the JSON access-rule block that embeds multiple attribute values within a single shell assignment, the JSON content is first assembled as plain text and then the entire assembled string is shlex-quoted once, preventing stray quote characters from corrupting the outer quoting. The 'config' variable is now initialized to an empty dictionary before the conditional assignment, eliminating the NameError.","generatedAt":"2026-09-25T07:48:15.163752Z","generator":"patch2vuln.py","model":"qwen3.8:27b","modelComparison":{"rankings":[{"agreementScore":9,"assumptionCount":6,"confidence":"high","model":"qwen3.8:27b","score":5}],"selectedModel":"qwen3.8:27b","selectionMethod":"deterministic-consensus-v1","selectionNotice":"The selected result is closest to model consensus; this heuristic does not establish factual correctness and human review remains required."},"patchSha256":"9c34349775d058188a7b9a4d44ff873fd285faf0ddda00b46aadbaa72f3b4e6e","patchSummary":"Added 'import shlex' at the top of the module. Replaced direct .format() interpolation of config values (fmc_ip_addr, fmc_login, fmc_pass, domain_id, acpolicy_id) with shlex.quote()-wrapped values. Refactored the BLOCK_JSON_TMPL to separate the JSON content template (BLOCK_JSON_CONTENT_TMPL) from the shell assignment template; the JSON content is formatted first with raw attribute values, then the resulting string is passed through shlex.quote() before being substituted into the shell assignment. Initialized 'config = {}' before the 'if \"config\" in request:' block to prevent NameError.","patchTruncated":false,"patches":[{"commit":"625b54908efbd6acc8343aa3370d401dd370e748","patchSha256":"9c34349775d058188a7b9a4d44ff873fd285faf0ddda00b46aadbaa72f3b4e6e","source":"https://github.com/elhoim/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748.patch","sourceUrl":"https://github.com/elhoim/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748.patch","subject":"fix: [cisco_firesight_manager_ACL_rule_export] shell-escape"}],"source":"https://github.com/elhoim/misp-modules/commit/625b54908efbd6acc8343aa3370d401dd370e748.patch","subject":"fix: [cisco_firesight_manager_ACL_rule_export] shell-escape","weaknessRationale":[{"cweId":"CWE-78","rationale":"The module constructs a shell script by interpolating untrusted values (MISP attribute values, configuration fields) into single-quoted shell strings without escaping. A single-quote character in any interpolated value breaks the quoting and allows arbitrary shell command injection. This is a textbook command injection via insufficient output encoding in a generated shell script."}]}}},"recordType":"advisory","vulnId":"gcve-1-2026-20190"}],"x_generator":{"engine":"Vulnogram 0.2.0"}}},"cveMetadata":{"assignerOrgId":"5a6e4751-2f3f-4070-9419-94fb35b644e8","assignerShortName":"CIRCL","cveId":"CVE-2026-97863","datePublished":"2026-09-25T08:03:24.441Z","dateReserved":"2026-09-25T08:02:32.714Z","dateUpdated":"2026-09-25T09:50:00.869Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-09-25 09:17:08","lastModifiedDate":"2026-09-25 10:17:08","problem_types":["CWE-78","CWE-78 CWE-78 Improper Neutralization of Special Elements used in a Command (\"Command Injection\")"],"metrics":{"cvssMetricV40":[{"source":"5a6e4751-2f3f-4070-9419-94fb35b644e8","type":"Secondary","cvssData":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":6.3,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"LOW","userInteraction":"ACTIVE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"HIGH","subIntegrityImpact":"HIGH","subAvailabilityImpact":"HIGH","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"97863","Ordinal":"1","Title":"misp-modules: Shell Command Injection in MISP cisco_firesight_ma","CVE":"CVE-2026-97863","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"97863","Ordinal":"1","NoteData":"The cisco_firesight_manager_ACL_rule_export module in misp-modules generates a shell script (.sh) that authenticates to and calls the Cisco fireSIGHT Manager API. The module interpolates configuration values (IP address, login, password, domain ID, policy ID) and MISP attribute values (destination IPs, URLs, event info comments) directly into single-quoted shell string assignments without any escaping or sanitization. Because the values are placed inside single-quoted shell strings, any value containing a single-quote character (e.g., a crafted ip-dst or url attribute value submitted to MISP) breaks out of the quoting context, allowing an attacker to inject arbitrary shell commands into the exported script. A security analyst who subsequently executes the generated .sh file unmodified would run the injected commands with their own privileges, potentially exposing fireSIGHT Manager credentials, modifying ACL rules, or compromising the analyst workstation. Additionally, the module contained a secondary defect where the variable 'config' was only assigned inside a conditional block but referenced unconditionally afterward, causing a NameError (denial of service) when the request payload lacked a 'config' key. The vulnerability requires the attacker to have the ability to submit MISP events or attributes containing a single-quote character and the victim to execute the exported script. No authentication bypass is required beyond standard MISP event-submission privileges.","Type":"Description","Title":"misp-modules: Shell Command Injection in MISP cisco_firesight_ma"}]}}}