☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-46330

CVE-2025-46330 Supply Chain Attack in Snowflake
📅 PUBLISHED: 2025-04-29 04:34 UTC 🔄 UPDATED: 2026-09-23 20:36 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.16%
👁️
0.16% probability
4.1× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
3.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-46330 is a low-severity (CVSS 3.3) vulnerability in the Snowflake Connector for C/C++ (libsnowflakeclient). The flaw causes the client to incorrectly treat malformed requests that result in an HTTP 400 status code as retryable. This leads to the application hanging until the maximum number of retries (SF_CON_MAX_RETRY) is exhausted, effectively creating a denial-of-service condition. The vulnerability affects versions from 0.5.0 up to (but not including) 2.2.0. The patch in version 2.2.0 ensures that HTTP 400 responses are no longer retried.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability affects the libsnowflakeclient library, which is a C/C++ connector for Snowflake. It is distributed as a source package and via package managers. Users should verify they are using version 2.2.0 or later to mitigate this issue.

CVSS Breakdown & Threat Level

  • CVSS Score: 3.3 (Low)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
  • Attack Vector (AV): Network (N) – The attack can be launched remotely.
  • Attack Complexity (AC): Low (L) – No special conditions are required.
  • Privileges Required (PR): None (N) – No authentication needed.
  • User Interaction (UI): None (N) – No user action required.
  • Scope (S): Unchanged (U) – The impact is confined to the vulnerable component.
  • Confidentiality (C): None (N) – No data exposure.
  • Integrity (I): None (N) – No data modification.
  • Availability (A): Low (L) – The application may hang, causing a denial of service.

Threat Level: Low. The vulnerability only affects availability and requires the attacker to send a malformed request. However, in automated environments, this could be exploited to cause repeated service disruptions.

Deep Dive & Mechanics

The libsnowflakeclient library implements retry logic for HTTP requests that fail with certain status codes. The flaw is in the retry decision logic: HTTP 400 (Bad Request) responses are incorrectly classified as retryable. When a malformed request is sent to the Snowflake service, the server responds with a 400 status. The client then retries the same malformed request repeatedly, up to the SF_CON_MAX_RETRY limit. This causes the application to hang for the duration of all retries, effectively blocking the calling thread.

The root cause is a missing or incorrect check in the retry handler. The code likely treats any 4xx or 5xx status as retryable, but 400 specifically indicates a client error that will never succeed on retry. The patch in version 2.2.0 adds a condition to exclude 400 from the retryable status codes.

Vulnerable vs. Patched Code

Vulnerable Code (Conceptual):

// In retry logic function
if (status_code >= 400 && status_code < 600) {
    // Retry the request
    retry_count++;
    continue;
}

Patched Code (Conceptual):

// In retry logic function
if (status_code >= 500 && status_code < 600) {
    // Retry the request (server errors are retryable)
    retry_count++;
    continue;
} else if (status_code == 429) {
    // Rate limit - retry after backoff
    retry_count++;
    continue;
}
// For 400 and other 4xx, do not retry

The patch ensures that only server-side errors (5xx) and rate-limiting (429) are retried, while client errors (4xx) are not.

Exploitation & Lab Setup

Red Team (Exploitation)

  1. Setup: Deploy a vulnerable version of libsnowflakeclient (e.g., 2.1.0) in a test environment. Ensure the application connects to a Snowflake service (real or mock).
  2. Craft Malformed Request: Send a request that triggers an HTTP 400 response. For example, send a query with invalid syntax or missing required parameters.
  3. Trigger: The client will retry the request up to SF_CON_MAX_RETRY times (default is typically 7). This will cause the application to hang for the duration of all retries.
  4. Impact: The application becomes unresponsive, leading to a denial of service.

Example (using curl to simulate):

# Send a malformed request to the Snowflake endpoint
curl -X POST "https://account.snowflakecomputing.com/session/v1/login-request" \
  -H "Content-Type: application/json" \
  -d '{"invalid": "data"}'

Blue Team (Detection & Mitigation)

  1. Detection: Monitor for repeated HTTP 400 responses from Snowflake endpoints. A sudden spike in 400 responses from a single client may indicate exploitation.
  2. Mitigation: Upgrade to libsnowflakeclient version 2.2.0 or later. If upgrade is not immediately possible, implement a network-level rule to block or rate-limit requests that generate 400 responses.
  3. Hunting: Search logs for patterns of multiple 400 responses within a short time window.

Indicators of Compromise (IOCs)

  • Network: Repeated HTTP 400 responses from Snowflake endpoints (e.g., *.snowflakecomputing.com).
  • Logs: Application logs showing multiple retry attempts for the same request with HTTP 400 status.
  • Behavior: Application hangs or becomes unresponsive when processing certain requests.

Detection Engineering

YARA Rule

rule CVE_2025_46330_RetryLoop {
    meta:
        description = "Detects libsnowflakeclient retry loop for HTTP 400 responses"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-46330"
    strings:
        $retry = "SF_CON_MAX_RETRY" nocase
        $http400 = "HTTP/1.1 400" nocase
        $retry_func = "retry_request" nocase
    condition:
        $retry and $http400 and $retry_func
}

Sigma Rule

title: CVE-2025-46330 - libsnowflakeclient Retry Loop
id: 8a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects repeated HTTP 400 responses from Snowflake endpoints indicating a retry loop.
author: Valters IT
date: 2025-04-10
logsource:
    category: application
    product: libsnowflakeclient
detection:
    selection:
        http_response_code: 400
        retry_count|gte: 3
    condition: selection
falsepositives:
    - Legitimate malformed requests that are retried due to network issues
level: medium

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-46330 - libsnowflakeclient Retry Loop"; flow:to_server; content:"HTTP/1.1 400"; http_response_line; threshold:type both, track by_src, count 5, seconds 60; sid:1000001; rev:1;)

Remediation & Mitigation

  1. Immediate: Upgrade libsnowflakeclient to version 2.2.0 or later.
  2. Workaround: If upgrade is not possible, implement a network-level rule to drop or rate-limit requests that generate HTTP 400 responses from Snowflake endpoints.
  3. Monitoring: Enable logging for HTTP response codes and set up alerts for repeated 400 responses.
  4. Validation: Ensure that all requests to Snowflake are properly validated before sending to avoid malformed data.

Valters IT
DevSecOps & Cyber Threat Intelligence Expert

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-46330/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.