Skip to content

Pre-authentication bandwidth amplification via `mod_verto` speed-test frames.

High
andywolk published GHSA-p3gx-p2w7-wp35 Jun 3, 2026

Package

FreeSWITCH (C)

Affected versions

<= 1.11.0

Patched versions

>= 1.11.1

Description

Summary

mod_verto's WebSocket frame loop intercepts a #-prefixed speed-test protocol (#SPU / #SPB / #SPE) before any authentication check. The declared payload size in #SPU was parsed with atoi() and only rejected non-positive values, so an unauthenticated peer could request up to INT_MAX bytes. The server then wrote roughly size * 10 bytes back during the download phase, on the order of 20 GB per request, yielding strong outbound bandwidth amplification from a short request.

Impact

  • A single unauthenticated WebSocket request can compel the server to write tens of gigabytes back to the requester, saturating outbound link capacity and exhausting socket and thread resources.
  • Multiple concurrent requests trivially deny service to legitimate users on the same listener.

Affected configurations

Any deployment with a mod_verto WebSocket listener. Default listener ports are :8081 plaintext and :8082 TLS. The speed-test branch is wired unconditionally into the WebSocket frame loop and is not gated by any profile parameter.

Attack prerequisites

Network reach to the verto WebSocket listener. The speed-test branch runs before the JSON-RPC dispatcher and before the authentication gate, so no credentials, prior login, or user interaction are required. TLS does not mitigate: the speed-test branch runs after transport termination, and the amplified write is emitted on the same connection at server expense.

Workarounds

  • Restrict the verto WebSocket listener to trusted networks (firewall or bind address).
  • Disable mod_verto outright if it is not in use.

Fix

Two changes in the WebSocket frame loop:

  • The #-prefixed branch now requires an authenticated session; unauthenticated peers can no longer reach the speed-test handler.
  • The declared size is parsed with strtol() and capped at 10 MiB, replacing the previous unbounded atoi(). The cap leaves ample headroom over the ~256 KiB used by the stock verto client.

Credit

Adam Bedard, Security Researcher.

Severity

High

CVSS overall score

This score calculates overall vulnerability severity from 0 to 10 and is based on the Common Vulnerability Scoring System (CVSS).
/ 10

CVSS v3 base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

CVSS v3 base metrics

Attack vector: More severe the more the remote (logically and physically) an attacker can be in order to exploit the vulnerability.
Attack complexity: More severe for the least complex attacks.
Privileges required: More severe if no privileges are required.
User interaction: More severe when no user interaction is required.
Scope: More severe when a scope change occurs, e.g. one vulnerable component impacts resources in components beyond its security scope.
Confidentiality: More severe when loss of data confidentiality is highest, measuring the level of data access available to an unauthorized user.
Integrity: More severe when loss of data integrity is the highest, measuring the consequence of data modification possible by an unauthorized user.
Availability: More severe when the loss of impacted component availability is highest.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

CVE ID

CVE-2026-49842

Weaknesses

Uncontrolled Resource Consumption

The product does not properly control the allocation and maintenance of a limited resource. Learn more on MITRE.

Credits