taint mode umgehen?

17/02/2010 - 09:51 von Ulli Horlacher | Report spam
Ich hab ein suid-Perlprogramm, das irgendwann mal eine user-shell mit
normalen Rechten aufmachen soll, leider scheitert das:

framstag@moep:~: usbmount
mount /dev/sdc1 (WD:3200BMV_External ext3)?
spawning sub-process for mounting
($<,$() = (1001,100 119 117 115 113 112 104 100 46 44 30 29 25 24 20 4)
($>,$)) = (1001,100 119 117 115 113 112 104 100 46 44 30 29 25 24 20 4)
Insecure $ENV{PATH} while running with -T switch at /usr/local/bin/usbmount line 59, <STDIN> line 1.

taint mode wird durch das suid erzwungen. So weit klar. Nur, wie umgeh ich
das?

Der Code an der betreffenden Stelle:

($<,$() = ($>,$)) = @ID;
print '($<,$() = '."($<,$()";
print '($>,$)) = '."($>,$))";
# system "PATH=$PATH BASH_ENV=$BASH_ENV /bin/bash";
$ENV{PATH} = $PATH;
$ENV{BASH_ENV} = $BASH_ENV;
exec "/bin/bash";


Ullrich Horlacher Informationssysteme und Serverbetrieb
Rechenzentrum E-Mail: horlacher@rus.uni-stuttgart.de
Universitaet Stuttgart Tel: ++49-711-685-65868
Allmandring 30 Fax: ++49-711-682357
70550 Stuttgart (Germany) WWW: http://www.rus.uni-stuttgart.de/
 

Lesen sie die antworten

#1 mlelstv
17/02/2010 - 10:12 | Warnen spam
Ulli Horlacher writes:

taint mode wird durch das suid erzwungen. So weit klar. Nur, wie umgeh ich
das?



Du musst den Wert per RegEx matchen und den Match verwenden. Dann
nimmt perl an, dass du dich bei der Überprüfung des verdorbenen Wertes
hinreichend angestrengt hast.

$ENV{PATH} = $PATH;



Wo kommt denn $PATH her?

$ENV{PATH} = '/bin:/usr/bin';
$ENV{PATH} = $1 if $PATH =~ /(.+)/;

Das macht natürlich den taint-mode wirkungslos und öffnet alle
Scheunentore. Aber vielleicht hast du ja eine RegEx, die zwischen
gut und böse unterscheiden kann.

Michael van Elst
Internet:
"A potential Snark may lurk in every tree."

Ähnliche fragen