Bug 2501324

Summary: CVE-2026-5674 niri: PipeWire: Sandbox escape and arbitrary code execution via malicious library loading [fedora-all]
Product: [Fedora] Fedora Reporter: Avinash Hanwate <ahanwate>
Component: niriAssignee: Fabio Valentini <decathorpe>
Status: CLOSED CANTFIX QA Contact:
Severity: high Docs Contact:
Priority: high    
Version: rawhideCC: decathorpe, rust-sig
Target Milestone: ---Keywords: Security, SecurityTracking
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard: {"flaws": ["eea8258d-a030-412f-9995-ac853f45b42f"]}
Fixed In Version: Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2026-07-16 15:54:37 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2173769, 2455341    

Description Avinash Hanwate 2026-07-16 13:26:00 UTC
Disclaimer: Community trackers are created by Red Hat Product Security team on a best effort basis. Package maintainers are required to ascertain if the flaw indeed affects their package, before starting the update process.

Summary:
An attacker can exploit PipeWire load library vulnerability to escape sandboxed processes.

Requirements To Exploit:
A Flatpak app (or Docker container, Snap, etc..) with minimal permissions, like:

 --socket=pulseaudio and 

--filesystem=/tmp/share/ (basically write access to any host-visible path to drop the malicious library)

Component Affected:
gitlab.freedesktop.org/pipewire/pipewire 

module-protocol-pulse (pulse-server.c) and module-ladspa-sink (plugin_ladspa.c)

Version Affected:
<= 1.0.5 (likely all versions since the PulseAudio compatibility layer was introduced)

Patch Available:
no

Version Fixed:
N/A

Cvss:
8.8 High

AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H —  Local vector, low complexity, low privileges, no user interaction, changed scope (sandbox escape). High CIA impact on user session. Since a Flatpak are remotely retrieved one could also claim RCE with arbitrary local code execution, but I don’t think it’s a critical class issue.

Impact:
I’d say Important (sandbox escape with minimal permissions)

Steps To Reproduce:
Build a Flatpak app with --socket=pulseaudio and --filesystem=/tmp/wuzzi:create

From the app, write a .so with an ELF constructor to /tmp/wuzzi/payload.so

Connect to the PulseAudio socket, send PA_COMMAND_AUTH with 256 arbitrary bytes

Send PA_COMMAND_LOAD_MODULE module-ladspa-sink plugin=/tmp/wuzzi/payload.so

PipeWire (outside sandbox) calls dlopen() — constructor executes in full user context

Confirmed on Ubuntu 24.04 (x86_64) and Debian 13 (aarch64), PipeWire 1.0.5

Mitigation:
Don’t install Flatpaks with audio, or allow any sandbox’d process to connect to pulseaudio socket.

Recommended mitigations from product side. Any one breaks the attack chain: 

(1) Validate the cookie against ~/.config/pulse/cookie; 

(2) Set pulse.allow-module-loading = false (option exists since May 2024); 

(3) Restrict dlopen() paths in module-ladspa-sink to /usr/lib/ladspa/ and /usr/lib64/ladspa/.

Comment 1 Fabio Valentini 2026-07-16 15:54:37 UTC
niri only links to pipewire and does not include pipewire itself, so this issue needs to be fixed in the pipewire package.