Apache Zookeeper 未授权访问漏洞【原理扫描】

令狐经武
2023-12-01

漏洞名称 Apache Zookeeper 未授权访问漏洞【原理扫描】
风险等级 高
高可利用 否
CVE编号 -
端口(服务) 2181(zookeeper)
风险描述 ZooKeeper是一个高性能的分布式数据一致性解决方案,它将复杂的,容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给客户使用。ZooKeeper默认开启在2181端口,在未进行任何访问控制情况下,攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境。
风险影响 攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境。
解决方案 1、禁止把Zookeeper直接暴露在公网。2、添加访问控制,根据情况选择对应方式(认证用户,用户名密码)。3、绑定指定IP访问。
协议类型 tcp

处理方法:
方法一:防火墙授权访问
描述:

zookeeper在默认情况下,是允许任意客户端未经授权访问,存在很大的安全隐患。

解决方法:

通过iptables对zookeeper的访问控制权限。

此问题开发暂未有解决方法,可临时采用iptables 限制2181端口(重启后即失效),除了本身业务访问外,全限制访问,或通过zookeeper自带的acl进行限制。

iptables临时限制方法
1.封2181端口:

iptables -I INPUT -p tcp --dport 2181 -j DROP
2.指定服务器IP 开启2181访问:

Centos6.x、Centos7.x:

iptables -I INPUT -s 10.88.2.208 -p tcp --dport 2181 -j ACCEPT
iptables -I INPUT -s 10.88.2.209 -p tcp --dport 2181 -j ACCEPT
3.进行保存

Centos6.x:

service iptables save

Centos7.x:

iptables-save
4.重启 防火墙

Centos 6.x:

service iptables restart
Centos 7.x:

service firewalld restart

注:Centos 7也可以通过自带的firewalld进行限制,方式如下:

firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“0.0.0.0/0” port protocol=“tcp” port=“6379” drop”

firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“192.168.1.1/24” port protocol=“tcp” port=“6379” accept”

方法二:启用zookeeper自带的授权访问
1.在 $ZOOKEEPER_HOME/bin/下运行(windows环境运行 %ZOOKEEPER_HOME%\bin\zkCli.cmd,进入zkCli之后的操作与linux下相同)

./zkCli.sh -server 127.0.0.1

2.登录进zookeeper 命令行, 执行 ls /

[zk: 127.0.0.1(CONNECTED) 24] ls /
[new, new2, zookeeper, zk_test]
[zk: 127.0.0.1(CONNECTED) 25]
3.可以看到有 [new, new2, zookeeper, zk_test]四个节点,对根节点和这四个节点添加acl:

[zk: 127.0.0.1(CONNECTED) 25] setAcl / ip:127.0.0.1:cdwar,ip:192.168.240.140:cdwar
cZxid = 0x0ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x2d
cversion = 2
dataVersion = 0
aclVersion = 5
ephemeralOwner = 0x0
dataLength = 0
numChildren = 4
4.有其它服务器需要访问此zookeeper,以 ip:192.168.240.140:cdwar 的格式增加在 setAcl命令最后,以 , 分隔。其它节点增加acl方式也是同样的:

[zk: 127.0.0.1(CONNECTED) 26] setAcl /new ip:127.0.0.1:cdwar,ip:192.168.240.140:cdwar
cZxid = 0x26
ctime = Tue Nov 17 10:44:37 CST 2020mZxid = 0x26
mtime = Tue Nov 17 10:44:37 CST 2020
pZxid = 0x26
cversion = 0
dataVersion = 0
aclVersion = 2
ephemeralOwner = 0x0
dataLength = 18
numChildren = 0
5.增加后,通过getAcl命令查看是否成功:

[zk: 127.0.0.1(CONNECTED) 27] getAcl /
'ip,'127.0.0.
: cdrwa
'ip,'192.168.240.140
: cdrwa
[zk: 127.0.0.1(CONNECTED) 28] getAcl /new
'ip,'127.0.0.1
: cdrwa
'ip,'192.168.240.140
: cdrwa
[zk: 127.0.0.1(CONNECTED) 29] getAcl /new2
'ip,'127.0.0.1
: cdrwa

 类似资料: