Hi,
Anmol Bakshi brought the below with original Subject line saying
"BusyBox dpkg applet: OS command injection -> root RCE (CWE-78)" to
linux-distros on July 13. We quickly determined that no privilege
boundary is crossed, so the coordinated disclosure request was
withdrawn. However, we cannot just withdraw something sent to
linux-distros (as long as it wasn't completely off-topic) without also
bringing it to oss-security. In this case, we overlooked that until I
started processing the linux-distros list statistics for July.
I include the linux-distros messages quoted below, sans the originally
attached PDF file (which I didn't even look at).
Alexander
On Mon, Jul 13, 2026 at 08:44:40AM +0530, Anmol Bakshi wrote:
> Proposed coordinated public disclosure: 2026-07-27.
>
> Summary
> -------
>
> OS command injection in BusyBox's dpkg applet gives arbitrary command
> execution as
> the user running dpkg (root in typical use). Present through current BusyBox;
> confirmed on 1.36.1 and 1.37.0.git HEAD.
>
> Vulnerability
> -------------
>
> archival/dpkg.c (~line 1271):
> script_path = xasprintf("/var/lib/dpkg/info/%s.%s", package_name,
> script_type);
> result = access(script_path, F_OK) ? EXIT_SUCCESS : system(script_path);
>
> The Package field from the .deb control file is passed unvalidated into the
> path handed
> to system() (/bin/sh -c). Shell metacharacters in the package name execute as
> command
> separators. The forward-slash filename restriction is bypassed with a
> base64-encoded
> payload the shell decodes at runtime, making injection unrestricted.
>
> Impact
> ------
>
> Arbitrary command execution as uid=0. Demonstrated: /etc/shadow exfiltration
> and an
> outbound network callback from a crafted .deb.
> CVSS 4.0: 9.3 (AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H).
> CWE-78.
>
> Affected scope
> --------------
>
> Any build with CONFIG_DPKG enabled that processes an attacker-supplied .deb.
> The applet
> is enabled in some distro builds (for example Debian's busybox deb config
> enables a
> minimal dpkg). Please assess your own configuration.
>
> Suggested fix
> -------------
>
> 1. Replace system(script_path) with fork()/execl(script_path, script_path,
> (char*)NULL)
> so no shell is invoked.
> 2. Validate package names against ^[a-z0-9][a-z0-9.+-]+$ to match GNU dpkg.
>
> Coordination
> ------------
>
> This is a coordinated disclosure. I am separately notifying Alpine Linux,
> OpenWrt, the
> Yocto Project, and Buildroot (none of which are on this list), all toward the
> same
> public date of 2026-07-27. BusyBox upstream has no working private security
> channel:
> the Bugzilla instance is offline and the security contact bounces. I sent a
> private
> report on 2026-04-21 with no response in ~3 months, so there is no upstream
> fix to
> coordinate. I have an open MITRE request from 2026-04-21 that has not been
> actioned; I
> would prefer a CVE ID be assigned via a CNA on this list. Full report and a
> self-contained reproduction script are attached.
> Please confirm receipt.
>
>
> Regards,
> Anmol Bakshi
> https://anmolbakshi.com
On Mon, Jul 13, 2026 at 08:32:59AM +0200, Solar Designer wrote:
> Hello Anmol,
>
> Thank you for notifying linux-distros.
>
> On Mon, Jul 13, 2026 at 08:44:40AM +0530, Anmol Bakshi wrote:
> > Proposed coordinated public disclosure: 2026-07-27.
>
> I ack that this is a valid public disclosure date per this list's
> policy, but I note it's the latest possible - so please note that no
> extension beyond this date will be possible.
>
> Please make sure you post specifically to the public oss-security list
> when making the issue public.
>
> > Full report and a self-contained reproduction script are attached.
>
> Unfortunately, you sent these pre-encrypted to the list key, whereas the
> list only re-encrypts non-pre-encrypted attachments of full PGP/MIME
> messages as commonly produced by MUAs with PGP support. In fact, I
> think these attachments ended up double-encrypted when you sent the
> message, and only the outer layer got processed by the list software.
> So they arrived to list subscribers still encrypted to the list key as
> you prepared them, rather than re-encrypted to their keys, and thus are
> unreadable to them.
>
> I suggest that you selectively send these to list members who ask, or
> you may resend the reproduction script as a simple attachment (don't
> pre-encrypt, but let the MIME message be encrypted) or in message body.
>
> I doubt the PDF is worth resending, but I don't know what's in it. For
> oss-security, the message size limit (including MIME overhead) is 1 MB,
> so this large PDF wouldn't be suitable for posting to there anyway.
>
> > Please confirm receipt.
>
> Confirmed as above.
>
> > OS command injection in BusyBox's dpkg applet gives arbitrary command
> > execution as
> > the user running dpkg (root in typical use).
>
> I guess package installation via dpkg would invoke scripts found in the
> package as part of intended functionality, so there would be no
> additional risk from your finding - but perhaps there are query-only
> uses where your finding matters? You could want to elaborate on that.
>
> I am not familiar with BusyBox's dpkg.
>
> Replying in plaintext as I didn't bother searching for your public key,
> but I limited the quoting. (And this gets encrypted to list subscribers
> anyway.)
>
> Alexander
On Mon, Jul 13, 2026 at 12:57:10PM +0530, Anmol Bakshi wrote:
> Hi Alexander,
>
> Thanks again for the detailed feedback - you're right, and I'm withdrawing
> this.
>
> To close the loop on the impact question: run_package_script_or_die() is
> only
> reached during install / unpack / configure / remove, i.e. exactly the
> operations
> where a package's maintainer scripts are expected to run as root. BusyBox
> dpkg's
> only read-only operation (-l) doesn't touch that path. So the injected
> command runs
> with the same privilege a normal postinst already would; the unvalidated
> package
> name doesn't cross a boundary that an ordinary malicious maintainer script
> wouldn't.
>
> I also considered the "trojan a real package, keep the same name to slip
> past
> review" angle, but it doesn't change that: dpkg -i on a local file does no
> signature
> or integrity check, so there's no verification for the name injection to
> bypass, and
> the operator has already chosen to run untrusted code as root regardless of
> what the
> scripts contain. No privilege boundary is crossed there either.
>
> So I'm standing down the coordinated-disclosure request and won't pursue a
> CVE on
> this basis - no need for anyone on the list to hold anything for
> 2026-07-27. The one
> thing I still think is worthwhile is a hardening change to BusyBox
> (validate the
> package name as GNU dpkg does, and don't pass the path to a shell); I'll
> take that to
> BusyBox directly as a patch, outside this list.
>
> Thanks for the time, and sorry for the noise.
>
>
> *Regards,*
> *सादर,*
> Anmol Bakshi
On Sat, Aug 22, 2026 at 09:46:57PM +0200, Solar Designer wrote:
> Hi Anmol,
>
> I'm sorry everyone seems to have dropped the ball on this after your
> last message. I understand you may have thought you could simply
> withdraw a report, but others on linux-distros should have realized
> that's not the case.
>
> On Mon, Jul 13, 2026 at 12:57:10PM +0530, Anmol Bakshi wrote:
> > Thanks again for the detailed feedback - you're right, and I'm withdrawing
> > this.
>
> Thanks, but currently you cannot just withdraw a report to linux-distros
> without bringing it to oss-security - all while acknowledging it was
> determined to be a non-security issue. We need this for transparency.
> If the ratio of non-security reports becomes much larger, we'll have to
> reconsider this approach - and announce that publicly - but for now
> that's the approach we use and the oss-security community may expect.
>
> Are you going to bring this to oss-security ASAP? If not, I will.
>
> Alexander