CVE-2026-90954: Busybox: busybox: dpkg-deb extraction-root escape via per-ar-member deferred symlink flush

Published Sep 14, 2026
·
Updated

A flaw was found in BusyBox's dpkg-deb archive extraction. The ar archive handler flushes deferred symlinks after each archive member, unlike the tar, cpio, and unzip handlers which flush once after the last member. A specially crafted .deb archive with two data.tar members can exploit this ordering: the first member declares a symlink pointing to an absolute path (e.g., '/'), which is deferred as unsafe but flushed after the first member. The second member declares a regular file whose path traverses the now-live symlink, resulting in a file being written outside the intended extraction directory. This could allow an attacker to write arbitrary files to arbitrary locations when a user extracts a crafted .deb package.

Other sources

BusyBox provides lightweight Unix utilities as a single binary. A path traversal vulnerability exists in the dpkg-deb extraction path in archival/libarchive/getheaderar.c. The ar container handler flushes deferred symlinks (via createlinksfromlist() at line 133) inside the per-member loop, rather than once after all members are processed. The tar, cpio, and unzip front-ends correctly flush deferred symlinks after the main loop (tar.c:1269, cpio.c:578, unzip.c:1059), but the ar path does not follow this pattern.

The deferred-symlink mechanism (unsafesymlinktarget.c:13) exists to prevent directory traversal: symlinks with absolute targets or '..' components are deferred until after all archive members are extracted, so that no subsequent member can traverse them. By flushing per ar member, the ar path breaks this invariant: a symlink deferred from the first data.tar member is placed on disk before the second data.tar member is parsed.

A crafted .deb containing two uncompressed data.tar ar members can exploit this: the first declares a symlink whose target is the filesystem root, and the second declares a regular file whose path is resolved through that live symlink, writing a file outside the extraction root.

Constraints: only uncompressed data.tar members work (compressed members cause setupunziponfd() to replace srcfd with a pipe, making the subsequent lseek fail). filteracceptlistreassign() does not remove matched entries from the accept list, so duplicate member names are accepted. BBSUIDDROP is set for the dpkg-deb applet, preventing setuid escalation.

The reporter states the bug was introduced by commit 8c24af9dc (2018-05-22), affecting versions 1290 through current master. No fixing commit exists. Reproduced on Fedora busybox-1.37.0-7.fc44, Debian 13, and Ubuntu 24.04 LTS.

Reported by Shubham Raj, Causal Security. PSIRT ticket: PSIRTSUPT-23314.

— Red Hat

Busybox: busybox: dpkg-deb extraction-root escape via per-ar-member deferred symlink flush

— Microsoft

Affected Software

1 affected component
BusyBox BusyBox>=1.29.0

Event History

Sep 14, 2026
Data Sourced
via Red Hat·11:59 AM
DescriptionSeverityAffected Software
Oct 14, 2026
CVE Published
via MITRE·10:00 AM
Data Sourced
via MITRE·10:00 AM
DescriptionSeverityWeakness
Data Sourced
via NVD·10:17 AM
DescriptionSeverityWeakness
Oct 21, 2026
Data Sourced
via Microsoft·08:11 AM
DescriptionSeverityWeakness

Frequently Asked Questions

1

What conditions are required to exploit this issue?

An attacker must convince a user or process to extract a specially crafted .deb archive using BusyBox dpkg-deb. The archive needs two data.tar members: one that creates a deferred symlink to an absolute path and another that writes a file through that symlink.

2

What is the practical impact of a successful exploit?

The crafted archive can cause files to be written outside the intended extraction directory. The description states this can permit arbitrary file writes to arbitrary locations accessible to the extracting user or process.

3

Are other BusyBox archive extraction utilities affected by the same deferred-symlink behavior?

The described ordering issue is specific to the dpkg-deb ar archive handler. BusyBox tar, cpio, and unzip are described as flushing deferred symlinks once after processing all members rather than after each member.

4

How can I identify potentially exposed extraction workflows?

Review systems and automation that use BusyBox dpkg-deb to extract .deb packages, especially where packages originate from untrusted or insufficiently validated sources. The affected code path is in archival/libarchive/get_header_ar.c.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203