Hallo, On Mon, 08 Apr 2002, Ratti wrote:
Ratti:
Es ist technisch gesehen einfach unnötig, $PATH zu setzen, wenn ich `/usr/bin/whoami` aufrufe. Der Pfad wird dafür überhaupt nicht benötigt.
David Haller:
Du weisst, dass das Environment in CGIs vom User, der das cgi aufruft geaendert werden kann?
Der User "draußen" am Browser?
Jep.
Du weisst, dass dein CGI dann unsicher und fuer (root-(!)) exploits anfaellig ist?
Magst du das mal grob beschreiben, wie sowas ablaufen soll? Wie könnte der Surfer das tun?
In dem er das GET/POST manipuliert. Ist der gleiche Mechanismus wie bei Nimda, nur wird da eben nicht ein Buffer-Overflow ausgenuetzt, sondern es wird eben das Environment, das das cgi zu sehen bekommt manipuliert. Ich zitiere: ==== man 1 perlsec ==== You may not use data derived from outside your program to affect something else outside your program--at least, not by accident. All command line arguments, environment variables, [..], and all file input are marked as "tainted". Tainted data may not be used directly or indi rectly in any command that invokes a sub-shell, nor in any command that modifies files, directories, or processes. ==== Der Grund ist eben, dass das Environment (und die anderen angesprochenen Quellen fuer Daten) eben (boshaft) manipuliert werden koennen. Aber wenn man bei dir irgendwie Dateien raufladen kann, dann reicht ein script/binary in .../incoming und eine "kleine, unauffaellige Aenderung des PATH auf PATH=".../incoming:$PATH" und du hast Aerger am Hals, und wenn das cgi dann noch root-Rechte hat *brr*. Nein, ich kann dir kein besseres Beispiel geben, da ich mit sowas nicht beschaeftige, glaub's den Programmieren von Perl einfach, dass der Taint Modus (und -w und strict!) sinnvoll und bei cgis eigentlich unverzichtbar sind. Ach ja: ==== man 1 perl ==== BUGS The -w switch is not mandatory. ====
Wegen mir kannst du strict und -T weglassen... Du kannst machen was du willst... Aber sei gewarnt.
Ich jammer dann. ;-)
Und ich lache dann haemisch. ;-)
Nein, im Ernst: Ich wüsste gerne, wo da wirklich ein Loch ist. Ich sehe da einfach keins.
Tja. Es ist aber vorhanden (s.o.). Wie war das noch gleich? "Better safe, than sorry"... ;) -dnh -- Human beings were created by water to transport it uphill. -- BSD fortune file