Oops. Didn't think it through: the problem is argv[1],
passed as the name of the script being executed, not
argv[0]. Disregard my previous execl(...).
A related problem is the inherent race condition:
If you do
ln -s /bin/setuidscript .
./setuidscript
./setuidscript is opened twice: once when the kernel
reads it and finds #! as magic number and execs the
interpreter, a second time when the interpreter opens
./setuidscript. If you meanwhile run something that
swoops in in the background and replaces ./setuidscript
with malicious instructions for the interpreter, you
win.
I remember managing to do this myself at one point in
the latter part of the 1980s. That was when I fell
out of love with setuid interpreter scripts.
It looks like we didn't disable the danger in the
Research kernel, though. I don't remember why not.
Norman Wilson
Toronto ON