An issue was discovered in disable_priv_mode in shell.c in GNU Bash through
5.0 patch 11. By default, if Bash is run with its effective UID not equal to
its real UID, it will drop privileges by setting its effective UID to its real
UID. However, it does so incorrectly. On Linux and other systems that support
"saved UID" functionality, the saved UID is not dropped. An attacker with
command execution in the shell can use "enable -f" for runtime loading of a
new builtin, which can be a shared object that calls setuid() and therefore
regains privileges. However, binaries running with an effective UID of 0 are
Note I think actual exposure to this should be minor, because setuid bash is a bad idea anyway, and the normal way for a privileged process (sshd, /bin/login, etc.) to launch bash as a user is to fork, drop privs, and then exec. If they do so correctly, bash won't have any privs to misuse; if they do not, that is a bug in them.
There is a patch sitting in bash's devel branch, mixed in with other changes:
The latest release version, 5.0_p11, does not include the fix (despite p11 being released well after that fix was added to devel).
I will submit a PR that includes a trimmed-down version of this patch to include only the relevant fixes.