为什么电子杀死带有冒号参数的Windows进程?



如果我启动一个带有冒号参数的电子程序,该程序将立即退出。

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)。来源:

当满足某些条件时,受影响的电子版本可能容易受到远程代码执行缺陷的影响:

  1. 电子应用程序在Windows上运行
  2. 电子应用程序注册为协议的默认处理程序,例如nodeapp://。

此漏洞是由于未能在Electron的命令行处理程序中清理chromium的附加参数而导致的。

博客文章在这里

最新更新