--------------------------------Linux Guide---------------------------------- by Ingo Blechschmidt (c) 2002 ----------------------------------------------------------------------------- ------------------------- Perl-Sicherheitslücken decken ------------------------- Fre Jun 22 15:20:00 MEST 2001 ------------------------- Perl Sicherheitslücke Angreifer ausfiltern erlaubt system() exec() ----------------------------------------------------------------------------- Perl kann fast alles. Gerade deshalb hat es auch einige Sicherheitslücken, von denen dieser Artikel zwei decken will. -----------------------------------------------------------------------------
    * Der system()- bzw. exec()-Aufruf. Angenommen, das Perl-Skript fragt den Benutzer nach einem Namen, welcher dann (umständlich) mittels von system("echo $Name") ausgegeben werden soll. Wenn der Benutzer als $Name | rm -rf / eingibt, werden (Superuser-Rechte vorrausgesetzt) alle Dateien abfragslos gelöscht. Besser: --------CODE--------: system() system("/bin/echo", $Name); --------/CODE-------- Nun werden etwaige Metazeichen nicht mehr ersetzt. * Um den bekannten ../-Trick ( bsp. http://www.sourceforge.net/../../../../etc/passwd - die Anzahl der dotdotslashes hängt vom Server ab) abzuwehren, ist es unratsam, nur die Slashes bzw. Punkte auszufiltern. Es bleit dann nähmlich noch die Möglichkeit, %2E als Punkt zu benutzen. Oder man könnte die Shell-Metazeichen ausnutzen (| rm -rf /*). Besser ist es, nur die erlaubten Zeichen durchzulassen, alle anderen auszufiltern: --------CODE--------: ../ { print "Nice try"; exit; } unless ($eingabe =~ /[a-zA-Z0-9,.äüöÄÖÜ]/); --------/CODE-------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- This document is distributed under the terms of the GNU Free Documentation License.