]> git.ipfire.org Git - thirdparty/shadow.git/commit
login_prompt: Do not parse environment variables
authorSamanta Navarro <ferivoz@riseup.net>
Fri, 28 Apr 2023 11:55:14 +0000 (11:55 +0000)
committerSerge Hallyn <serge@hallyn.com>
Wed, 3 May 2023 12:54:28 +0000 (07:54 -0500)
commit8fc8de382ab3f90bc8eb4807a5ee841a6bb5f647
tree1f0074a1df6c36af55c1422b3a0e7f6b83c9d006
parentc0fc4d2122057530b11567503839116dca5998ce
login_prompt: Do not parse environment variables

Parsing optional environment variables after a login name is a feature
which is neither documented nor available in util-linux or busybox
login which are other wide spread login utilities used in Linux
distributions as reference.

Removing this feature resolves two issues:

- A memory leak exists if variables without an equal sign are used,
  because set_env creates copies on its own. This could lead to OOM
  situations in privileged part of login or may lead to heap spraying.
- Environment variables are not reset between login attempts. This
  could lead to additional environment variables set for a user who
  never intended to do so.

Proof of Concept on a system with shadow login without PAM and
util-linux agetty:

1. Provoke an invalid login, e.g. user `noone` and password `invalid`.
   This starts shadow login and subsequent inputs are passed through
   the function login_prompt.
2. Provoke an invalid login with environment variables, e.g.
   user `noone HISTFILE=/tmp/owo` and password `invalid`.
3. Log in correctly with user `root`.

Now you can see with `echo $HISTFILE` that `/tmp/owo` has been set for
the root user.

This requires a malicious failed login attempt and a successful login
within the configured login timeout (default 60 seconds).

Signed-off-by: Samanta Navarro <ferivoz@riseup.net>
libmisc/loginprompt.c