Bash: unquoted expression injection

root-me challenge: Bash - unquoted expression injection: Bypass this script’s security to recover the validation password.


./somescript "0 -o foo" makes any condition become

test 1234 -eq 0 -o foo

This is the equivalent of 1234 == 0 || "foo" in other languages, with one irrelevant comparison OR’d with the truth value of the string foo.

All non-empty strings are considered to be true, so this expression is always true.

Counter moves

An unquoted expansion lets input become code. Quoting and validating input are the fixes. The defender’s view is in the blue notes on the application layer as a target.