Привет All!
Опубликованы [
http://seclists.org/oss-sec/2017/q4/279] сведения о двух
уязвимостях, устранённых в недавно опубликованных выпусках
документ-ориентированной СУБД Apache CouchDB 2.1.1 и 1.7.1. В своей комбинации
уязвимости позволяют провести атаку по удалённому выполнению произвольных
shell-команд на сервере с правами процесса CouchDB, имея доступ к БД.
Проблему усугубляет то, что по недосмотру или задумке администраторов многие БД
под управлением CouchDB не защищены и открыты для доступа без аутентификации,
чем уже пользуются [
https://www.opennet.ru/opennews/art.shtml?num=45903]
вредоносные программы-шифровальщики. Уязвимости позволяют не только получить
контроль над данными, но и продолжить атаку для получения контроля за всем
сервером. Так как CouchDB применяется в реестре NPM для упрощение репликации
данных на системы пользователей, уязвимости могли использоваться
[
https://justi.cz/security/2017/11/14/couchdb-rce-npm.html] для изменения
произвольных пакетов в реестре NPM, с которого еженедельно загружается более
трёх миллиардов пакетов.
Первая уязвимость (CVE-2017-12635)
[
https://security-tracker.debian.org/tracker/CVE-2017-12635] проявляется из-за
различий в работе используемых в CouchDB двух парсеров JSON, написанных на
Erlang и JavaScript. Парсер на Erlang допускает добавление записи в БД "_users"
с повторяющимися ключами, используемыми при определении прав доступа. В том
числе можно добавить дубликат записи с меткой "_admin", через которую
определяются пользователи с правами администратора. При наличии дубликатов
ключей парсер на Erlang выдаёт первое совпадение, а JavaScript последнее.
Например, для добавления пользователя с правами администратора можно выполнить:
curl -X PUT '
http://localhost:5984/_users/org.couchdb.user:oops'
--data-binary '{
"type": "user",
"name": "oops",
"roles": ["_admin"],
"roles": [],
"password": "password"
}'
В процессе обработки данного запроса, содержащего два ключа "roles", реализация
на Erlang обработает права "_admin", а реализация на JavaScript выдаст пустую
строку. Подобное поведение приводит к тому, что при наличии в JSON двух
повторяющихся ключей "roles", второй ключ будет использован при авторизации
операций записи документа, а первый при авторизации только что созданного
нового пользователя. Архитектура CouchDB не позволяет пользователям назначать
себе права доступа, но из-за выявленной уязвимости обычный пользователь может
назначить себе привилегии администратора.
Вторая уязвимость (CVE-2017-12636)
[
https://security-tracker.debian.org/tracker/CVE-2017-12636] присутствует в
средствах настройки CouchDB через HTTP(S) и позволяет изменить путь к некоторым
исполняемым файлам, вызываемым в процессе работы СУБД (параметр query_server).
Пользователь с правами администратора (данные права можно получить при помощи
первой уязвимости) может через манипуляцию с данными настройками вызвать любые
shell-комманды в окружении операционной системы сервера, с правами под которыми
выполняется СУБД. В том числе можно инициировать загрузку из глобальной сети
произвольного скрипта и его выполнение на сервере.
С уважением. Anton aka Stalker
Linux Registered User #386476
[#*TEAM:*#] [#_Злой СисОп_#] [*Heavy Metal!*] [*_Усачи_*]