Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to SQLBot datasource API
-
DeliverySubmit crafted multipart parseExcel upload
-
ExploitPath/double-extension write into alembic/versions
-
ExecutionMalicious .py persists despite parse error
-
PersistStartup or migration imports module
-
ImpactModule-level code executes in runtime
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the ability to submit a multipart upload to the POST /api/v1/datasource/parseExcel endpoint (a datasource-management feature, so an authenticated account with datasource access per the vendor's PR:H), and a crafted filename that combines path components with a double extension so the write lands in /opt/sqlbot/app/alembic/versions/ as a Python source file. Critically, code execution is DEFERRED: it only occurs when SQLBot is subsequently restarted or an Alembic migration is processed, so successful exploitation depends on that operational event happening (reflected as UI:P/AC:H/AT:P). The endpoint returns an error after the write due to spreadsheet parse failure, but the planted file remains - so a failed API response does NOT mean failed exploitation. Limiting factors: authenticated/privileged access, the double-extension and path manipulation must survive processing, and a startup/migration trigger is needed. Fixed in 1.9.0, which strips path components from the filename. |
| Impact | This is a genuine remote-code-execution vulnerability dressed as a path-traversal (CWE-22) issue: the primitive is arbitrary file write into /opt/sqlbot/app/alembic/versions/, but the payoff is module-level Python execution when Alembic imports the planted file at the next SQLBot startup or migration. The vendor CVSS 4.0 vector (AV:N/AC:H/AT:P/PR:H/UI:P, VC:H/VI:H/VA:H = 7.3) already tempers the raw impact with high complexity, a present attack requirement, high privileges, and passive user interaction - and those brakes are real. Exploitation is not fire-and-forget: it depends on the double-extension trick surviving parse, the write landing in the versions directory, and then a deferred trigger (restart or migration run by an operator) to actually execute. No EPSS score, no CISA KEV listing, and no public POC are present in the supplied data, so there is no public exploit identified at time of analysis and no evidence of active exploitation. Net: a high-impact, RCE-capable flaw whose real-world urgency is moderated by authentication, complexity, and the need for a deferred execution event - a patch-promptly issue rather than a drop-everything emergency, especially given the product's limited deployment footprint. |
| Exploit ScenarioDerived | An authenticated user with access to the datasource feature submits a crafted multipart upload to POST /api/v1/datasource/parseExcel whose filename abuses path components and a double extension, causing the backend to write attacker-controlled content into /opt/sqlbot/app/alembic/versions/ as a .py file - even though spreadsheet parsing then fails and the endpoint returns an error. The planted module persists on disk; at the next SQLBot startup or Alembic migration run, the module is imported and its top-level statements execute in the application runtime, yielding code execution. No public proof-of-concept is identified in the available data. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 17, 2026
Authenticated remote code execution in SQLBot (dataease/SQLBot) versions prior to 1.9.0 lets an attacker with datasource-management privileges plant an arbitrary Python module inside the application's Alembic migration directory by abusing attacker-controlled multipart filenames on the POST /api/v1/datasource/parseExcel endpoint, a technique that masquerades as a CWE-22 path-traversal issue but yields module-level code execution on the next SQLBot startup or migration run. Exploitation is not immediate: the upload is written to disk before spreadsheet parsing and validation complete, so the endpoint can return a parse error while the planted file survives, and code execution is deferred until Alembic imports the module (independent assessment scores CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H). Vendor-released patch: 1.9.0; no public exploit identified at time of analysis, though the upstream advisory and fix commits are public.
RemediationAI
Upgrade SQLBot to version 1.9.0 or later, which is the vendor-released patch for this issue (see https://github.com/dataease/SQLBot/releases/tag/v1.9.0 and advisory GHSA-wxv4-pw5w-wx79); the fix commits 4bfd0f49e8cd3df8540dd9d51d40d0e056eeeec4 and 92c5aea70b2eba9c1f429017639017041556843b sanitize the uploaded filename by stripping path components. If immediate upgrade is not possible, compensating controls must target the write primitive rather than a stable exploit: mount /opt/sqlbot/app/alembic/versions/ read-only or remove write permission for the SQLBot runtime user, with the trade-off that Alembic autogenerate/migration-file creation performed inside the container will fail (normal startup migrations that read existing revisions still work), and restrict access to POST /api/v1/datasource/parseExcel to the smallest set of trusted accounts, since the endpoint is a privileged datasource-management feature. Additionally, have the reverse proxy or gateway reject multipart filenames containing path separators, '..', or double extensions, and alert on unexpected .py files appearing under alembic/versions or on SQLBot startup importing unfamiliar revision modules; note that a failed parseExcel response with a spreadsheet parse error does not indicate the write failed, so log retention around that endpoint should be extended. Because execution is deferred until the next restart or migration, blocking restarts is not a viable mitigation and may cause the planted file to execute later under a less observable condition.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
SQLBot is an LLM/RAG-based Text-to-SQL system whose backend is a Python/FastAPI application, with Alembic managing database schema revisions from the directory /opt/sqlbot/app/alembic/versions/. The vulnerable handler is parse_excel in backend/apps/datasource/api/datasource.py, which handled an uploaded multipart file by deriving the on-disk name directly from file.filename using split('.') on the first and last components and appending a truncated SHA-256/UUID token. Because no path-component stripping occurred, the attacker-controlled filename could carry traversal segments (CWE-22), and because the content was persisted before the spreadsheet was parsed and validated, a malformed payload produced an error response after the write had already landed. By chaining a traversal path with a double extension, the attacker could force a file ending in .py into the Alembic versions directory; Alembic imports every module in that directory at startup or during migration processing, so module-level statements in the planted file execute in the SQLBot application runtime. The upstream fix in commit 4bfd0f49e8cd3df8540dd9d51d40d0e056eeeec4 (with related commit 92c5aea70b2eba9c1f429017639017041556843b) sanitizes the filename by applying .split('/')[-1] to the base component, discarding directory components before the name is used on disk.
Know when Python gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:H/AT:P/PR:H/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network-reachable authenticated upload (PR:L; vendor chose PR:H) with high complexity/timing for the double-extension write plus deferred import trigger (AC:H); successful import yields full RCE in the app runtime (C/I/A:H).
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
SQLBot is an intelligent Text-to-SQL system based on large language models and RAG. Prior to 1.9.0, the POST /api/v1/datasource/parseExcel endpoint in backend/apps/datasource/api/datasource.py uses attacker-controlled multipart filename data when selecting where uploaded content is stored, writes the content before spreadsheet parsing and validation finish, and can transform a double-extension filename into a Python source file. An attacker able to submit a crafted multipart upload can use these behaviors to place attacker-controlled content in /opt/sqlbot/app/alembic/versions/ even when a spreadsheet parsing failure after the file write causes the endpoint to return an error. The planted file remains on disk, and subsequent SQLBot startup or migration processing causes Alembic to import the module and execute its module-level statements in the SQLBot application runtime. This issue is fixed in version 1.9.0.
Technical POC Analysis
Evidence note: the supplied advisory (GHSA-wxv4-pw5w-wx79) contains a full raw-HTTP PoC but no patch diff, no commit hash, and lists "No CWEs." The CVE record supplied alongside it maps the issue to…
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
SQLBot versions prior to 1.9.0 carry a high-severity authenticated remote code execution vulnerability that could allow a privileged user to compromise the analytics platform. No public exploit identified at time of analysis, but the impact on confidentiality, integrity, and availability is high, risking sensitive data exposure, service disruption, and regulatory consequences. Leadership should prioritize upgrading to 1.9.0 and tightening access to datasource-management functions.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
EUVD-2026-82561
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB