The OpenNET Project / Index page

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

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

15.11.2017 23:43

Опубликованы сведения о двух уязвимостях, устранённых в недавно опубликованных выпусках документ-ориентированной СУБД 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 3.0
Короткая ссылка: https://opennet.ru/47574-couchdb
Ключевые слова: couchdb
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (10) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | 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 +/
    > При наличии дубликатов ключей парсер на Erlang выдаёт первое совпадение

    "If there is more than one entry in a list for a certain key, the first occurrence normally overrides any later" - прочитать и подумать, видать, не судьба была.
    Вот хороший пример того, что и на эрланге лажануть можно.

     
     
  • 2.10, Аноним (-), 01:58, 16/11/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Вот хороший пример того, что и на эрланге лажануть можно

    ... если ты яваскриптер.

     
  • 2.13, Led (ok), 03:37, 16/11/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ага. И поэтому "реализация на JavaScript выдаст пустую строку". Наверное потому, что жавоскритокодеры понимаю "first occurrence" как "последнее вхождение".
     

  • 1.11, Аноним (-), 02:00, 16/11/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    CouchDB уже несколько лет не используется в npm. Они просто поддерживают старое апи для совместимости. В блоге автора npm на медиуме описана текущая архитектура проекта.
     
     
  • 2.12, Вы забыли заполнить поле Name (?), 03:19, 16/11/2017 [^] [^^] [^^^] [ответить]  
  • +/
    http://blog.npmjs.org/post/75707294465/new-npm-registry-architecture
     

  • 1.23, Аноним (-), 20:07, 28/11/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо, будем обновляться.
     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру