研究ZooKeeper時(shí)順便看到的,危害級(jí)別比較低,竟然上了CVE,目測(cè)Apache有干爹照顧。
對(duì)node的訪問(wèn),ZooKeeper提供了相應(yīng)的權(quán)限控制,即便用訪問(wèn)控制列表ACL來(lái)進(jìn)行實(shí)現(xiàn)。1個(gè)ACL只從屬于1個(gè)特定的node,而對(duì)這個(gè)node的子節(jié)點(diǎn)是無(wú)效的,也就是不具有遞歸性。比如/app只能被10.10.10.1訪問(wèn),/app/test為任何人都可以訪問(wèn)(world,anyone)。
創(chuàng)建node的時(shí)候如果不指明,那末默許是anyone:
用于訪問(wèn)控制的模式有:
(1)world 代表任何用戶(hù)
(2)auth 不使用任何id,代表任何已認(rèn)證過(guò)的用戶(hù)
(3)digest 使用username:password認(rèn)證,password使用md5哈希以后base64再編碼,現(xiàn)改成了sha1加密。
(4)ip 用客戶(hù)真?zhèn)€ip作為ACL的標(biāo)識(shí)。
CVE⑵014-085是這么說(shuō)的:
Apache Zookeeper logs cleartext admin passwords, which allows local users to obtain sensitive information by reading the log.
在zookeeper中zoo.cfg中可以配置dataLogDir來(lái)單獨(dú)放置事務(wù)log,可以很好的避免與普通log和內(nèi)存快照混合。
但是Zookeeper中使用了明文來(lái)顯示密碼,這就致使了信息的泄漏。
做個(gè)例子看看。
如果訪問(wèn)1個(gè)受限制的資源,沒(méi)有攜帶驗(yàn)證信息的話:
受限制的信息為/javaclient/authtest,設(shè)置了ACL為digest,口令為1234.
在java客戶(hù)端中,我們可使用ZooKeeper的addAuthInfo來(lái)攜帶認(rèn)證信息。
如果沒(méi)有通過(guò)驗(yàn)證,就觸發(fā)異常:
本地使用這個(gè)漏洞查看log,就能夠看到明文的digest,造成信息泄漏,如果是admin的密碼,就會(huì)造成更大的影響。
訪問(wèn)logs目錄,grep1下:
看到了認(rèn)證中客戶(hù)端使用的密碼1234。
這個(gè)漏洞利用場(chǎng)景應(yīng)當(dāng)是內(nèi)網(wǎng)滲透中遇到ZooKeeper集群后,可以查找事務(wù)日志來(lái)獲得admin的密碼或其他敏感資源的認(rèn)證方法。