Ha un'influenza così grande a causa di una debolezza nota da tempo nell'API Win32.
I programmi vengono generati in Win32 tramite la CreateProcess()chiamata di sistema. Può essere utilizzato in diversi modi. Le persone che provengono da sfondi Unix, Linux o OS / 2 di solito lo considerano come prendere due argomenti separati per la generazione del programma (file immagine) e la coda dei comandi per passare al nuovo processo, perché i nomi dei file e gli argomenti vettori / code dei comandi sono due cose separate nelle API di tali sistemi operativi. Ma in effetti la chiamata di sistema può essere invocata in una forma alternativa con il nome del programma e gli argomenti uniti in un'unica grande stringa. CreateProcess()proverà a separare il nome file del programma dalla coda dei comandi.
Il problema è che lo fa dividendo progressivamente la stringa in due ad ogni carattere di spazio successivo, fino a quando la parte sinistra corrisponde a un file o una directory. Molti programmi Win32 proveranno a passare stringhe come C:\Program Files\Contoso\TakeOver.exe StackExchange.comalla chiamata di sistema. Questo eseguirà il programma giusto - C:\Program Files\Contoso\TakeOver.exe- con la giusta coda di comando - StackExchange.com- fino al punto in cui una persona ovviamente pericolosa arriva e crea un C:\Programfile proprio come hai fatto tu.
A quel punto, la chiamata di sistema finisce per provare a eseguire il file di immagine del programma C:\Programcon la coda di comando Files\Contoso\TakeOver.exe StackExchange.com. Heaven ti aiuta se C:\Programin realtà è un'immagine di programma eseguibile.
Questa è una debolezza generale e si applica a qualsiasi nome di file di programma contenente spazi in combinazione con qualsiasi programma che utilizza One Big String per generare altri programmi. Ma il caso più comune colpito da questo è tutti i programmi che vivono sotto C:\Program Files\e un gran numero di programmi Win32 che usano l'approccio One Big String.
È troppo tardi per modificare l'API Win32. Era troppo tardi un decennio fa. E Microsoft non può cambiare tutti i programmi scritti da altre persone che passano una stringa grande anziché due CreateProcess(). Pertanto, Microsoft esegue il controllo di Windows, all'accesso dell'utente, per l'esistenza di C:\Programe visualizza l'avviso che viene visualizzato.
E, come puoi vedere, c'è un grande avvertimento "Sicurezza" nel doco di Microsoft Win32 che dice agli sviluppatori di non scrivere programmi usando l'approccio One Big String, che è lì da alcuni anni.
Ulteriori letture