CVE-2026-15736 Overview
CVE-2026-15736 affects Snowflake SQLAlchemy versions prior to 1.11.0. The library contains three distinct vulnerabilities that enable SQL injection and arbitrary local file disclosure. Attackers can exploit improper handling of user-supplied column identifiers in merge operations, unsafe literal rendering of bound parameters in table creation queries, and improper forwarding of connection configuration parameters. Successful exploitation allows read access to database contents, modification of values within MERGE statements, arbitrary data exfiltration, and disclosure of local files accessible to the application process. The maintainers released 1.11.0 to remediate all three issues, and users must upgrade manually.
Critical Impact
Attackers with low-privilege network access can inject SQL, exfiltrate query results, and force the library to read arbitrary local files and transmit them to attacker-controlled endpoints.
Affected Products
- Snowflake SQLAlchemy versions prior to 1.11.0
- Python applications integrating Snowflake SQLAlchemy for database access
- Deployment environments that accept user-controlled connection parameters
Discovery Timeline
- 2026-07-14 - CVE-2026-15736 published to NVD
- 2026-07-15 - Last updated in NVD database
Technical Details for CVE-2026-15736
Vulnerability Analysis
CVE-2026-15736 bundles three security defects in Snowflake SQLAlchemy. The first is a SQL injection flaw in merge operations. The library trusts attacker-controlled input keys as column identifiers, so a dynamic upsert endpoint that maps request field names to column names propagates injected SQL directly into the generated MERGE statement.
The second flaw affects Snowflake-specific table creation queries. Bound parameters are rendered as literals rather than parameterized values. Any application endpoint that passes user data through the affected query-building API can trigger arbitrary SQL execution within the connection role's scope.
The third flaw involves improper forwarding of connection configuration parameters, categorized under [CWE-73] External Control of File Name or Path. When applications accept user-controlled connection parameters, an attacker can direct the library to read arbitrary local files and transmit their contents to an attacker-controlled endpoint.
Root Cause
The merge injection stems from concatenating request-supplied identifiers into SQL text without an identifier allowlist or safe quoting. The table creation injection stems from inlining bound values into DDL instead of using parameter binding. The file disclosure stems from passing untrusted parameters into connection primitives that can reference local file paths.
Attack Vector
Exploitation occurs over the network with low privileges and no user interaction. An attacker submits crafted request field names, crafted string values, or crafted connection parameters to any application endpoint that forwards them to the vulnerable APIs. The result is SQL injection, data exfiltration through the query response, or outbound transmission of local file contents.
No verified public exploit code is available. See the GitHub Release Notes for maintainer guidance on the affected code paths.
Detection Methods for CVE-2026-15736
Indicators of Compromise
- Outbound network connections from application hosts to unexpected external endpoints coinciding with Snowflake SQLAlchemy activity
- Unusual MERGE statements in Snowflake query history containing unexpected column identifiers or nested subqueries
- DDL activity referencing table properties that embed non-standard string literals sourced from user input
Detection Strategies
- Inventory Python dependencies and flag any snowflake-sqlalchemy version below 1.11.0
- Review application code for endpoints that map request field names to column identifiers passed into merge or upsert helpers
- Audit deployment configuration for user-controllable Snowflake connection parameters, especially fields referencing file paths
Monitoring Recommendations
- Enable Snowflake query history logging and alert on MERGE and CREATE TABLE statements containing anomalous identifiers or literals
- Monitor egress traffic from application servers for connections to domains not on an approved allowlist
- Log all connection strings assembled from user input and alert on file path parameters
How to Mitigate CVE-2026-15736
Immediate Actions Required
- Upgrade Snowflake SQLAlchemy to version 1.11.0 or later across all environments
- Audit application endpoints that forward request data to merge, upsert, or table creation APIs
- Remove or restrict any interfaces that let end users supply raw Snowflake connection parameters
Patch Information
The fix is available in Snowflake SQLAlchemy 1.11.0. Users must manually upgrade — no automatic update path is provided. Refer to the GitHub Release Notes for release details.
Workarounds
- Validate request field names against a strict server-side allowlist before mapping them to column identifiers
- Sanitize and type-check all user input passed into Snowflake-specific DDL builders, rejecting strings containing SQL metacharacters
- Construct Snowflake connection parameters server-side from trusted configuration rather than user-supplied values
- Restrict the database role used by the application to the minimum privileges required for its workload
# Configuration example
pip install --upgrade "snowflake-sqlalchemy>=1.11.0"
pip show snowflake-sqlalchemy | grep -i version
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

