Fork Bunny
Have a close look at this line of shell command that can be executed on Bash, Zsh, and most POSIX or POSIX-like shells:
: () { : | : & } ; :
Beware! Don't execute it on your system without understanding the consequences completely. If the command above looks puzzling, that is because it is deliberately obfuscated. Let us simplify it.
The :
is a function name. It could very well have
been f
. Let us replace :
with f
and see what the code now looks like.
f () { f | f & } ; f
Now it looks familiar. We have two commands separated by a semicolon. Written in a more legible manner, the code would look like this:
f()
{
f | f &
}
f
It creates a function f
and then executes it. This
function calls itself twice recursively. The control
operator &
executes the recursive calls
to f
asynchronously, i.e., in the background. The
number of instances of the function executing keeps growing
exponentially thereby depleting CPU cycles and memory. The system
is rendered unusable soon.
This type of denial-of-service attack by self-replication is also known as a fork bunny which is a specific type of wabbit. See the following entry in the Jargon File for more information on this: wabbit.