云原生安全红队实录:绕过K8s老版本SA令牌漏洞的防御之道

自Kubernetes 1.24版本起,服务账户(ServiceAccount)的令牌管理机制发生重大变更,传统自动生成Secret的方式已被废弃。本文手把手教你破解新版本令牌获取难题,并演示三种权限验证姿势。

一、版本变更核心影响

🚨 关键变化:

停止自动创建Legacy Token Secret 强制使用TokenRequest API 令牌绑定生命周期(默认1小时)

新旧版本对比:

功能项

1.23及之前

1.24+

令牌生成方式

自动创建Secret

需手动创建Token Secret

令牌有效期

永久有效

可配置时效(默认1h)

安全特性

存在泄露风险

支持受众绑定验证

二、令牌获取实战演练

2.1 创建Token Secret模板

# sa-token.yaml  
apiVersion:v1
kind:Secret
metadata:
name:prom-sa-secret
namespace:kube-system
annotations:
    kubernetes.io/service-account.name:"prometheus"# 关键锚定SA
type:kubernetes.io/service-account-token# 指定令牌类型

2.2 应用配置并提取令牌

# 创建Secret  
kubectl apply -f sa-token.yaml  

# 提取Base64编码令牌  
TOKEN=$(kubectl -n kube-system get secret prom-sa-secret -ojsonpath='{.data.token}')  

三、权限校验三大姿势

3.1 命令行快速验证

# --as值,所涉及的身份伪装功能
echo $TOKEN | base64 -d | awk -F. '{printf $2}' | base64 -d | python -m json.tool | grep sub
    "sub": "system:serviceaccount:kube-system:prometheus"
    
# 校验节点读取权限  
kubectl auth can-i get nodes \  
  --as=system:serviceaccount:kube-system:prometheus  

# 检查Ingress操作权限(需对应RBAC配置)  
kubectl auth can-i create ingress \  
  --as=system:serviceaccount:kube-system:prometheus  

3.2 模拟API请求验证

# 使用curl测试API访问  
curl -k -H "Authorization: Bearer $(echo $TOKEN | base64 -d)" \ 
  https://${API_SERVER}/api/v1/namespaces/kube-system/pods  

# 典型响应分析:  
# 200 OK - 有读取权限  
# 403 Forbidden - 权限不足  

3.3 RBAC规则逆向追溯

# 查看绑定到SA的ClusterRole  
kubectl get clusterrolebindings -o json | jq '.items[] | select(.subjects[0].name=="prometheus")'   

# 可视化权限关系  
kubectl describe clusterrole prometheus

四、常见故障排查

❌ 问题1:创建Secret后未生成令牌

✅ 解决步骤:

  1. 检查SA是否存在

  2. 验证annotation格式是否正确

  3. 查看kube-controller-manager日志

❌ 问题2:令牌报"Unauthorized"错误

✅ 诊断流程:

# 检查令牌有效期  
kubectl get secret prom-sa-secret -o jsonpath='{.metadata.annotations.expiration-timestamp}'

# 验证RBAC绑定  
kubectl get rolebinding,clusterrolebinding -A | grep prometheus  

五、结语

Kubernetes 1.24以后服务账户(ServiceAccount)的令牌管理机制不再生成Secret。本文手把手教你破解新版本令牌获取难题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_38220914

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值