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

浙公网安备 33010602011771号