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