uidswap
Chimento, Douglas
Douglas.Chimento at FMR.COM
Sat May 18 00:26:57 EST 2002
Thanks Markkus.
Please excuse my ignorance , I am not much of a UNIX programmer but I
believe I see a potential issue.
Suppose ssh in NOT installed setuid root. If you take a look at the function
permanently_set_uid() in uidswap.c ( line 146 in 3.1p1 ) I believe these
lines below can fail unexpectedly:
if (setgid(pw->pw_gid) < 0)
fatal("setgid %u: %.100s", (u_int) pw->pw_gid,
strerror(errno));
Here's why , Suppose you "switch" primary group id with the newgrp command.
( For instance:
[doug at host ~]$ id
uid=1065(doug) gid=100(staff)
[doug at host ~]$ newgrp test
[doug at host ~]$ id
uid=1065(doug) gid=1001(test)
[doug at host ~]$
)
Now clearly pw->pw_gid != getgid() and so setgid(pw->pw_gid) will always
fail because the user is no longer a part of pw->pw_gid group. ( I hope
that made sense ).
I think the solution would be to do what is done in the restore_uid()
function ( line 108 in uidswap.c ). That is, check to see if the user is
"privileged".
So we could have this in permanently_set_uid():
{
if (temporarily_use_uid_effective)
fatal("restore_uid: temporarily_use_uid effective");
if (!privileged)
return;
if (setgid(pw->pw_gid) < 0)
fatal("setgid %u: %.100s", (u_int) pw->pw_gid,
strerror(errno));
if (setuid(pw->pw_uid) < 0)
fatal("setuid %u: %.100s", (u_int) pw->pw_uid,
strerror(errno));
}
instead of....
{
if (temporarily_use_uid_effective)
fatal("restore_uid: temporarily_use_uid effective");
if (setgid(pw->pw_gid) < 0)
fatal("setgid %u: %.100s", (u_int) pw->pw_gid,
strerror(errno));
if (setuid(pw->pw_uid) < 0)
fatal("setuid %u: %.100s", (u_int) pw->pw_uid,
strerror(errno));
}
What are your thoughts?
Thanks for your time.
-----Original Message-----
From: Markus Friedl [mailto:markus at openbsd.org]
Sent: Thursday, May 16, 2002 7:18 PM
To: Chimento, Douglas
Cc: openssh-unix-dev at mindrot.org
Subject: Re: uidswap
On Thu, May 16, 2002 at 04:32:11PM -0400, Chimento, Douglas wrote:
> What are the consequnences if you do not install ssh setuid
> root? ( As far I as know no uid swaping occurs )
hostbased authentication won't work.
More information about the openssh-unix-dev
mailing list