The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

15.11.2017 23:43  Уязвимость в 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-комманды в окружении операционной системы сервера, с правами под которыми выполняется СУБД. В том числе можно инициировать загрузку из глобальной сети произвольного скрипта и его выполнение на сервере.

  1. Главная ссылка к новости (http://seclists.org/oss-sec/20...)
  2. OpenNews: Следом за MongoDB начались атаки на CouchDB, Hadoop и ElasticSearch
  3. OpenNews: Выпуск документ-ориентированной БД Apache CouchDB 2.0
  4. OpenNews: Выпуск СУБД Couchbase Server 4.0, сочетающей возможности CouchDB, memcached и Membase
  5. OpenNews: Незащищённость NPM к атакам по внедрению вредоносных модулей-червей
  6. OpenNews: Более половины npm-пакетов могли быть скомпрометированы из-за ненадёжных паролей доступа
Лицензия: CC-BY
Тип: Проблемы безопасности
Ключевые слова: couchdb
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.3, Аноним, 00:44, 16/11/2017 [ответить] [смотреть все]
  • +2 +/
    Сейчас должен прибежать тот, который javascript не нужен вспомнити npm left pad... весь текст скрыт [показать]
     
     
  • 2.4, нах, 00:53, 16/11/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    дрыхнет, небось, зараза. Ну ничего, вспомим leftpad без него.

     
  • 2.16, Аноним, 09:24, 16/11/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    Зачем? Мы это и так знаем.
     
  • 2.17, Аноним, 13:48, 16/11/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +2 +/
    javascript не нужен, вспомните npm left pad!
     
  • 1.6, Аноним, 01:08, 16/11/2017 [ответить] [смотреть все]  
  • –2 +/
    If there is more than one entry in a list for a certain key, the first occurren... весь текст скрыт [показать]
     
     
  • 2.10, Аноним, 01:58, 16/11/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +1 +/
    если ты яваскриптер ... весь текст скрыт [показать] [показать ветку]
     
  • 2.13, Led, 03:37, 16/11/2017 [^] [ответить] [смотреть все] [показать ветку]  
  • +3 +/
    Ага И поэтому реализация на JavaScript выдаст пустую строку Наверное потому,... весь текст скрыт [показать] [показать ветку]
     
  • 1.11, Аноним, 02:00, 16/11/2017 [ответить] [смотреть все]  
  • +/
    CouchDB уже несколько лет не используется в npm Они просто поддерживают старое ... весь текст скрыт [показать]
     
  • 1.23, Аноним, 20:07, 28/11/2017 [ответить] [смотреть все]    [к модератору]  
  • +/
    Спасибо, будем обновляться.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor