{"api_version":"1","generated_at":"2026-11-09T15:51:07+00:00","cve":"CVE-2026-124850","urls":{"html":"https://cve.report/CVE-2026-124850","api":"https://cve.report/api/cve/CVE-2026-124850.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-124850","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-124850"},"summary":{"title":"SQL Injection in Database Migration via Stored Connector Identifiers in flowintel","description":"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","state":"PUBLISHED","assigner":"CIRCL","published_at":"2026-11-09 15:17:19","updated_at":"2026-11-09 15:17:19"},"problem_types":["CWE-89","CWE-89 CWE-89 Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')"],"metrics":[{"version":"4.0","source":"5a6e4751-2f3f-4070-9419-94fb35b644e8","type":"Secondary","score":"7.3","severity":"HIGH","vector":"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/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:L/AC:H/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":7.3,"baseSeverity":"HIGH","attackVector":"LOCAL","attackComplexity":"HIGH","attackRequirements":"PRESENT","privilegesRequired":"LOW","userInteraction":"NONE","vulnConfidentialityImpact":"HIGH","vulnIntegrityImpact":"HIGH","vulnAvailabilityImpact":"HIGH","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}},{"version":"4.0","source":"CNA","type":"CVSS","score":"7.3","severity":"HIGH","vector":"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","data":{"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"}}],"references":[{"url":"https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d","name":"https://github.com/flowintel/flowintel/commit/061053689dc279a3c2c182f8dc15cd42dc24bd7d","refsource":"5a6e4751-2f3f-4070-9419-94fb35b644e8","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-124850","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-124850","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"flowintel","product":"flowintel","version":"affected 4.0.0 semver","platforms":[]}],"timeline":[],"solutions":[{"source":"CNA","title":"","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 'null', preventing both injection and unintended data corruption.","time":"","lang":"en"}],"workarounds":[],"exploits":[],"credits":[{"source":"CNA","value":"elhoim","lang":"en"},{"source":"CNA","value":"David Cruciani","lang":"en"}],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"cpes":["cpe:2.3:a: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 ('SQL Injection')","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 'null', 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 '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."],"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 'null', 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 'null' 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 'interpolated into SQL, allowing expressions to execute,' 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-09T14:43:27.959Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-11-09 15:17:19","lastModifiedDate":"2026-11-09 15:17:19","problem_types":["CWE-89","CWE-89 CWE-89 Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')"],"metrics":{"cvssMetricV40":[{"source":"5a6e4751-2f3f-4070-9419-94fb35b644e8","type":"Secondary","cvssData":{"version":"4.0","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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":7.3,"baseSeverity":"HIGH","attackVector":"LOCAL","attackComplexity":"HIGH","attackRequirements":"PRESENT","privilegesRequired":"LOW","userInteraction":"NONE","vulnConfidentialityImpact":"HIGH","vulnIntegrityImpact":"HIGH","vulnAvailabilityImpact":"HIGH","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}}],"ssvcV203":[{"source":"5a6e4751-2f3f-4070-9419-94fb35b644e8","ssvcData":{"timestamp":"2026-11-09T14:12:17Z","options":[{"exploitation":"none"},{"automatable":"yes"},{"technicalImpact":"total"}],"role":"Supplier","version":"2.0.3"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"124850","Ordinal":"1","Title":"SQL Injection in Database Migration via Stored Connector Identif","CVE":"CVE-2026-124850","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"124850","Ordinal":"1","NoteData":"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","Type":"Description","Title":"SQL Injection in Database Migration via Stored Connector Identif"}]}}}