CVE-2022-24706
Apache CouchDB
2022-08-25
Apache CouchDB contains an insecure default initialization of resource vulnerability which can allow an attacker to escalate to administrative privileges.
Технический анализ и план устранения
Суть уязвимости
Уязвимость CVE-2022-24706 связана с небезопасной конфигурацией по умолчанию в распределенной системе Apache CouchDB. Проблема заключается в том, что при установке CouchDB автоматически настраивается на использование фиксированного и общеизвестного значения cookie для аутентификации между узлами кластера (Erlang Cookie).
Если администратор не изменил это значение после установки, злоумышленник, имеющий доступ к порту 4369 (EPMD) или напрямую к порту распределения Erlang (обычно 9100-9200), может использовать стандартный cookie для получения полного контроля над узлом Erlang. Это позволяет выполнять произвольный код от имени пользователя, запустившего CouchDB, и обходить все механизмы авторизации базы данных, получая права администратора.
Как исправить
Основной метод исправления — обновление Apache CouchDB до версии 3.2.2 или выше. В новых версиях инсталлятор принудительно требует установки уникального значения cookie.
Если обновление невозможно, необходимо вручную изменить Erlang Cookie на всех узлах кластера:
- Сгенерируйте новую сложную строку для cookie.
- Отредактируйте файл конфигурации
vm.args(путь по умолчанию в Linux:/opt/couchdb/etc/vm.args). - Найдите строку, начинающуюся с
-setcookie. - Замените стандартное значение (например,
monster) на ваше новое значение.
-setcookie <ВАШ_НОВЫЙ_СЛОЖНЫЙ_COOKIE>
- Перезапустите службу CouchDB.
systemctl restart couchdb
- Повторите процедуру на всех узлах кластера, используя одинаковое новое значение cookie, чтобы узлы могли взаимодействовать друг с другом.
Временные меры
Если вы не можете немедленно обновить систему или изменить cookie, примените следующие меры сетевой безопасности:
- Настройте межсетевой экран (Firewall) так, чтобы порты
4369(EPMD) и диапазон портов распределения Erlang (по умолчанию9100-9200) были доступны только для доверенных IP-адресов внутри вашего кластера.
iptables -A INPUT -p tcp -s <IP_ДРУГОГО_УЗЛА> --dport 4369 -j ACCEPT
iptables -A INPUT -p tcp --dport 4369 -j DROP
-
Убедитесь, что CouchDB слушает только внутренний сетевой интерфейс, если вам не требуется доступ к API извне.
-
Проверьте текущее значение cookie в запущенной системе, чтобы убедиться в наличии проблемы.
ps aux | grep setcookie
Если в выводе вы видите -setcookie monster, ваша система находится в зоне критического риска.