|
|
Message-ID: <20220125223307.aygg63t6evzp2t3g@jwilk.net>
Date: Tue, 25 Jan 2022 23:33:07 +0100
From: Jakub Wilk <jwilk@...lk.net>
To: <oss-security@...ts.openwall.com>
Subject: Bad signal handling in shell scripts leading to insecure use of /tmp
I've run into quite a few shell scripts that do something like this:
tmpfile=$(mktemp)
trap 'rm "$tmpfile"' EXIT INT QUIT TERM
do_stuff_with "$tmpfile"
Note that the signal handler doesn't terminate the program. So when the
signal arrives, the program continues whatever it was doing, while the
name of the temporary file is available to other local users. (For the
avoidance of doubt: the attacker can't send the signal themself; they
have to wait for the victim to press ^C or so.)
I've reported these bugs so far:
* Debian devscripts:
https://bugs.debian.org/911720
https://bugs.debian.org/911969
* debian-goodies:
https://bugs.debian.org/999899
But a quick grep for "trap" in my /usr/bin/ shows that there's a lot
more code with such buggy signal handlers.
So how to fix these bugs?
1) The most lazy way is to install trap only for EXIT:
trap 'rm "$tmpfile"' EXIT
In bash this seems to do the right thing. In the other shells I tried,
the cleanup code won't be executed when the program is terminated by a
signal, but that's probably not a big deal in most cases.
2) Another possibility to explicitly exit in the signal handler:
trap 'rm "$tmpfile"' EXIT
trap 'exit 1' INT QUIT
But with this approach, the terminating signal will not be reported to
the parent program, and some shells (such as bash) needs this
information to handle ^C and ^\ correctly. See
https://www.cons.org/cracauer/sigint.html for details.
3) Finally, if you're not disheartened with the amount and ugliness of
the required code, you can re-raise the signal from the signal handler:
trap 'rm "$tmpfile"' EXIT
for sig in INT QUIT TERM
do
trap 'rm "$tmpfile" && trap - '$sig' EXIT && kill -s '$sig' $$' $sig
done
--
Jakub Wilk
Powered by blists - more mailing lists
Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.