如何用curl命令获取Kubernetes Pod中ServiceAccount的token及命令原理
Kubernetes ServiceAccount Token 窃取命令原理解析
首先给出完整攻击命令:
curl -A "() {:;}; echo; /bin/bash -c 'cat /var/run/secrets/kubernetes.io/serviceaccount/token'" 10.103.123.109:8585/cgi-bin/bomshell.cgi
执行逻辑与工作原理
- 核心漏洞利用:这条命令本质是利用Shellshock(破壳漏洞,CVE-2014-6271) 实现远程代码执行,目标是窃取Kubernetes Pod内自动挂载的服务账号认证令牌。
- curl参数逻辑:
curl的-A参数用于自定义HTTP请求的User-Agent请求头,攻击 payload 就被构造在这个请求头的值里。 - Shellshock 触发逻辑:
() {:;};是旧版本bash识别环境变量中函数定义的特殊标记,存在漏洞的bash解析到该标记后,会直接执行标记后拼接的任意命令。这里拼接的命令就是读取Kubernetes默认挂载的服务账号令牌文件。 - CGI 程序的作用:目标地址是
/cgi-bin/路径下的CGI脚本,CGI程序运行时会默认把所有HTTP请求头作为环境变量导入运行环境。只要这个CGI脚本调用了存在漏洞的bash版本,就会把构造的User-Agent内容作为环境变量传入,触发漏洞执行自定义命令。 - Token 路径说明:
/var/run/secrets/kubernetes.io/serviceaccount/token是Kubernetes的标准挂载路径,只要Pod绑定了ServiceAccount,Kubernetes就会自动把对应服务账号的认证令牌、CA证书等信息挂载到该目录下,命令执行成功后就会直接输出令牌内容。
该命令成功执行的两个前置条件:目标服务器的bash版本存在Shellshock漏洞,且目标CGI程序运行在Kubernetes集群的Pod内部。
内容的提问来源于stack exchange,提问作者Zoheb Siddiqui
相关产品推荐
相关产品推荐

