Cloudanix VulnDB

CVE-2025-10148

None

CVSS

—

EPSS

0.5%

Published

Sep 12, 2025

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

A bug in curl's websocket handling lets an attacker trick certain network proxies into storing and later serving harmful web content to other users.

Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Moderate
Impact
Data Tampering
Component
Library
Class
Cryptographic Weakness
Remediation
Upgrade
Effort
Low
Patch risk
Low

What it actually does

Websocket implementation reuses a static 32-bit mask value across all outgoing frames instead of generating a fresh value per frame, violating the masking requirement and enabling a remote peer to predict the masked payload.

Why it matters to the business

Organizations using curl-based clients behind caching proxies risk cache poisoning that can cause malicious or incorrect content to be served to many downstream users, potentially leading to widespread misinformation, malware distribution, or service disruption.

How an attack unfolds

An attacker hosts a malicious websocket server; a victim client connects using the vulnerable curl library; because the mask never changes, the attacker crafts frames whose masked bytes, when observed by an intervening proxy, are interpreted as valid HTTP requests carrying attacker-chosen content; the proxy caches the poisoned response and subsequently serves it to other clients.

How to fix it

Upgrade curl to the version containing commit 11b991232fbcaa88e2b1faecac224416b0001e35 or later; rebuild any statically linked applications and verify the updated library is in use.

How to confirm the fix worked

Confirm the running curl binary or library reports a version built after commit 11b991232fbcaa88e2b1faecac224416b0001e35; inspect source or binary for per-frame mask generation logic in the websocket send path; test by establishing a websocket connection and verifying distinct mask values on successive frames.

Typical attack path

  1. Attacker deploys a websocket endpoint that responds to client connections
  2. Victim application using vulnerable curl initiates a websocket session to the attacker-controlled endpoint
  3. Attacker observes or predicts the static mask value used for the session
  4. Attacker sends specially constructed frames that survive masking and appear as legitimate HTTP to any proxy
  5. Proxy caches the attacker-supplied content under a URL or origin that will be requested by other users
  6. Subsequent clients receive the poisoned cached content from the proxy

How to detect it

Search proxy or web-server access logs for repeated identical responses to websocket-originated requests, unexpected content-type mismatches, or cache hits on URLs that should not be cacheable; monitor for curl processes establishing long-lived websocket connections to untrusted endpoints.

What your security team should do

  • Immediately inventory all systems and containers that ship or link against curl and schedule upgrades to the fixed commit
  • Prioritize patching of any internet-facing or proxy-using clients within the next 30 days given the published date and cache-poisoning impact
  • Add curl version checks to build pipelines and dependency scanners to prevent re-introduction of the vulnerable code
  • Review proxy cache configurations for websocket-related origins and consider shorter TTLs or cache-key hardening until patches are deployed

The record

curl's websocket code did not update the 32 bit mask pattern for each new outgoing frame as the specification says. Instead it used a fixed mask that persisted and was used throughout the entire connection. A predictable mask pattern allows for a malicious server to induce traffic between the two communicating parties that could be interpreted by an involved proxy (configured or transparent) as genuine, real, HTTP traffic with content and thereby poison its cache. That cached poisoned content could then be served to all users of that proxy.

Affected packages

Ecosystem Package Introduced Fixed
Debian:12 curl 0 No fix
Debian:13 curl 0 No fix
Debian:14 curl 0 No fix
Debian:14 curl 0 8.16.0-1
SUSE:Enterprise Storage 7.1 brotli 0 1.0.7-150200.3.5.1
SUSE:Enterprise Storage 7.1 curl 0 8.14.1-150200.4.91.1
SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS curl 0 8.14.1-150200.4.91.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise Installer Updates 15 SP4 curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise Installer Updates 15 SP5 curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise Micro 5.1 brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Micro 5.1 curl 0 8.14.1-150200.4.91.1
SUSE:Linux Enterprise Micro 5.2 brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Micro 5.2 curl 0 8.14.1-150200.4.91.1
SUSE:Linux Enterprise Micro 5.3 brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Micro 5.3 curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise Micro 5.4 brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Micro 5.4 curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise Micro 5.5 brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Micro 5.5 curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 curl 0 8.14.1-150600.4.28.1
SUSE:Linux Enterprise Module for Basesystem 15 SP7 brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Module for Basesystem 15 SP7 curl 0 8.14.1-150600.4.28.1
SUSE:Linux Enterprise Server 15 SP3-LTSS brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Server 15 SP3-LTSS curl 0 8.14.1-150200.4.91.1
SUSE:Linux Enterprise Server 15 SP4-LTSS brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Server 15 SP4-LTSS curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise Server 15 SP5-LTSS brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Server 15 SP5-LTSS curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP3 brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP3 curl 0 8.14.1-150200.4.91.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP4 brotli 0 1.0.7-150200.3.5.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP4 curl 0 8.14.1-150400.5.69.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP5 brotli 0 1.0.7-150200.3.5.1
SUSE:Manager Proxy LTS 4.3 brotli 0 1.0.7-150200.3.5.1
SUSE:Manager Proxy LTS 4.3 curl 0 8.14.1-150400.5.69.1
SUSE:Manager Server LTS 4.3 brotli 0 1.0.7-150200.3.5.1
SUSE:Manager Server LTS 4.3 curl 0 8.14.1-150400.5.69.1
openSUSE:Leap 15.6 brotli 0 1.0.7-150200.3.5.1
openSUSE:Leap 15.6 curl 0 8.14.1-150600.4.28.1
openSUSE:Leap 16.0 curl 0 8.14.1-160000.3.1
openSUSE:Tumbleweed curl 0 8.16.0-1.1

Related vulnerabilities