CVE-2023-38546
libcurl: когда посторонний файл может подменить cookie
Некоторые приложения с libcurl могли незаметно прочитать cookie из файла none. Ошибка требует особой последовательности действий в программе и не затрагивает обычную команду curl. Проверьте библиотеку и обновление приложения.
Кому нужно проверить
Разработчикам и администраторам программ, которые обращаются к сайтам через libcurl и сохраняют состояние сеанса. Владельцу сайта стоит передать этот разбор поставщику интеграции, фонового загрузчика или другого сетевого клиента. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.
В чём риск
Cookie — небольшая запись, которую программа отправляет сайту, например для сохранения состояния сеанса. Здесь ошибка возникает внутри сетевого клиента: при копировании настроек программа может принять посторонний локальный файл за источник таких записей. Подмена cookie способна изменить состояние последующих обращений; конкретный вред зависит от того, как принимающий сайт использует эти значения. Advisory не обещает автоматический захват аккаунта или выполнение кода. Один только старый пакет libcurl не доказывает, что все необходимые условия выполняются.
Затронутые версии
libcurl от 7.9.1 до 8.3.0 включительно. Программа должна включить обработку cookie, затем скопировать объект соединения через curl_easy_duphandle(). Если исходный объект не читал cookie из файла, копия могла получить имя файла none. Далее копию должны использовать без явного назначения другого источника cookie. В рабочем каталоге программы должен находиться доступный для чтения файл none подходящего формата, на содержимое которого может повлиять атакующий. Командный инструмент curl этой ошибкой не затронут.
Исправленные версии
Первое исправление upstream — libcurl 8.4.0. Это исторический порог для данной ошибки, а не рекомендация установить старый релиз сегодня. Выбирайте актуальное поддерживаемое обновление приложения или библиотеки. Для пакета ОС проверяйте уведомление поставщика: backport означает перенос исправления в пакет со старым базовым номером версии.
Что сделать
- 1Составьте список приложений, использующих libcurl, и узнайте версию библиотеки именно в их работающем окружении. Системная команда curl может использовать другую копию. Для готового приложения запросите сведения у поставщика; для собственной сборки проверьте зависимости и состав контейнерного образа.
- 2Попросите разработчика проверить вызовы curl_easy_duphandle(), включение cookie и назначение источника cookie после копирования. Выясните рабочий каталог процесса и кто может создавать в нём файлы. Не создавайте файл none для эксперимента на рабочем сервере и не публикуйте содержимое cookie.
- 3До обновления ограничьте запись в рабочий каталог доверенной служебной учётной записью, если это совместимо с приложением. Это уменьшает возможность подложить файл, но не исправляет библиотеку и не помогает против уже присутствующего недоверенного файла. Не удаляйте файл с таким именем вслепую: он может принадлежать другой функции программы.
- 4Сохраните конфигурацию и проверенную резервную копию данных приложения. На тестовой копии установите поддерживаемое исправленное обновление; для статически встроенной libcurl нужна пересборка самого приложения. Проверьте обычный вход, повторные запросы и сохранение сеанса без использования реальных пользовательских cookie.
- 5Выполните обновление в согласованное окно и перезапустите затронутые процессы, чтобы они использовали новую библиотеку. Заранее подготовьте восстановление предыдущего образа и конфигурации. Если откат вернёт уязвимую библиотеку, оставьте затронутую функцию ограниченной до исправления.
- 6После обновления подтвердите состав работающего образа и результат обычных интеграционных тестов. Просмотрите ошибки сеансов за период эксплуатации старой версии. Отсутствие ошибок не доказывает, что подмены никогда не было. Универсальной безопасной команды, подтверждающей всю цепочку условий, нет: здесь нужна проверка кода и прав на рабочий каталог, описанная выше.
Как посторонний файл становится источником cookie
Приложение включает cookie и копирует объект соединения. Программа использует копию и загружает посторонние значения.
- 1Приложение включает cookie и копирует объект соединения.
- 2Ошибочная копия получает имя источника none.
- 3В рабочем каталоге существует читаемый файл none с cookie.
- 4Программа использует копию и загружает посторонние значения.
Как не подпустить ботов к сайту
BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.
Первоисточники
Снизьте шанс атаки до того, как бот дойдёт до сайта
Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.