← Back to Feed CACHED · 2026-06-30 15:10:04 · CACHE_KEY CVE-2025-32912
CVE-2025-32912 · CWE-476 · Disclosed 2025-04-14

A flaw was found in libsoup

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

A GNOME-stack HTTP client that faints when a malicious server forgets to send a Digest nonce

libsoup is the HTTP client library that ships with GNOME and is linked by gnome-online-accounts, evolution, geary, gvfs, tracker-miners, gnome-software, flatpak, and dozens of GTK apps. When the client authenticates with HTTP Digest and the server returns a 401 Unauthorized *without* the mandatory nonce parameter in the WWW-Authenticate header, SoupAuthDigest dereferences a NULL pointer and the calling process aborts. Affected: all libsoup 2.x and 3.x builds prior to 3.6.5 (fix landed upstream April 2025; distro backports followed within days for RHEL 8/9/10, Ubuntu 22.04/24.04, Debian 12, SUSE 15).

Red Hat's 6.5 MEDIUM rating is *defensible only on paper*. AV:N/AC:L/PR:N is technically correct — the trigger is a single malformed HTTP response — but UI:R (the user must initiate the request) plus C:N/I:N (no confidentiality or integrity impact, availability-only) puts the real-world impact at *the affected app crashes once*. The library auto-restarts under most GNOME service supervisors, there is no privilege boundary crossed, and there is no path to RCE. Vendor severity should be LOW; treating this as MEDIUM in your queue wastes cycles that belong on KEV bugs.

"A crash bug in an HTTP client when it talks to a hostile server. Vendor's 6.5 is generous — this is backlog hygiene."
02 · The Attack Path

3 steps from start to impact.

STEP 01

Attacker stands up a malicious HTTP endpoint

Trivial — python3 -m http.server with a 30-line wrapper, or a mitmproxy script that intercepts an outbound request and rewrites the WWW-Authenticate: Digest header to omit nonce="...". Public PoC patterns exist in the Red Hat Bugzilla reproducer attached to BZ#2359356.
Conditions required:
  • Attacker controls a URL the victim libsoup client will contact
  • Server replies with 401 + Digest realm but no nonce
Where this breaks in practice:
  • Most enterprise HTTP traffic from GNOME apps goes to known SaaS endpoints, not attacker-controlled hosts
  • Corporate proxies typically rewrite or strip malformed WWW-Authenticate headers
Detection/coverage: No CVE-specific scanner sig; package version checks (Tenable plugin 201xxx-family for libsoup, Qualys QID 380xxx) detect the *patch level*, not the attack.
STEP 02

Victim app issues a libsoup HTTP request to the endpoint

Requires UI:R per the vector — a user clicks a link in Evolution, opens a malicious calendar feed in gnome-online-accounts, browses a tracker-indexed share, or flatpak installs from a malicious remote. Headless / server roles (RHEL minimal, Ubuntu Server with no GUI) almost never load libsoup at all.
Conditions required:
  • A libsoup-linked process is running on the host
  • That process can be coerced into contacting the attacker URL
Where this breaks in practice:
  • Server-class Linux installs typically have libsoup present but no consumer of it
  • Egress firewall / proxy filtering blocks arbitrary outbound HTTP from servers
Detection/coverage: EDR process-crash telemetry (CrowdStrike ProcessTerminated with SIGSEGV, Elastic process.exit_code ≠ 0) flags the abort but not the cause.
STEP 03

NULL deref → SIGSEGV in the libsoup-linked process

soup_auth_digest_update() dereferences the unset nonce field on the auth struct. Process aborts. That's the end of the chain — no memory disclosure, no control-flow hijack, no privilege escalation. systemd / GNOME session bus respawns the dead service in seconds.
Conditions required:
  • libsoup < 3.6.5 (or unpatched 2.x) in the address space
Where this breaks in practice:
  • Crash is *the impact*; there is no follow-on stage to add friction to
Detection/coverage: Coredump collection (systemd-coredump, abrt) captures the signature; ASAN/UBSAN builds in distro CI caught this pre-disclosure.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. No campaigns, no IR reports, no Mandiant/Unit42/Talos write-ups.
Public PoCReproducer in Red Hat BZ#2359356; no weaponized exploit on GitHub or ExploitDB.
EPSS0.00372 (~0.4%) — bottom percentile. FIRST.org has zero exploitation forecast.
KEV statusNot listed. CISA has not added and is unlikely to — availability-only client crash.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H — network, low complexity, user interaction required, availability-only.
Affected versionslibsoup < 3.6.5; both libsoup-2.4 and libsoup-3.0 source trees affected.
Fixed versionsUpstream 3.6.5; RHEL 9 libsoup-2.72.0-8.el9_4.2, Ubuntu 24.04 libsoup-3.0 3.4.4-5ubuntu0.1, Debian 12 libsoup3 3.2.2-2+deb12u1, SUSE SLE15-SP6 libsoup-2_4-1-2.74.3-150600.x.
ExposureGreyNoise/Shodan irrelevant — this is *client-side*. Server fingerprinting won't tell you anything.
Disclosure2025-04-14 via Red Hat Product Security; coordinated with GNOME maintainers.
ReporterRed Hat Product Security (no individual researcher credited in the GHSA).
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.7/10)

The single decisive factor is impact ceiling: the chain terminates at a SIGSEGV in a client process with no confidentiality or integrity loss, and the affected component runs as the calling user with no privilege boundary to cross. Availability-only client-side DoS on auto-respawning desktop libraries does not warrant MEDIUM queue placement.

HIGH technical impact ceiling (crash-only, no RCE path)
HIGH patch availability across major distros
MEDIUM fleet-wide blast-radius assessment (depends on your GNOME desktop footprint)

