Il a une telle influence en raison d'une faiblesse connue de longue date dans l'API Win32.
Les programmes sont générés dans Win32 via l' CreateProcess()
appel système. Il peut être utilisé de plusieurs manières. Les personnes venant d'horizons Unix, Linux ou OS / 2 penseront généralement que cela prend deux arguments distincts pour que le programme (fichier image) apparaisse et la queue de commande pour passer au nouveau processus, parce que les noms de fichiers et les arguments vecteurs / queues de commande sont deux choses distinctes dans les API de ces systèmes d'exploitation. Mais en fait, l'appel système peut être appelé sous une forme alternative avec le nom du programme et les arguments écrasés dans une seule grande chaîne. CreateProcess()
va essayer de séparer le nom de fichier du programme de la queue de commande.
Le problème est qu'il le fait en divisant progressivement la chaîne en deux à chaque caractère d'espace successif, jusqu'à ce que la partie gauche corresponde à un fichier ou un répertoire. De nombreux programmes Win32 essaient de passer des chaînes comme C:\Program Files\Contoso\TakeOver.exe StackExchange.com
à l'appel système. Cela exécutera le bon programme - C:\Program Files\Contoso\TakeOver.exe
- avec la bonne queue de commande - StackExchange.com
- jusqu'à ce qu'une personne manifestement dangereuse arrive et crée un C:\Program
fichier comme vous l'avez fait.
À ce stade, l'appel système finit par essayer d'exécuter le fichier image du programme C:\Program
avec la queue de commande Files\Contoso\TakeOver.exe StackExchange.com
. Heaven vous aide s'il C:\Program
s'agit en fait d'une image de programme exécutable.
Il s'agit d'une faiblesse générale et elle s'applique à tout nom de fichier de programme contenant des espaces en combinaison avec tout programme qui utilise One Big String pour générer d'autres programmes. Mais le cas le plus courant qui est touché par cela est tous les programmes qui vivent sous C:\Program Files\
et un grand nombre de programmes Win32 qui utilisent l'approche One Big String.
Il est beaucoup trop tard pour changer l'API Win32. Il était trop tard il y a dix ans. Et Microsoft ne peut pas modifier tous les programmes écrits par d'autres personnes qui passent une grosse chaîne au lieu de deux CreateProcess()
. Microsoft vérifie donc, à l'ouverture de session de l'utilisateur, l'existence C:\Program
et affiche l'avertissement que vous voyez.
Et, comme vous pouvez le voir, il y a un gros avertissement "Sécurité" dans le doco Win32 de Microsoft disant aux développeurs de ne pas écrire de programmes en utilisant l'approche One Big String, qui existe depuis quelques années maintenant.
Lectures complémentaires