Tiene una gran influencia debido a una debilidad conocida en la API de Win32.
Los programas se generan en Win32 a través de la CreateProcess()
llamada al sistema. Se puede usar de varias maneras. Las personas que provienen de entornos Unix, Linux u OS / 2 generalmente pensarán que toma dos argumentos separados para que el programa (archivo de imagen) se reproduzca y la cola del comando pase al nuevo proceso, porque los nombres de archivo y los vectores de argumentos / colas de comando son dos cosas separadas en las API de esos sistemas operativos. Pero, de hecho, la llamada al sistema puede invocarse en una forma alternativa con el nombre del programa y los argumentos combinados en una gran cadena. CreateProcess()
intentará separar el nombre del archivo del programa de la cola del comando.
El problema es que hace esto dividiendo progresivamente la cadena en dos en cada carácter de espacio sucesivo, hasta que la porción de la izquierda coincida con un archivo o un directorio. Muchos programas Win32 intentarán pasar cadenas como C:\Program Files\Contoso\TakeOver.exe StackExchange.com
la llamada al sistema. Esto ejecutará el programa correcto C:\Program Files\Contoso\TakeOver.exe
- con la cola de comando correcta StackExchange.com
- hasta el punto en que aparezca una persona obviamente peligrosa y cree un C:\Program
archivo tal como lo hizo usted.
En ese punto, la llamada al sistema termina intentando ejecutar el archivo de imagen del programa C:\Program
con la cola del comando Files\Contoso\TakeOver.exe StackExchange.com
. El cielo te ayudará si C:\Program
de hecho es una imagen de programa ejecutable.
Esta es una debilidad general, y se aplica a cualquier nombre de archivo de programa que contenga espacios en combinación con cualquier programa que use One Big String para generar otros programas. Pero el caso más común que se ve afectado por esto son todos los programas que viven C:\Program Files\
y una gran cantidad de programas Win32 que utilizan el enfoque One Big String.
Es demasiado tarde para cambiar la API de Win32. Era demasiado tarde hace una década. Y Microsoft no puede cambiar todos los programas escritos por otras personas que pasan una cadena grande en lugar de dos CreateProcess()
. Por lo tanto, Microsoft hace que Windows verifique, al inicio de sesión del usuario, la existencia C:\Program
y muestra la advertencia que ve.
Y, como puede ver, hay una gran advertencia de "Seguridad" en el documento de Win32 de Microsoft que le dice a los desarrolladores que no escriban programas utilizando el enfoque One Big String, que ha estado allí durante algunos años.
Otras lecturas