Zookeeper的未授權訪問漏洞解決


這里用的是用戶名密碼的方式,需用別的方式請參考下面地址
附大佬鏈接:(有三種解決方法)https://www.cnblogs.com/ilovena/p/9484522.html
首先介紹下znode的5種操作權限:

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、刪、改、查、管理權限,這5種權限簡寫為crwda(即:每個單詞的首字符縮寫)

注:這5種權限中,delete是指對子節點的刪除權限,其它4種權限指對自身節點的操作權限

身份的認證有4種方式:

world:默認方式,相當於全世界都能訪問

auth:代表已經認證通過的用戶(cli中可以通過addauth digest user:pwd 來添加當前上下文中的授權用戶)

digest:即用戶名:密碼這種方式認證,這也是業務系統中最常用的

ip:使用Ip地址認證

本文以digest認證方式展開說明。我們在zk的客戶端可以進行節點權限的查看和設置。

[root@master ~]# /usr/local/zookeeper-3.4.14/bin/zkCli.sh -server 192.168.35.6:2181     #登錄到zookeeper
WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.35.6:2181(CONNECTED) 0] 
[zk: 192.168.35.6:2181(CONNECTED) 0] create /zmc data        
Created /zmc
[zk: 192.168.35.6:2181(CONNECTED) 1] getAcl /zmc
'world,'anyone
: cdrwa
[zk: 192.168.35.6:2181(CONNECTED) 2] addauth digest user:password          #創建用戶名和密碼
[zk: 192.168.35.6:2181(CONNECTED) 3] setAcl /zmc auth:user:password:cdrwa  #給創建的目錄授權用戶名和密碼
cZxid = 0x500000102
ctime = Wed Jun 10 18:04:18 CST 2020
mZxid = 0x500000102
mtime = Wed Jun 10 18:04:18 CST 2020
pZxid = 0x500000102
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: 192.168.35.6:2181(CONNECTED) 4] getAcl /zmc           
'digest,'user:tpUq/4Pn5A64fVZyQ0gOJ8ZWqkY=
: cdrwa

[zk: 192.168.35.6:2181(CONNECTED) 5] ls /zmc
[]
[zk: 192.168.35.6:2181(CONNECTED) 6] 

從上述操作可以看出,zk新創建的znode默認訪問方式為world。我們通過addauth和setAcl給/test節點設置訪問權限為digest,操作權限為cdrwa,用戶名為user,密碼為password。

當然,我們使用getAcl是無法獲取可訪問用戶test的明文密碼的(要是可以獲取明文密碼,不又是個漏洞嘛~~)。

另啟zk客戶端,執行ls /test,發現當前用戶已經無法訪問/test節點,提示信息為“Authentication is not valid”。解決方法就是addauth添加認證用戶了,並且必須使用用戶名和密碼明文進行認證。

#登錄到另一個zookeeper
[root@slave1 ~]# /usr/local/zookeeper-3.4.14/bin/zkCli.sh -server 192.168.35.6:2181
WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.35.6:2181(CONNECTED) 0] ls /zmc        #沒有授權,查看失敗
Authentication is not valid : /zmc
[zk: 192.168.35.6:2181(CONNECTED) 1] addauth digest user:password      #授權成功
[zk: 192.168.35.6:2181(CONNECTED) 2] ls /zmc                           #查看成功
[]

[zk: 192.168.35.6:2181(CONNECTED) 3] getAcl /zmc
'digest,'user:tpUq/4Pn5A64fVZyQ0gOJ8ZWqkY=
: cdrwa
其他zookeeper集群也一樣
[root@slave1 ~]# /usr/local/zookeeper-3.4.14/bin/zkCli.sh -server 192.168.35.7:2181
WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.35.7:2181(CONNECTED) 0] ls /zmc         #沒有授權,查看失敗
Authentication is not valid : /zmc
[zk: 192.168.35.7:2181(CONNECTED) 1] addauth digest user:password      #授權成功
[zk: 192.168.35.7:2181(CONNECTED) 2] ls /zmc                           #查看成功
[]

[zk: 192.168.35.7:2181(CONNECTED) 3] getAcl /zmc
'digest,'user:tpUq/4Pn5A64fVZyQ0gOJ8ZWqkY=
: cdrwa

    注意:給/路徑加授權,並沒有給/路徑底下的目錄加授權,此時直接訪問/路徑底下的目錄是可以直接查看成功的,例如現在zookeerper有/demo1,/demo2兩個路徑,給setAcl / auth:user:password:cdrwa,之后通過zk客戶端連接zk,沒授權的話不可以ls /路徑,但是可以直接訪問/demo1,/demo2,如果需要對/demo1加認證需要setAcl /demo1 auth:user:password:cdrwa。

去除授權的話  直接 setAcl 路徑 world:anyone:cdrwa

參考:https://blog.csdn.net/weixin_45858439/article/details/106680860


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM