2012-04-10 5 views
6

Eine Fortify-Sicherheitsüberprüfung informierte uns über Sicherheitslücken bei der Pfadmanipulation. Die meisten waren offensichtliche und einfache Korrekturen, aber ich verstehe nicht, wie ich das Folgende beheben kann.Pfadmanipulation (Sicherheitslücke)

string[] wsdlFiles = System.IO.Directory.GetFiles(wsdlPath, "*.wsdl"); 

"wsdlPath" wird von einer Textbox eingegeben. Ist das etwas, das einfach nicht repariert werden kann? Ich kann den Pfad validieren usw. Aber wie hilft das der Schwachstelle?

+1

Wie wird dieser Code ausgeführt? Wenn es eine Windows-Anwendung ist, die mit den Anmeldeinformationen des Benutzers läuft, der den 'wsdlPath 'eingibt, sehe ich nichts falsch. Wenn es in einem Windows-Dienst oder als Teil einer Website ausgeführt wird, ist dies ein Problem. –

+0

Hat der Fortify-Test die injizierte Zeichenfolge bereitgestellt? – Tung

+0

@AndersAbel - Web-App. Ein authentifizierter Benutzer gibt den Pfad ein, und wenn es ein gültiger Pfad ist, wird er akzeptiert. – Induster

Antwort

8

Wenn die Daten immer aus einem Textfeld abgerufen werden, dessen Inhalt vom Benutzer bestimmt wird und der Code mit den Berechtigungen dieses Benutzers ausgeführt wird, besteht die einzige Gefahr für den Benutzer im Angriff selbst. das ist keine interessante Bedrohung.

die Sicherheitslücke, die das Werkzeug, das Sie aufmerksam zu machen versucht, ist, dass, wenn niedriges Vertrauen feindlicher Code den Inhalt dieser Zeichenfolge bestimmt, dann kann der feindliche Code kann einen Versuch montieren zu Fakten entdecken die Maschine des Benutzers, wie "ist das und ein solches Programm, das ich kenne, eine Sicherheitslücke installiert und ungepatcht hat?" oder "gibt es einen Benutzer namens 'admin' auf dieser Maschine?" und so weiter.

+0

Der einzige Benutzer, der auf diese Seite zugreifen kann, ist ein Systemadministrator. Es gibt nur wenige Personen mit Administratorzugriff. Ich nehme an, das ist genug "Schadensbegrenzung", um diese Schwachstelle als "niedrig" zu betrachten. Ich sehe einfach keinen Weg, das stärker zu machen, als es ist. Danke für deinen Beitrag. – Induster

+0

Ich markierte dies als die Antwort, weil der authentifizierte Benutzer, der diese Information eingibt, keine nützlichen Informationen zu ihnen erhalten wird. Ein Endnutzer, ja absolut ...aber das ist hier nicht der Fall. – Induster

+0

@Induster - Sie machen es stärker durch die Eingabe sichergestellt nur gefiltert gültigen Pfad und Dateinamen zu erlauben. Ja, Admin-Zugriff funktioniert nur Dinge mildern, aber was ist, wenn ein Angreifer Admin-Zugang, könnte dies ermöglicht ihnen Zugriff auf den Server zu erlangen selbst, nicht nur Ihre App. –

2

Sie sollten niemals ungefiltert etwas direkt in die OS-API einspeisen. Sie sollten die Eingabe bereinigen, stellen Sie sicher, dass sie keine Pfade enthält (zB "../../../somefile") und stellen Sie sicher, dass sie lange Namen abschneidet und nur gültige Dateinamen enthält (zum Beispiel gab es verschiedene Fehler in Bezug auf internationale Zeichen)

+0

Die Eingabe wird so behandelt, wie sie sollte. Dies wurde offensichtlich rot markiert, da es von Benutzereingaben stammt. Aber das muss intakt bleiben. Für mich sieht es so aus, als könnten wir hier nichts tun, ohne Benutzereingaben zu eliminieren, was keine Option ist. Vielleicht kann hier jemand etwas sehen, was ich nicht kann. – Induster

+1

@Inuster - Ihre Antwort ist verwirrend. Was meinst du mit "der Input wird so gehandhabt wie er sollte"? Ihre Kommentare zeigen an, dass dies nicht der Fall ist. Sie müssen die Eingabe bereinigen, um sicherzustellen, dass Sie keine unzulässigen Daten in eine Betriebssystem-API einspeisen, oder Pfade zu Dateien, die nicht zulässig sein sollten. Wenn Sie denken, dass es für einen Benutzer vollkommen akzeptabel ist, die Systempasswortdatei einzugeben, dann hey .. vergessen Sie, dass ich irgendetwas gesagt habe. –

1

Mit diesem Code kann jeder Benutzer, der authentifiziert und berechtigt ist, diese Funktion zu verwenden, auf das Dateisystem auf dem Server zugreifen. Der Zugriff erfolgt mithilfe der Anmeldeinformationen des Dienstkontos, das die Webanwendung ausführt.

Je nachdem, wie die zurückgegebenen Daten verwendet werden, kann ein böswilliger Benutzer möglicherweise mehr Informationen erhalten oder den Server in einer Weise verhalten, die nicht beabsichtigt war.

Sie sollten die Menge der erlaubten Pfade beschränken, um nur aus einem oder wenigen sorgfältig ausgewählten Verzeichnissen zu bestehen. Verwenden Sie die Funktionen in der Klasse Path, um Zeichenfolgen in Pfade zu kombinieren - sie kümmern sich um Dinge wie ein Benutzer, der c:\allowedpath\..\windows\system32 für Sie eingibt.

Verwandte Themen