~/.login_conf mechanism is flawed
Janne Snabb
snabb at epipe.com
Tue Aug 10 09:33:16 UTC 2010
Hi,
I am posting to a public list as this issue has been already disclosed
publicly on full-disclosure mailing list.
This looks a bit worrying:
http://lists.grok.org.uk/pipermail/full-disclosure/2010-August/075944.html
Looks like the per-user login capability database (~/.login_conf,
~/.login_conf.db) functionality is creating a vulnerability.
What I found especially worrying is that this user-supplied untrustable
file is being parsed and processed by various daemons and other
login mechanisms BEFORE permanently dropping root privileges. Unless
there is a very strong reason, which I am overlooking, to do so, I
find this design very flawed.
It makes the following possible for example:
- System administrator sets a limit (for example datasize) in
/etc/login.conf to a certain class of users, and expects it to
limit those users' use of system resources.
- User creates their own .login_conf where they set the limit
unlimited. This succeeds because the user's .login_conf{,.db}
is processed before dropping privileges.
The problematic execution order is evident by doing for example the
following:
- Enable tracing of sshd and its child processes (as root):
# ktrace -i -p `cat /var/run/sshd.pid`
- Log in as normal user with sshd from other terminal and do nothing
there. Just log out immediately or whatever.
- Stop the trace:
# ktrace -C
- Examine the execution order in the trace (pay attention to process
ID numbers):
# kdump | grep ' sshd ' | grep 'NAMI.*/.login.conf\|set.*uid' | less
I think that the following is needed:
- Change the execution order in several daemons, maybe in PAM?
/usr/bin/login?
- Fix the database handling routines (the problem pointed out in
HI-TECH's e-mail to full-disclosure). Even if the user-specific
login capabilities database is being processed in the user's
context, this might still allow for example breaking to /bin/sh
from an (authorized) ftp-only account.
- Add a flag in global login capababilities database for choosing
whether the per-user login capabilities should be processed and
make it DISABLED default. User-specific .login_conf{,.db} would
be processed only if excplicitly enabled by the administrator.
I think this bug goes in to a class of local privilege escalation.
Am I missing something obvious? What do you think?
--
Janne Snabb / EPIPE Communications
snabb at epipe.com - http://epipe.com/
More information about the freebsd-security
mailing list