Уязвимость в Apache CouchDB, позволяющая совершить атаку на реестр пакетов NPM

Опубликованы сведения о двух уязвимостях, устранённых в недавно опубликованных выпусках документ-ориентированной СУБД Apache CouchDB 2.1.1 и 1.7.1. В своей комбинации уязвимости позволяют провести атаку по удалённому выполнению произвольных shell-команд на сервере с правами процесса CouchDB, имея доступ к БД.

Проблему усугубляет то, что по недосмотру или задумке администраторов многие БД под управлением CouchDB не защищены и открыты для доступа без аутентификации, чем уже пользуются вредоносные программы-шифровальщики. Уязвимости позволяют не только получить контроль над данными, но и продолжить атаку для получения контроля за всем сервером. Так как CouchDB применяется в реестре NPM для упрощение репликации данных на системы пользователей, уязвимости могли использоваться для изменения произвольных пакетов в реестре NPM, с которого еженедельно загружается более трёх миллиардов пакетов.

Первая уязвимость (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) присутствует в средствах настройки CouchDB через HTTP(S) и позволяет изменить путь к некоторым исполняемым файлам, вызываемым в процессе работы СУБД (параметр query_server). Пользователь с правами администратора (данные права можно получить при помощи первой уязвимости) может через манипуляцию с данными настройками вызвать любые shell-комманды в окружении операционной системы сервера, с правами под которыми выполняется СУБД. В том числе можно инициировать загрузку из глобальной сети произвольного скрипта и его выполнение на сервере.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.