Es hat einen so großen Einfluss auf eine seit langem bekannte Schwachstelle in der Win32-API.
Programme werden in Win32 über den CreateProcess()Systemaufruf erzeugt. Es kann auf verschiedene Arten verwendet werden. Leute, die aus Unix-, Linux- oder OS / 2-Umgebungen kommen, denken normalerweise, dass sie zwei separate Argumente für das Programm (Image-Datei) und den Befehls-Tail für die Übergabe an den neuen Prozess benötigen, da Dateinamen und Argumente Vektoren / Befehls-Tails sind zwei verschiedene Dinge in den APIs dieser Betriebssysteme. Tatsächlich kann der Systemaufruf jedoch in einer alternativen Form aufgerufen werden, wobei Programmname und Argumente in einer großen Zeichenfolge zusammengefasst werden. CreateProcess()versucht, den Dateinamen des Programms vom Befehlsende zu trennen.
Das Problem ist , dass es das tut durch progressives Aufspalten der Zeichenfolge entzwei bei jedem aufeinanderfolgenden Leerzeichen, bis der linke Teil eine Datei oder ein Verzeichnis übereinstimmt. Viele Win32 - Programme werden versuchen , Strings passieren wie C:\Program Files\Contoso\TakeOver.exe StackExchange.coman den Systemaufruf. Dadurch wird das richtige Programm laufen - C:\Program Files\Contoso\TakeOver.exe- mit der richtigen Befehl tail - StackExchange.com- , bis der Punkt , dass einige offensichtlich gefährliche Person entlang kommt und erstellt eine C:\ProgramDatei wie Sie getan haben.
Zu diesem Zeitpunkt versucht der Systemaufruf, die Programmimagedatei C:\Programmit dem Befehlsende auszuführen Files\Contoso\TakeOver.exe StackExchange.com. Der Himmel hilft dir, wenn C:\Programes sich tatsächlich um ein ausführbares Programm-Image handelt.
Dies ist eine allgemeine Schwachstelle und gilt für alle Programmdateinamen, die Leerzeichen enthalten, sowie für alle Programme, die One Big String verwenden, um andere Programme zu erzeugen. Aber der häufigste Fall, der davon betroffen ist, sind alle Programme, unter denen es läuft, C:\Program Files\und eine große Anzahl von Win32-Programmen, die den One Big String-Ansatz verwenden.
Es ist viel zu spät, um die Win32-API zu ändern. Vor einem Jahrzehnt war es zu spät. Und Microsoft kann nicht alle Programme ändern, die von anderen Personen geschrieben wurden , die eine große Zeichenfolge anstelle von zwei an übergeben CreateProcess(). Daher überprüft Microsoft bei der Benutzeranmeldung, C:\Programob eine Warnung vorhanden ist, und zeigt sie an.
Und wie Sie sehen, enthält das Win32-Dokument von Microsoft eine große "Sicherheitswarnung", die den Entwicklern mitteilt, keine Programme mit dem seit einigen Jahren bekannten One Big String-Ansatz zu schreiben .
Weitere Lektüre