漏洞利用 Kubernetes ingress-nginx <1.9.0 - API 命令注入




漏洞利用 Kubernetes ingress-nginx <1.9.0 - API 命令注入

最近,Kubernetes 的入口 nginx 控制器中发布了几个新的 CVE。我想我应该仔细研究其中一个 CVE-2023-5044。虽然CVE 公告中有一些详细信息,并且 CVE 记者的帖子中有一些提示,但我找不到任何实际的 PoC,所以我决定看看是否可以写一个!

测试环境设置

通常情况下,设置测试环境的最简单方法是使用KinD。他们有一个页面,其中包含入口设置的说明,效果很好。

一旦我们使用提供的示例应用程序进行了入口设置http://localhost/foo,http://localhost/bar就会命中由入口控制器管理的路径。

试验该漏洞

因此,我们从咨询中知道问题出在注释中nginx.ingress.kubernetes.io/permanent-redirect,因此我想尝试的第一件事就是经典的命令注入,您可以结束所提供的语句并开始一个新指令。在 nginx 的情况下,它使用该;字符,所以我尝试了一下,它似乎有效!

执行到入口控制器 Pod 中,我可以看到此注释所发生的情况是,您提供的任何内容基本上都直接注入到控制器使用的 nginx 配置文件中。

alias我尝试过的一个选项是使用或指令来提供文件,因为这似乎是访问敏感文件(例如对集群具有高权限的控制器的服务帐户令牌)的好方法root。然而这些指令已被禁用,因此无法正常工作。

幸运的是,我记得 nginx 有时支持 lua 脚本,所以我们也许可以使用它。在 ChatGPT 关于具体使用语法的帮助下,我获得了一个可用的 PoC。

nginx.ingress.kubernetes.io/permanent-redirect: https://www.mccune.org.uk;}location ~* "^/flibble(/|$)(.*)" {content_by_lua 'ngx.say(io.popen("cat /var/run/secrets/kubernetes.io/serviceaccount/token"):read("*a"))';}location ~* "^/flibblea(/|$)(.*)" { content_by_lua 'os.execute("touch /you")'


这肯定会更简洁,但它所做的是在我们重定向到的 URL 之后关闭指令location。;}然后就打开一个新的location路径/flibble。当有人调用该路径时,我们运行一个 lua 脚本,该io.popen脚本用于运行操作系统命令,然后使用nginx.say. 之后,我只是放置另一个位置指令来吸收文件中已有的任何不需要的指令(平衡文件中的大括号很重要,否则您的更改将被拒绝)。

完成此操作后,您可以卷曲localhost/flibble并取回对集群具有高权限的入口的服务帐户令牌,特别是集群级别的 GET 机密。

结论

这是一个有趣的漏洞,而且(尽管有点棘手)利用它并不难。然而,就风险而言,这是相当情境性的,因为它需要编辑ingress命名空间中的对象的权限,因此集群外部的攻击者不可能执行该操作。


原文地址

https://raesene.github.io/blog/2023/10/29/exploiting-CVE-2023-5044/


感谢您抽出

漏洞利用 Kubernetes ingress-nginx <1.9.0 - API 命令注入

.

漏洞利用 Kubernetes ingress-nginx <1.9.0 - API 命令注入

.

漏洞利用 Kubernetes ingress-nginx <1.9.0 - API 命令注入

来阅读本文

漏洞利用 Kubernetes ingress-nginx <1.9.0 - API 命令注入

点它,分享点赞在看都在这里

原文始发于微信公众号(Ots安全):漏洞利用 Kubernetes ingress-nginx <1.9.0 - API 命令注入

版权声明:admin 发表于 2023年10月31日 下午4:54。
转载请注明:漏洞利用 Kubernetes ingress-nginx <1.9.0 - API 命令注入 | CTF导航

相关文章

暂无评论

暂无评论...