mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-09-09 16:01:54 -09:00
Fixes the following vulnerability:
- CVE-2026-24049:
wheel is a command line tool for manipulating Python wheel files, as
defined in PEP 427. In versions 0.40.0 through 0.46.1, the unpack
function is vulnerable to file permission modification through
mishandling of file permissions after extraction. The logic blindly
trusts the filename from the archive header for the chmod operation,
even though the extraction process itself might have sanitized the
path. Attackers can craft a malicious wheel file that, when unpacked,
changes the permissions of critical system files (e.g., /etc/passwd,
SSH keys, config files), allowing for Privilege Escalation or
arbitrary code execution by modifying now-writable scripts. This issue
has been fixed in version 0.46.2.
For more information, see:
- https://www.cve.org/CVERecord?id=CVE-2026-24049
- https://github.com/advisories/GHSA-8rrh-rw8j-w5fx
(cherry picked from commit 635c145c16)
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
36 lines
1.5 KiB
Diff
36 lines
1.5 KiB
Diff
From 7a7d2de96b22a9adf9208afcc9547e1001569fef Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Alex=20Gr=C3=B6nholm?= <alex.gronholm@nextday.fi>
|
|
Date: Thu, 22 Jan 2026 01:41:14 +0200
|
|
Subject: [PATCH] Fixed security issue around wheel unpack (#675)
|
|
|
|
A maliciously crafted wheel could cause the permissions of a file outside the unpack tree to be altered.
|
|
|
|
CVE: CVE-2026-24049
|
|
Upstream: https://github.com/pypa/wheel/commit/7a7d2de96b22a9adf9208afcc9547e1001569fef.patch
|
|
[thomas: change filename, remove tests]
|
|
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
|
---
|
|
src/wheel/cli/unpack.py | 4 ++--
|
|
3 files changed, 27 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/wheel/cli/unpack.py b/src/wheel/cli/unpack.py
|
|
index d48840e6e..83dc7423f 100644
|
|
--- a/src/wheel/cli/unpack.py
|
|
+++ b/src/wheel/cli/unpack.py
|
|
@@ -19,12 +19,12 @@ def unpack(path: str, dest: str = ".") -> None:
|
|
destination = Path(dest) / namever
|
|
print(f"Unpacking to: {destination}...", end="", flush=True)
|
|
for zinfo in wf.filelist:
|
|
- wf.extract(zinfo, destination)
|
|
+ target_path = Path(wf.extract(zinfo, destination))
|
|
|
|
# Set permissions to the same values as they were set in the archive
|
|
# We have to do this manually due to
|
|
# https://github.com/python/cpython/issues/59999
|
|
permissions = zinfo.external_attr >> 16 & 0o777
|
|
- destination.joinpath(zinfo.filename).chmod(permissions)
|
|
+ target_path.chmod(permissions)
|
|
|
|
print("OK")
|
|
|