导语:通过在Emissary项目上运行标准的CodeQL查询集,我发现了之前报告的任意文件泄露(CVE-2021-32093)。
通过在Emissary项目上运行标准的CodeQL查询集,我发现了之前报告的任意文件泄露(CVE-2021-32093),但也发现了新的漏洞:
不安全的反序列化漏洞 (CVE-2021-32634);
服务器端请求伪造漏洞(CVE-2021-32639);
原始代码注入CVE (CVE-2021-32096)是由社区贡献的CodeQL查询标记的;
到目前为止,还可以通过默认的CodeQL查询发现反映的跨站点脚本漏洞(CVE-2021-32092)。
代码注入 (CVE-2021-32096)
起初我尝试在Emissary 5.9.0代码库上使用CodeQL脚本注入查询时,却没有得到任何结果。
在阅读源代码获取漏洞细节后,我确信我的查询正确地建模了javax.script.ScriptEngine.eval()接收,并且该源代码已经由默认的CodeQL JAX-RS库建模。然而,我意识到从不受信任的数据到脚本注入接收器的流不是“直接的”流。你可以通过查看代码流的方式来理解其原因。
用户数据进入应用程序的 JAX-RS 终端是:

getOrCreateConsole(request) 将调用 RubyConsole.getConsole() ,它会转到:

此代码启动一个运行 RubyConsole.run() 方法的新线程(因为它实现了 Java Runnable 接口):

但是,由于此时 stringToEval 为 null,因此该方法几乎会立即使用 wait() 方法暂停线程。
稍后,在 rubyConsolePost 中,我们可以找到以下代码:

这里是不受信任数据(request.getParameter(CONSOLE_COMMAND_STRING))进入应用程序并流入RubyConsole.evalAndWait()方法的地方。但是,evalAndWait()方法是:

本文详细介绍了在Emissary项目中发现的安全漏洞,特别是服务器端请求伪造(SSRF)漏洞(CVE-2021-32639)。通过CodeQL查询,不仅揭示了SSRF漏洞,还发现了代码注入、任意文件泄露和不安全的反序列化问题。此外,讨论了如何利用SSRF漏洞进行身份验证凭证的潜在泄露,并分享了安全研究过程。
最低0.47元/天 解锁文章
1053

被折叠的 条评论
为什么被折叠?