Why this verdict

  • Availability-only, client-side: C:N/I:N/A:H plus UI:R means the worst case is the user's mail/calendar/file-manager app dies once and respawns. No data exfil, no code execution, no lateral pivot.
  • Attacker position requirement: the victim must initiate an HTTP request to a server the attacker controls — implies prior phishing, DNS hijack, or MITM position. Each of those is a separate, higher-bar incident your EDR/proxy/email gateway is already paid to stop.
  • Role multiplier: workstation role → single-app crash, user reopens it; headless server role → libsoup is usually present but *unused* (no GUI consumer), so unreachable; CI/build hosts — same. No high-value role (DC, hypervisor, IdP, PAM, backup, kernel-mode agent) links libsoup in its hot path. Floor is LOW.
  • No active exploitation, no KEV, EPSS 0.4% — the threat landscape signal is empty across every datasource that matters.

Why not higher?

MEDIUM would require either a credible RCE path (there isn't one — NULL deref on a read field, no controlled write) or a high-value-role consumer (libsoup is not linked by domain controllers, hypervisors, or kernel-mode agents). Without those, A:H on a respawning desktop process does not clear the MEDIUM bar.

Why not lower?

IGNORE is wrong because patches exist, are free, are already in your distro's normal update channel, and the bug is real (not theoretical). You should fix it during the next scheduled patch cycle — just not ahead of anything that's actually being exploited.

05 · Compensating Control

What to do — in priority order.

  1. Route libsoup-linked apps through an authenticating egress proxy — A forward proxy that rewrites or rejects malformed WWW-Authenticate headers neutralizes the trigger. No mitigation SLA applies (LOW verdict) — implement during the normal proxy policy review cycle.
  2. Enable systemd-coredump retention on desktop fleet — If exploited at scale, you want forensic evidence. Set Storage=external in /etc/systemd/coredump.conf and ship to your SIEM. Do this opportunistically; no deadline.
  3. Track libsoup in your SBOM / package inventory — Many shops underestimate desktop-library exposure. Inventory which hosts have libsoup linked into long-running processes; informs prioritization of *future* libsoup CVEs too.
What doesn't work
  • WAFs / IDS rules — the malicious response comes from an attacker-controlled server *to your client*; your inbound WAF never sees it.
  • Disabling HTTP Digest auth in apps — most GNOME apps don't expose that setting, and the parsing happens before any policy check.
  • Network segmentation alone — doesn't help; the affected library is reaching *out*, not being reached *in*.
06 · Verification

Crowdsourced verification payload.

Run on each Linux host as root (or via your config-management tool — Ansible, Salt, Puppet). Invoke as sudo ./check_cve_2025_32912.sh. No arguments. Exits 0 PATCHED, 1 VULNERABLE, 2 UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2025_32912.sh — libsoup SoupAuthDigest NULL deref
# Usage: sudo ./check_cve_2025_32912.sh
set -u

FIXED_UPSTREAM="3.6.5"
status="UNKNOWN"

vercmp() {
  # returns 0 if $1 >= $2
  [ "$(printf '%s\n%s\n' "$2" "$1" | sort -V | head -n1)" = "$2" ]
}

check_pkg() {
  local pkg="$1" ver=""
  if command -v rpm >/dev/null 2>&1; then
    ver=$(rpm -q --qf '%{VERSION}-%{RELEASE}\n' "$pkg" 2>/dev/null | head -n1)
  elif command -v dpkg-query >/dev/null 2>&1; then
    ver=$(dpkg-query -W -f='${Version}\n' "$pkg" 2>/dev/null | head -n1)
  fi
  echo "$ver"
}

found=0
for pkg in libsoup-3.0-0 libsoup2.4-1 libsoup libsoup-2_4-1 libsoup-3_0-0; do
  v=$(check_pkg "$pkg")
  [ -z "$v" ] && continue
  found=1
  echo "Found $pkg version $v"
  base=$(echo "$v" | sed -E 's/[-+~].*//')
  if vercmp "$base" "$FIXED_UPSTREAM"; then
    status="PATCHED"
  else
    # distro backport check: presence of patched release tag
    if echo "$v" | grep -Eq 'el9_4|el8_10|ubuntu0\.1|deb12u1|150600'; then
      status="PATCHED"
    else
      status="VULNERABLE"
      break
    fi
  fi
done

if [ "$found" -eq 0 ]; then
  echo "libsoup not installed — not vulnerable (no attack surface)."
  echo "PATCHED"
  exit 0
fi

echo "$status"
case "$status" in
  PATCHED)    exit 0 ;;
  VULNERABLE) exit 1 ;;
  *)          exit 2 ;;
esac
07 · Bottom Line

If you remember one thing.

TL;DR
This is a LOW — drop it from the urgent queue. Per the noisgate mitigation SLA, LOW carries no mitigation deadline, so skip the compensating-control sprint entirely; per the noisgate remediation SLA, LOW is backlog hygiene with no fixed deadline — let libsoup roll forward in your next scheduled distro patch cycle (typically your monthly Ubuntu/RHEL apt upgrade / dnf update window). Monday morning, do *nothing CVE-specific*: confirm your patch pipeline is healthy, and move on to KEV-listed items. Verify with the script above after your next normal update cycle.

Sources

  1. Red Hat Bugzilla 2359356
  2. GitHub Security Advisory GHSA-hhmv-6rqc-qrc8
  3. Ubuntu Security Notice — CVE-2025-32912
  4. SUSE CVE-2025-32912
  5. Snyk libsoup advisory
  6. Amazon Linux ALAS
  7. OSV.dev record
  8. Rapid7 vulnerability DB
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.