【安全漏洞】Emissary 的SSRF漏洞(CVE-2021-32639)发现过程

导语:通过在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.evalAndWai

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值