CVE-2026-84828: Pcs: pcs: non-root haclient users can read arbitrary files via pcs host auth --token
A flaw was found in PCS (Pacemaker Configuration System). A local attacker with membership in the 'haclient' group can exploit the 'pcs host auth --token' command to read the contents of arbitrary files on the filesystem, provided the files are shorter than 256 bytes. The file contents are read with root privileges by the pcsd daemon and can be exfiltrated by the attacker through subsequent cluster node communication. This allows disclosure of sensitive data such as API keys, tokens, or configuration secrets that would otherwise be inaccessible to the attacker.
Other sources
PCS (Pacemaker Configuration System) has an arbitrary file read vulnerability in the pcs host auth --token <path> command path. When a non-root user in the 'haclient' group runs this command, the nonrootrun() function in pcs/app.py forwards it to the locally running pcsd daemon via HTTP POST to /runpcs. The pcsd daemon (running as root) matches the command against its allowedcommands list in pcsd/pcsd.rb (['host', 'auth', '...']) with no restriction on --token, and re-executes PCS as root. This causes utils.gettokenfromfile() in pcs/utils.py to open and read the attacker-specified file path with root privileges, reading up to 256 bytes. The file contents are base64-encoded and stored as a token in the known-hosts configuration file. The attacker can exfiltrate the file contents by triggering node communication (e.g., pcs pcsd status) and intercepting the HTTP Cookie header containing the base64-encoded token.
Affected: PCS versions from 0.10.8 onwards (introduced in commit 9178b78d11baa70e700a5c0d9fc1c17f27d452fa). RHEL 8.4+, RHEL 9.0+, and RHEL 10.0+ ship affected PCS versions.
Fix: Upstream patch attached to PSIRTSUPT-22935 (commit b41eaf3c6e2ecfc575c42442fb02b8ef05b4dd6a, not yet on public GitHub main). Blocks pcs host auth --token for non-root users in both pcs/app.py and pcsd/pcsd.rb.
Reporter: Peter Romancik (PCS upstream developer, Red Hat). PSIRT ticket: PSIRTSUPT-22935
— Red Hat
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
PCS (Pacemaker Configuration System)to a version that resolves this vulnerability.Patch PSIRTSUPT-22935 - Configuration
Update the pcsd allowed_commands handling so the command path does not permit arbitrary file reads via `pcs host auth --token <path>` (per upstream fix attached to PSIRTSUPT-22935, commit b41eaf3c6e2ecfc575c42442fb02b8ef05b4dd6a).
pcsd/pcsd.rb allowed_commands for pcs host auth --token = Restrict 'pcs host auth --token' to prevent non-root haclient users from accessing --token - Configuration
In `_non_root_run()` in pcs/app.py, block the `pcs host auth --token` command so non-root users in the 'haclient' group cannot forward it to pcsd where it would be executed as root (per upstream fix attached to PSIRTSUPT-22935, commit b41eaf3c6e2ecfc575c42442fb02b8ef05b4dd6a).
pcs/app.py _non_root_run forwarding behavior for /run_pcs = Block `pcs host auth --token` forwarding for non-root haclient users - Compensating control
Ensure the `pcs host auth --token` command cannot be executed by non-root users (especially members of the 'haclient' group) so that attackers cannot trigger the root-running file read via `/run_pcs`.
Event History
Frequently Asked Questions
Who can exploit this issue?
A local user who is a member of the haclient group can exploit it. The attack does not require the user to be root, but it relies on access to the locally running pcsd daemon.
What access does an attacker need, and is user interaction required?
The attacker needs local access and haclient group membership, then can invoke pcs host auth --token with a chosen file path. No user interaction is required.
What data can be exposed?
The issue can disclose contents of arbitrary filesystem files that are shorter than 256 bytes and readable by root. This may include API keys, tokens, and configuration secrets otherwise unavailable to the haclient user.
How does the privilege boundary get bypassed?
The non-root PCS invocation is forwarded to pcsd, which runs as root, and pcsd permits the host auth command without restricting the --token path. PCS then opens the attacker-supplied path with root privileges, and the content can be exfiltrated through subsequent cluster-node communication.