Guide to writing secure setuid programs?

Jim Frost madd at bu-cs.BU.EDU
Thu Mar 31 13:10:38 AEST 1988


In article <469 at fornax.UUCP> stevec at fornax.UUCP (Steve Cumming) writes:
>In article <347 at wsccs.UUCP>, terry at wsccs.UUCP (terry) writes:
>> 
>> 	1) if /usr/spool/mail is writeable and on the same device as /etc:
>> 
>> 		$ ln /etc/passwd /usr/spool/mail/fred
>> 		$ echo "sneak::0:1:A hacker:/:/bin/sh" | mail fred
>> 		$ su fred
>> 		#
>
>I tried this out on a Sun running 3.4. It don't work. 
>Mail is evidently smart enough to check for the existence of 
>the addressee, either locally or through the Yellow Pages.

Don't forget that a Sun uses a slightly different environment than
straight UNIX.  Also, user "fred" should be the person who's trying to
do this.  He'll have an /etc/passwd entry.

>I don't see as it matters whether /etc/passwd and the mail
>directory are on the same file system.

He requires two things -- /usr/spool/mail must be writable (usually it
isn't) so that you can create a file (ie /usr/spool/mail/fred) which
is a hard link to /etc/passwd.  They must be on the same file system
because cross-device hard links aren't possible, which is the second
requirement.

Obviously sendmail must be able to write /etc/passwd for this to work.
For many systems, it may well be able to.  Machines which use the smtp
service (tcp port 25, at least on this system) must have sendmail
running root or they will be unable to access the port (as it's <
1024).

This technique won't work on a lot of systems, but I'd suspect that it
would work on many of the smaller ones (the ones with little disk
space and untrained sysadmins, mostly).  Some flaws in this system
include:

	* some systems use a hash table created by vipw to maintain
	  fast /etc/passwd lookups.  If you try this and the system
	  uses a hash table, you're going to get killed the next time
	  the administrator looks at the passwd file, since it'll have
	  your name in it from the mail header.  You won't be able to
	  su because the hash table won't be updated.  You can't
	  update it because you're not root and can't run vipw.  Too
	  bad.
	* some systems don't use /etc/passwd for the real password
	  file.  Sun yellowpages is an example, although /etc/passwd
	  is used locally to that machine.
	* most systems don't put /etc/passwd and /usr/spool/mail on
	  the same device.
	* most systems don't have a public-writable /usr/spool/mail.

All you'd have to do to defend against this method is make
/usr/spool/mail non-publicly writable, which it should be anyway.

Another example of how "innocent" things like links can be used
against you....

jim frost
madd at bu-it.bu.edu



More information about the Comp.unix.wizards mailing list