← Back to Feed CACHED · 2026-07-01 01:10:13 · CACHE_KEY CVE-2025-32050
CVE-2025-32050 · CWE-127 · Disclosed 2025-04-03

Libsoup: integer overflow in append_param_quoted

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A math mistake in libsoup's quoted-string helper that crashes the parser but doesn't hand attackers the keys

libsoup is the HTTP client/server library GNOME ships with — used by Evolution, gnome-online-accounts, geary, GStreamer's souphttpsrc, and various embedded HTTP consumers on Linux. In the append_param_quoted() helper (which formats key="value" parameters for headers like Content-Disposition), an integer overflow in length arithmetic produces a buffer under-read. The immediate consequence is a crash or a small out-of-bounds memory read — availability impact, no code execution, no controllable memory disclosure per the CVSS vector. Affected versions span libsoup 2.x and 3.x prior to the April 2025 backport wave; RHEL fixes shipped in RHSA-2025:4560 / RHSA-2025:4568 / RHSA-2025:8292 and equivalent Debian/Ubuntu/SUSE updates.

Red Hat's MEDIUM (5.9) is if anything *generous* for this bug. The CVSS vector is AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H — network reachable but high attack complexity, and the sole impact is availability. There is no path to RCE, no confirmed info-leak primitive shown in the advisory, and the affected function is only reached when the application feeds attacker-controlled strings into libsoup's parameter serializer. In practical enterprise fleets — where libsoup is *consuming* HTTP responses from services the user chose to visit — the reachable path is client-side and self-inflicted.

"Availability-only DoS in an HTTP client library. Vendor's MEDIUM already generous — high AC + no integrity/confidentiality impact = backlog work."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Attacker stands up a hostile HTTP endpoint

The attacker hosts a web server that returns crafted HTTP headers (e.g. Content-Disposition or another header libsoup parses with quoted parameters) containing pathological length values designed to trip the integer overflow in append_param_quoted(). Tooling: any HTTP fuzzer — boofuzz, radamsa, or a hand-rolled Python http.server. No public weaponized PoC repo is currently indexed for this specific CVE.
Conditions required:
  • Attacker controls a network-reachable HTTP endpoint the victim will contact
  • Victim application uses libsoup to parse the response
Where this breaks in practice:
  • Requires the victim client to actively fetch attacker content — no unsolicited server-side reachability
  • Header parsing in libsoup on the client side is the typical trigger surface, not a listener
Detection/coverage: No dedicated Suricata/Snort signature; generic malformed-header rules may catch some payloads
STEP 02

Victim GNOME/Linux client fetches the malicious response

A user opens a link, an Evolution account polls a hostile IMAP-over-HTTP shim, gnome-online-accounts refreshes an OAuth resource, or a GStreamer pipeline via souphttpsrc pulls a media manifest from the attacker. libsoup ingests the response headers.
Conditions required:
  • User interaction OR scheduled polling of attacker-influenced URL
  • Vulnerable libsoup version linked into the consuming binary
Where this breaks in practice:
  • Most enterprise Linux fleets do not run GNOME on servers; libsoup exposure is largely on developer workstations and thin clients
  • Corporate proxies + TLS inspection frequently normalize or strip malformed headers
Detection/coverage: EDR crash telemetry (systemd-coredump / abrt) picks up the segfault after the fact
STEP 03

Integer overflow triggers buffer under-read

append_param_quoted() miscalculates a size and reads before the intended buffer origin. The process either segfaults immediately or accesses uninitialized adjacent memory — the CVSS C:N says no confirmed confidentiality leak surfaces to the attacker.
Conditions required:
  • Crafted header reaches the vulnerable function without upstream sanitization
Where this breaks in practice:
  • glibc heap hardening / MALLOC_CHECK_ / GLIBC_TUNABLES can trap the under-read
  • ASan builds catch it in dev; production builds simply crash
Detection/coverage: Coredump analysis flags libsoup.so in the crash frame
STEP 04

Impact: application crash (denial of service)

The consuming application — email client, media player, HTTP consumer daemon — crashes. If systemd restarts it, the attacker can loop the crash for sustained DoS of that one desktop-side service. There is no lateral movement, no privilege gain, no data exfiltration path documented.
Conditions required:
  • No supervisor throttling on restart loops
Where this breaks in practice:
  • Blast radius is one process on one endpoint; no fleet-wide amplifier
  • Users notice and close the offending tab / disconnect the account
Detection/coverage: Repeated SIGSEGV for the same binary in journald is trivially alertable
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. Not in CISA KEV. No campaign attribution.
Public PoCNo weaponized public PoC. Bug reproducers exist in the GNOME libsoup bug tracker and Red Hat Bugzilla 2357067.
EPSS0.665% — low exploitation likelihood, consistent with an availability-only client-side bug
KEV statusNot listed
CVSS vectorAV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H — network vector but high complexity, impact strictly availability
Affected versionslibsoup 2.x and 3.x prior to the April 2025 fix wave (exact upstream commit range not enumerated in GHSA-99xf-gcww-2c64)
Fixed versions / backportsRHSA-2025:4560, RHSA-2025:4568, RHSA-2025:8292; Debian/Ubuntu/SUSE equivalents; IBM Power HMC bulletin covers appliance path
Internet exposureNot a listener — no Shodan/Censys signal is meaningful. libsoup is a client-side library in the vast majority of deployments.
Disclosure date2025-04-03
ReporterGNOME libsoup maintainers / Red Hat Product Security triage
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.5/10)

Downgraded to LOW because the single decisive factor is impact ceiling: availability-only with C:N/I:N — no RCE, no confirmed info leak, and no confirmed high-value role where a libsoup crash produces fleet-scale consequences. High attack complexity and client-side-only reachability compound the case.

HIGH Impact ceiling (DoS only per CVSS + advisory)
HIGH Client-side reachability profile
MEDIUM Precise affected version range — GHSA left both fields Unknown

Why this verdict

  • Impact ceiling is availability. C:N/I:N/A:H — no code execution, no data disclosure documented. The worst realistic outcome is a crashed Evolution or GStreamer process.
  • High attack complexity + user-initiated fetch. libsoup is a client library; the victim has to reach out to attacker-controlled content. This isn't a listener you scan for on the edge.
  • Friction audit: (a) attacker needs a hostile endpoint the victim contacts — post-phish or watering-hole positioning; (b) proxies/TLSI often normalize headers; (c) heap hardening frequently traps the under-read into a clean crash.
  • Role multiplier — workstation: crash of one GNOME app. Local nuisance. No lateral value.
  • Role multiplier — server/appliance (e.g., IBM Power HMC): libsoup is present but the exposed surface is management UI, not an unauthenticated public fetch loop. Chain still ends in DoS of the mgmt component, not fleet compromise.
  • Role multiplier — high-value roles (DC, hypervisor, PAM, CI/CD): libsoup is not the canonical HTTP stack for any of these. No plausible high-value-role floor triggers.
  • EPSS 0.665% + no KEV + no public weaponized PoC — telemetry confirms the friction audit.

Why not higher?

MEDIUM would require a plausible integrity or confidentiality primitive — neither exists in the advisory. The buffer under-read has not been shown to leak controllable memory back to a remote attacker, and there is no RCE path. A DoS of a desktop-side HTTP consumer does not meet the MEDIUM bar for a fleet of 10,000 hosts.

Why not lower?

Not IGNORE because the fix is trivially available via distro package updates, real Linux workstations do run vulnerable libsoup, and a scriptable client-side crash is still a nuisance surface worth cleaning up during normal patch hygiene. It earns backlog attention, not deprioritization to zero.

05 · Compensating Control

What to do — in priority order.

  1. Ride the normal distro patch cadence — Ensure dnf update libsoup libsoup3 / apt upgrade libsoup2.4-1 libsoup-3.0-0 lands in your monthly Linux workstation baseline. No mitigation SLA applies — remediation target is the standard 365-day window per the noisgate SLA, but there is no reason to defer past the next monthly cycle.
  2. Restart long-lived libsoup consumers after update — Evolution, gnome-online-accounts, and any daemon linking libsoup keep the old .so mapped until restart. A needrestart sweep or a scheduled reboot closes the window on the same day as the package install.
  3. Egress-filter developer/user workstations through inspecting proxy — A TLS-terminating proxy that normalizes response headers strips most malformed Content-Disposition payloads before they reach the client. This is generic hygiene that already covers many similar client-side parser bugs.
  4. Alert on repeated libsoup segfaults in journald — A simple detection: journalctl | grep 'libsoup.*SIGSEGV' piped to your SIEM. Cheap early warning if someone ever weaponizes this into a targeted DoS loop.
