Bug 2546571 (CVE-2026-18379) - CVE-2026-18379 yggdrasil-worker-package-manager: yggdrasil-worker-package-manager: path traversal via unsanitized repo name in AddRepo/RemoveRepo
Summary: CVE-2026-18379 yggdrasil-worker-package-manager: yggdrasil-worker-package-man...
Keywords:
Status: NEW
Alias: CVE-2026-18379
Deadline: 2026-11-10
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Product Security
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2026-10-06 11:44 UTC by OSIDB Bzimport
Modified: 2026-11-09 01:55 UTC (History)
3 users (show)

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


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2026:96082 0 None None None 2026-11-09 01:55:34 UTC

Description OSIDB Bzimport 2026-10-06 11:44:26 UTC
=AddRepo()= and =RemoveRepo()= (=package_manager_dnf.go:22-37=) build the destination path with =filepath.Join("/etc/yum.repos.d/", canonicalizeRepoName(name, ".repo"))=. =canonicalizeRepoName()= (=util.go:13-15=) only replaces spaces with underscores and appends a =.repo= suffix — it never strips =/= or =..=. Because =filepath.Join= calls =filepath.Clean= internally, a broker-supplied =name= such as =../../etc/cron.d/evil= resolves outside =/etc/yum.repos.d/=, letting =os.WriteFile= write attacker-controlled content to any root-writable path ending in =.repo=, and =RemoveRepo='s =os.Remove= delete any such path. Neither function is gated by the =allowPatterns= allowlist. The worker's systemd unit runs =User=root=.

Comment 1 errata-xmlrpc 2026-11-09 01:55:33 UTC
This issue has been addressed in the following products:

  Red Hat Enterprise Linux 10

Via RHSA-2026:96082 https://access.redhat.com/errata/RHSA-2026:96082


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