etcd未授权访问v2

背景

经过渗透测试,发现etcd未授权访问(v2),可以通过restful api方式,获取敏感数据或集群被控制。

处理【用户认证的方式】

1.创建用户root并授权角色为root角色

【ps:不创建root用户,无法开启认证,会报错{"message":"auth: No root user available, please create one"}】

curl  -X PUT http://192.168.35.61:2379/v2/auth/users/root -H "Content-Type: application/json" -d '{"user":"root","password":"XXXXXXXXX","roles":["root"]}'

检查:

2.创建应用的角色apisix,并赋予该角色对 /apisix/* 路径的 读取(read) 和 写入(write) 权限

curl -X PUT http://192.168.35.61:2379/v2/auth/roles/apisix \
     -H "Content-Type: application/json" \
     -d '{"role":"apisix","permissions":{"kv":{"read":["/apisix/*"],"write":["/apisix/*"]}}}'

检查角色:

curl  http://192.168.35.61:2379/v2/auth/roles

3.创建应用的用户apisix并授权角色为apisix角色

【ps:为了符合权限最小原则】
创建用户apisix并授权角色为apisix角色

curl  -X PUT http://192.168.35.61:2379/v2/auth/users/apisix -H "Content-Type: application/json" -d '{"user":"apisix","password":"XXXXXXXXX","roles":["apisix"]}'

检查用户:

curl  http://192.168.35.61:2379/v2/auth/users

4.启动认证

curl -X PUT http://192.168.35.61:2379/v2/auth/enable \
     -H "Content-Type: application/json" \
     -d '{}'

检查认证:

curl http://192.168.35.61:2379/v2/auth/enable
####发现不需要用户名密码就可以查看到认证情况,说明还有问题,继续排查

5.还是存在未授权访问的问题

发现认证启动后,还是有地址不需要认证就可以访问。还是存在未授权访问的问题

排查:

发现多出来个guest角色【匿名访问角色】,且权限还挺大
处理:
禁用guest角色!!!
无法通过put方式修改权限



最终处理方式:

 curl --user 'root:XXXXXXX' -XDELETE http://192.168.35.82:2379/v2/auth/roles/guest

6.验证是否还有未授权的地址


认证开启完成
或者打开地址http://192.168.35.61:2379/v2/keys/?recursive=true看能不能看到信息泄露。

遗留问题

通过命令还是能获取到一些信息,要想想看如何处理

[root@bes01 bin]# ./etcdctl --endpoints=192.168.35.61:2379 member list
8e9e05c52164694d, started, credit-node, http://localhost:2380, http://192.168.35.61:2379, false
posted @ 2025-06-06 18:44  海yo  阅读(275)  评论(0)    收藏  举报