如果我启动一个带有冒号参数的电子程序,该程序将立即退出。
Process process = new Process();
process.StartInfo.FileName = "C:\Program Files (x86)\SomeElectronApp.exe";
process.StartInfo.Arguments = "ab:c d";
process.Start();
process.WaitForExit();
Console.WriteLine(1); // break point here
但是,如果我交换参数,使带冒号的参数总是排在最后,那么程序就会成功启动。
这里提到了:
[This]是针对老windows漏洞的安全缓解
有人知道这个缺陷是什么吗?
更新:
找到源代码:
函数CheckCommandLineArguments
具有以下逻辑:
else if (IsUrlArg(argv[i])) {
block_args = true;
}
其中IsUrlArg
做:
// colon indicates that the argument starts with a URI scheme
if (c == ':') {
// it could also be a Windows filesystem path
if (p == arg + 1)
break;
return true;
}
"缺陷";很可能是包含空格的未加引号的文件名。
考虑> "C:Program Files (x86)SomeElectronApp.exe" "C:Program Files (x86)SomeElectronFile.dat"
和
> "C:Program Files (x86)SomeElectronApp.exe" C:Program Files (x86)SomeElectronFile.dat
或
> C:Program Files (x86)SomeElectronApp.exe C:Program Files (x86)SomeElectronFile.dat
如果您错误地将文件关联设置为
pathtoexe %1
不是
pathtoexe "%1"
则每个使用ShellExecute
函数的程序将传递给您一个不加引号的文件名,即使它包含空格。
使它成为"窗口"的东西;缺陷在于,在Windows上,将单个命令行字符串传递给生成的程序,该程序负责将其分解为argv
数组。相比之下,大多数其他操作系统传递一个参数数组,因此启动程序必须花费一些精力将文件名分解为多个单词。
通过查看提交找到答案。
这是为了修复远程代码执行漏洞(CVE-2018-1000006)。来源:
当满足某些条件时,受影响的电子版本可能容易受到远程代码执行缺陷的影响:
- 电子应用程序在Windows上运行
- 电子应用程序注册为协议的默认处理程序,例如nodeapp://。
此漏洞是由于未能在Electron的命令行处理程序中清理chromium的附加参数而导致的。
博客文章在这里