Devoops: 启用raw_exec的Nomad漏洞利用
“Nomad是一种灵活的容器编排工具,使组织能够使用单一统一工作流轻松部署和管理任何容器化或传统应用程序。Nomad可以运行多样化的工作负载,包括Docker、非容器化、微服务和批处理应用程序,通常为开发人员和运维人员提供以下好处…”
来自:https://www.nomadproject.io/intro/index.html
要了解它在HashiCorp生态系统中的位置,请查看以下图表:
[此处应有HashiCorp生态系统图表]
我要感谢Will Butler,在观看他利用该漏洞后允许我撰写本文。
您可以使用以下教程搭建开发环境: https://www.nomadproject.io/intro/getting-started/install.html
教程指导您以开发环境模式运行,该模式不会绑定到0.0.0.0,因此在Vagrant启动后,您需要以下服务器和客户端文件来搭建适当的环境。
服务器:https://gist.github.com/carnal0wnage/ce4296137414bd16fcca0818208b39b7 客户端1:https://gist.github.com/carnal0wnage/4abde0ee31f4d730019e6fa04ef6d3b6 客户端2:https://gist.github.com/carnal0wnage/a4399019a943862e57283c29994ce5da
如果一切正常运行,您应该能够连接到端口4646上的UI并看到示例作业
|
|
Nomad UI中的作业:
[此处应有Nomad UI作业截图]
Nomad UI中的服务器:
[此处应有Nomad UI服务器截图]
Nomad UI中的客户端:
[此处应有Nomad UI客户端截图]
利用配置错误
Nomad附带一个默认禁用的raw_exec选项。
参考:https://www.nomadproject.io/docs/drivers/raw_exec.html
raw_exec选项允许您在nomad主机上无隔离地运行命令。
“raw_exec驱动程序可以在所有支持的操作系统上运行。出于安全原因,默认情况下它是禁用的。要启用raw_exec,Nomad客户端配置必须在客户端的选项中显式启用raw_exec驱动程序:”
如何查看客户端上是否启用了raw_exec模块?
您可以在UI中查看:
[此处应有UI中raw_exec状态截图]
或者通过访问API端点:
[此处应有API端点截图]
开始利用
我们需要创建一个包含我们命令的作业hcl文件。这是一个简单的示例:
https://gist.github.com/carnal0wnage/25b391126dadefe0a9523fb421bf8f33
启动服务:
[此处应有服务启动截图]
我们作业的结果:
[此处应有作业结果截图]
UI中的作业:
[此处应有UI作业截图]
停止作业:
[此处应有停止作业截图]
强制运行垃圾回收:
[此处应有垃圾回收截图]
验证作业已被删除:
[此处应有验证截图]
现在让我们获取一个反向Shell。我使用了以下hcl文件:
https://gist.github.com/carnal0wnage/4a436a8dc0dcb142a8c836e48916dd71
反向Shell作业:
[此处应有反向Shell作业截图]
来自Nomad的Shell:
[此处应有Shell截图]
安全加固信息
通过ACL锁定Nomad的信息: https://www.nomadproject.io/guides/security/acl.html