What doesn't work
  • Public-facing WAF rules — libsoup is a client library on most fleets; your WAF doesn't sit between it and the attacker's server.
  • Perimeter IDS signatures — the payload is inside TLS to an attacker-controlled endpoint; no inline visibility without full MITM.
  • Disabling libsoup — you can't; too much of the GNOME/Linux desktop stack links it. Patch, don't remove.
06 · Verification

Crowdsourced verification payload.

Run this on each Linux host (workstation or appliance) as a normal user; root only needed if you also want the needrestart check. Example invocation: ./check_libsoup.sh — no arguments. Exits 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_libsoup.sh — CVE-2025-32050 detector
# Compares installed libsoup version(s) against distro fixed versions.
set -u

VULN=0
FOUND=0

check_rpm() {
  command -v rpm >/dev/null || return
  for pkg in libsoup libsoup3; do
    ver=$(rpm -q --qf '%{VERSION}-%{RELEASE}\n' "$pkg" 2>/dev/null | grep -v 'not installed' || true)
    [ -z "$ver" ] && continue
    FOUND=1
    echo "[rpm] $pkg = $ver"
    # RHEL 9 fixed: libsoup-2.72.0-8.el9_5.1 / libsoup3-3.0.7-3.el9_5.1 (approx from RHSA-2025:4560/4568)
    case "$pkg" in
      libsoup)  min='2.72.0-8.el9_5.1' ;;
      libsoup3) min='3.0.7-3.el9_5.1'  ;;
    esac
    if ! rpm --quiet -q "$pkg" || [ "$(printf '%s\n%s\n' "$min" "$ver" | sort -V | head -1)" != "$min" ]; then
      # installed < min
      if [ "$(printf '%s\n%s\n' "$ver" "$min" | sort -V | head -1)" = "$ver" ] && [ "$ver" != "$min" ]; then
        echo "  -> VULNERABLE (need >= $min)"
        VULN=1
      else
        echo "  -> patched"
      fi
    fi
  done
}

check_dpkg() {
  command -v dpkg-query >/dev/null || return
  for pkg in libsoup2.4-1 libsoup-3.0-0; do
    ver=$(dpkg-query -W -f='${Version}\n' "$pkg" 2>/dev/null || true)
    [ -z "$ver" ] && continue
    FOUND=1
    echo "[dpkg] $pkg = $ver"
    # Consult your distro's security tracker for the exact fixed epoch; flag if pre-2025-04.
    # Heuristic: any libsoup built before 2025-04-03 upstream commit is suspect.
    echo "  -> cross-check against https://security-tracker.debian.org / USN for CVE-2025-32050"
  done
}

check_rpm
check_dpkg

if [ "$FOUND" -eq 0 ]; then
  echo "UNKNOWN — no libsoup package found via rpm/dpkg"
  exit 2
fi

if [ "$VULN" -eq 1 ]; then
  echo "RESULT: VULNERABLE"
  exit 1
fi

echo "RESULT: PATCHED"
exit 0
07 · Bottom Line

If you remember one thing.

TL;DR
Treat CVE-2025-32050 as backlog hygiene, not an incident. Per the noisgate mitigation SLA for LOW verdicts there is *no mitigation SLA* — go straight to the noisgate remediation SLA of ≤ 365 days, which in practice means letting libsoup / libsoup3 ride your next monthly Linux patch cycle on workstations and appliances. Monday morning: confirm RHSA-2025:4560/4568/8292 (or Debian/Ubuntu/SUSE equivalents) are queued in your standard update channel, ensure long-lived libsoup-linked processes (Evolution, gnome-online-accounts, souphttpsrc consumers) restart after the update via needrestart or a reboot, and stop there — do not preempt higher-severity work to chase this.

Sources

  1. GHSA-99xf-gcww-2c64
  2. Red Hat Bugzilla 2357067
  3. RHSA-2025:4560
  4. RHSA-2025:4568
  5. RHSA-2025:8292
  6. IBM Power HMC bulletin
  7. OffSeq Threat Radar summary
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.