Опасное использование CreateProcess рядом производителей
dl // 17.11.05 18:13
Как известно, большинство программистов под Win32/64 предпочитает вместо первого параметра функции CreateProcess (lpszApplicationName) использовать второй параметр (lpszCommandLine), передавая в качестве lpszApplicationName NULL.
[Не забывайте при копировании материала указывать полный адрес источника: //bugtraq.ru/rsn/archive/2005/11/18.html]
lpszCommandLine все равно приходится использовать для передачи параметров в приложение, да и обработка ситуаций, когда не указан полный путь до приложения, для него сделана более комфортно. Для lpszApplicationName исполняемый файл ищется только в текущем каталоге (что, кстати, может привести к проблемам с безопасностью), для lpszCommandLine - сначала в каталоге, где был расположен exe-файл текущего процесса, потом в текущем каталоге, потом в системных и перечисленных в PATH. К тому же совместное использование этих параметров регулярно приводит ко всяческим нестыковкам - так, вызов CreateProcess("...\\notepad.exe", "wordpad readme.txt", ...) приведет к запуску notepad.exe, который будет считать, что запускался командой wordpad readme.txt.
Но в сочетании с путями, содержащими пробелы, обработка lpszCommandLine получилась слишком комфортной - при указании пути вида 'c:\program files\some dir\some prog.exe' система последовательно будет пробовать запустить 'c:\program.exe', 'c:\program files\some.exe', 'c:\program files\some dir\some.exe', 'c:\program files\some dir\some prog.exe'. Это вполне документированная ситуация, для ее избежания рекомендуется заключать строку с путем до исполняемого файла в кавычки.
Разумеется, программисты периодически забывают об этом подвохе, что в принципе может привести к атаке на локальную систему, если злоумышленнику, к примеру, удастся записать пользователю в корневой каталог свою программу под именем program.exe. Опасность не слишком велика (если уж есть подобные права на запись, то можно использовать и более очевидные методы), но подобные плюхи не красят разработчиков. В список таких программ, опубликованный iDefence, попали Microsoft Antispyware 1.0.509 (Beta 1), RealNetworks RealPlayer 10.5, Kaspersky Anti-Virus 5.0, Apple iTunes 4.7.1.30, VMWare Workstation 5.0.0 build-13124.