Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING

30.2 Typische Schwachstellen bei PERL Skripten

  1. Die Ausführung externer Kommandos (sei es durch system() oder auch ganz einfach bei einer Pipeline mit open()) ist grundsätzlich sehr gefährlich, wenn eine Angreifer auf die Übergabeparameter Einfluß nehmen kann.

  2. Wenn bei auszuführenden Kommandos kein absoluter Pfadname angegeben wird, kann es "Überraschungen" durch eine manipulierte Umgebungsvariable PATH, IFS ... geben oder durch vorgeschobene Kommandos eines Angreifers, die weiter vorne im Pfad vor dem eigentlich gewünschten Kommando liegen.

  3. Sowohl bei open() als auch bei system() sind beliebige Shell-Metazeichen zugelassen. Wenn eine Einflüßmöglichkeit auf die Zeichenkette existiert, die der Shell übermittelt wird, ist es damit leicht möglich, ein Kommando des Angreifers anzuhängen, z.B. ; rm -rf /, welches die Festplatte löscht.....

  4. Die Shell trennt Kommandozeilen auf Basis der Umgebungsvariablen IFS auf. Wenn die z.B. auf den Schrägstrich gesetzt wird, dann wird aus einem absoluten Kommandonamen beispielsweise unerwartet das Kommando usr.

  5. Wenn Dateien zum Schreiben eröffnet werden:
    1. wenn der Dateiname in Abhängigkeit von Angaben eines Angreifers gewählt wird,
    2. die zu kreierende Datei in einem vom Angreifer beeinflußbaren Verzeichnis liegt, oder
    3. wenn der Dateiinhalt beeinflußt werden kann.

  6. Eine typische Falle kann hier die Mächtigkeit von open() darstellen. Während open(OUT, $filename) recht harmlos aussieht, wird dies zum idealen Angriffspunkt, wenn beispielsweise $filename am Ende ein Pipeline-Zeichen erhalten kann oder wichtige Systemdateien (wie z.B. /etc/passwd) bedroht werden können.

  7. Selbst wenn auf $filename kein Einfluß ausgeübt werden kann, kann das Anlegen temporärer Dateien in öffentlichen Verzeichnissen (z.B. /tmp) zur tödlichen Falle werden, wenn dort der Angreifer zuvor einen symbolischen Verweis auf /etc/passwd für den zu erwartenden Dateinamen hinterließ.

  8. Natürlich sind auch viele weitere Systemaufrufe gefährlich wie z.B. mkdir, chmod, chown usw.

  9. Perl selbst ist zwar immun gegen den Hauptangriffspunkt bei in C geschriebenen Programmen auf Basis von Puffer-Überläufen, jedoch sind möglicherweise in C geschriebene Programme oder hinzugeladene Bibliotheken bedroht.

  10. Typische Fallen sind hier Umgebungsvariablen (z.B. HOME), die auf extrem lange Werte gesetzt werden und damit aufgerufene Shells zur Ausführung mit übergebenen Codes des Angreifers bringen können (diese Technik ist als stack smashing bekannt). Weitere Kandidaten sind die Umgebungsvariablen USER oder LOGIN, bei denen häufig naive Annahmen über deren maximale Länge gemacht wird.

  11. Weitere Probleme kann es mit (ansonsten überprüften) Kommandozeilenargumente geben, die zu lang sind.

  12. Auch Eingaben, die über eine Pipeline an ein fremdes Programm erfolgen, können einen Angriffspunkt darstellen, wenn z.B. gets statt fgets auf der einlesenden Seite verwendet wird.

  13. Häufig werden solche Sicherheitsaspekte bei Hilfsprogrammen nicht beachtet, da sie alleine genommen kein Sicherheitsrisiko darstellen.


Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING