Bug 2478408 (CVE-2026-84837) - CVE-2026-84837 rpm: Command Injection in `rpmbuild -t*` (`getTarSpec`) via Unescaped Tarball Path
Summary: CVE-2026-84837 rpm: Command Injection in `rpmbuild -t*` (`getTarSpec`) via Un...
Keywords:
Status: NEW
Alias: CVE-2026-84837
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Product Security DevOps Team
QA Contact:
URL:
Whiteboard:
Depends On: 2527528
Blocks:
TreeView+ depends on / blocked
 
Reported: 2026-05-18 03:33 UTC by OSIDB Bzimport
Modified: 2026-09-02 15:14 UTC (History)
3 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Embargoed:


Attachments (Terms of Use)

Description OSIDB Bzimport 2026-05-18 03:33:58 UTC
AI_ONLY_REPORT
package: rpm-4.19.1.1-23.el10
------
Summary: Command Injection in `rpmbuild -t*` (`getTarSpec`) via Unescaped  
Tarball Path: attacker-influenced tarball paths or filenames can inject  
shell syntax into tarbuild command construction and execute unintended  
commands as the build user.
Requirements to exploit: An attacker must be able to cause `rpmbuild -t*`  
to process a tarball whose path or filename contains shell metacharacters.  
This is most relevant to automated build or CI workflows that ingest  
externally supplied artifact names; environments that only build trusted,  
locally named tarballs are not exposed in the same way.
Component affected: `rpm-4.19.1.1-23.el10`,  
`tools/rpmbuild.c:getTarSpec()`, and the `%{uncompress:...}` expansion path  
used by `rpmbuild -t*`
Version affected: `rpm-4.19.1.1-23.el10`, in `rpmbuild -t*` tarbuild  
workflows that process attacker-influenced tarball paths or filenames
Patch available: no released package fix established; proposed patch  
included below
Version fixed: unknown
Upstream coordination: Not notified.
CVSS: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - 7.8 (HIGH)
AV:L - The vulnerable command executes on the local build host when  
`rpmbuild -t*` processes a tarball path or filename.
AC:L - No special race or unusual condition is needed once the attacker  
can influence that path or filename.
PR:N - The flaw itself does not require prior privileges in `rpmbuild`;  
the attack condition is control of the build input name or path.
UI:N - In automated build pipelines, the vulnerable flow can be reached  
non-interactively once the maliciously named artifact is consumed.
S:U - Code execution occurs in the same security scope as the `rpmbuild`  
process.
C:H - Successful injection can expose data available to the build user.
I:H - Successful injection allows arbitrary command execution in the  
build user's context.
A:H - Successful injection can disrupt or destroy the build environment  
or its outputs.
Impact: Moderate. This issue can lead to arbitrary command execution in the  
build user's context, but exploitation depends on a specific tarbuild  
workflow that accepts attacker-influenced tarball paths or filenames. Under  
Red Hat's severity guidance, that makes it less broadly exposed than a  
typical easy code-execution flaw and better aligned with Moderate than  
Important.
Embargo: no
Reason: The issue is real but workflow-dependent, requires attacker  
influence over the tarball path or filename in `rpmbuild -t*`, and does not  
appear to represent an easily wormable or default remote compromise path.
Acknowledgement: Aisle Research
Vulnerability Details: In `rpmbuild -t*` tarbuild modes, `getTarSpec()`  
constructs a shell command string from the tarball path and runs it with  
`popen()`. The tarball path is taken from positional CLI input, and  
`%{uncompress:...}` appends that argument without shell escaping. As a  
result, shell metacharacters in the tarball path or filename can change the  
command executed by the build process.
```c
cmd = rpmExpand("%{uncompress: ", arg, "} | ",
"%{__tar} xOvof - --wildcards ", *spec,
" 2>&1 > ", specFile, NULL);
if (!(fp = popen(cmd, "r"))) {
rpmlog(RPMLOG_ERR, _("Failed to open tar pipe: %m\n"));
}
```
```c
if (*argv[1]) {
expandMacro(mb, "%__rpmuncompress ", 0);
mbAppendStr(mb, argv[1]);
}
```
Based on the available evidence, the practical impact is unintended command  
execution with the privileges of the user or automation account running  
`rpmbuild`. The issue appears confined to tarbuild modes and to  
environments where the tarball path or filename can be attacker-influenced.
Steps to reproduce:
1. Prepare a valid source tarball containing exactly one `.spec` file, for  
example `hello-1.0.tar.gz`.
2. Rename it to include shell syntax: `mv hello-1.0.tar.gz "hello;touch  
/tmp/rpmbuild_injected;#.tar.gz"`
3. Invoke tarbuild mode on the renamed file: `rpmbuild -ta "hello;touch  
/tmp/rpmbuild_injected;#.tar.gz"`
4. Verify the injected side effect: `test -f /tmp/rpmbuild_injected && echo  
INJECTION_CONFIRMED`
Expected result: `/tmp/rpmbuild_injected` is created, showing that shell  
syntax in the tarball path or filename was interpreted before the intended  
tar extraction command completed.
Mitigation: Until a fix is available, avoid running `rpmbuild -t*` on  
tarballs whose path or filename can be influenced by untrusted input. In  
build automation, stage tarballs into a trusted local directory and  
normalize or reject names containing shell metacharacters before invoking  
`rpmbuild`.
Proposed Fix: The smallest targeted mitigation is to shell-escape the  
tarball path, the matched spec name, and the temporary output file before  
building the `popen()` command string. A more robust long-term fix would  
avoid shell command composition entirely and use direct `exec`-style  
argument vectors.
```diff
diff --git a/tools/rpmbuild.c b/tools/rpmbuild.c
@@ -385,9 +385,9 @@ static char * getTarSpec(const char *arg)
      cmd = rpmExpand("%{uncompress: ", arg, "} | ",

                      "%{__tar} xOvof - --wildcards ", *spec,

                      " 2>&1 > ", specFile, NULL);
+       cmd = rpmExpand("%{uncompress:%{shescape:", arg, "}} | ",
+                       "%{__tar} xOvof - --wildcards %{shescape:",  
*spec, "}",
+                       " 2>&1 > %{shescape:", specFile, "}", NULL);
```


------
This report was generated using AI technology. Always review AI-generated  
content prior to use


Note You need to log in before you can comment on or make changes to this bug.