CVE-2024-11053
curl и .netrc: утечка пароля при перенаправлении запроса
Если curl берёт пароль из .netrc и следует перенаправлению, при определённой записи для второго сервера пароль мог уйти не тому получателю. Проверьте настройки задания и установите полное исправление, учитывающее дополнительные патчи.
Кому нужно проверить
Администраторам автоматических загрузок, резервного копирования и интеграций, использующих curl; разработчикам приложений с libcurl и хранением паролей в .netrc. Важна не только марка продукта, но и конкретная версия, способ установки, операционная система и конфигурация.
В чём риск
Перенаправление — ответ сервера с указанием продолжить обращение по другому адресу. Файл .netrc позволяет программе взять логин и пароль без ручного ввода. В затронутой версии при переходе на другой сервер пароль первого сервера мог сохраниться, хотя запись для нового получателя его не задавала. Подтверждённое последствие — передача пароля неподходящему получателю. Шифрование HTTPS защищает передачу от постороннего наблюдателя, но не скрывает пароль от самого сервера, которому программа его отправила. Ошибка не означает, что любой запрос curl раскрывает учётные данные.
Затронутые версии
curl и libcurl от 7.76.0 до 8.11.0 включительно. Одновременно используются файл .netrc с учётными данными и следование HTTP-перенаправлениям. Для имени сервера назначения должна подходить запись .netrc, в которой отсутствует пароль либо одновременно имя пользователя и пароль; это может быть и подходящая запись default. Само наличие файла .netrc или использование HTTPS не определяет применимость.
Исправленные версии
Первое исправление выпущено в 8.11.1, но актуальный advisory рекомендует curl/libcurl 8.12.0 или новее. Для 8.11.1 требуется дополнительный патч 9fce2c5. При переносе исправлений в версии до 8.11.0 производитель отдельно требует изменение 9bee39b. Поэтому проверяйте полный набор исправлений у поставщика, а не один номер или один commit. Сегодня выбирайте поддерживаемый релиз с этими исправлениями.
Что сделать
- 1Установите версию curl в среде конкретного задания. Для приложения на libcurl выясните библиотеку его процесса или образа. Затем локально проверьте, включены ли чтение .netrc и следование перенаправлениям. Не копируйте .netrc, аргументы с паролями и подробные сетевые трассировки в тикеты или публичные журналы.
- 2Проверьте записи для ожидаемых получателей, включая default: не отсутствуют ли в подходящей записи пароль или обе части учётных данных. Не заполняйте поля выдуманными секретами ради обхода ошибки. Если программа зависит от неполных записей, согласуйте изменение с её владельцем.
- 3Временная мера производителя — не сочетать .netrc с перенаправлениями. Если можно, приостановите автоматическое следование переходам в затронутом задании и согласуйте разрешённый конечный адрес. Это может остановить загрузку и требует функциональной проверки; мера не исправляет библиотеку.
- 4Сохраните настройки задания и защищённую резервную копию необходимых данных. На тестовой среде обновите curl/libcurl до поддерживаемого исправленного пакета. Проверяйте переходы только между своими тестовыми сервисами с отдельными тестовыми учётными данными; реальные пароли для проверки не нужны.
- 5Разверните обновление, пересоберите приложения со встроенной библиотекой и перезапустите долгоживущие процессы. План отката должен сохранять ограничение перенаправлений, если возвращается уязвимая версия. После обновления убедитесь, что обычная загрузка завершается и используется ожидаемый конечный сервер.
- 6Если журналы и настройки дают основания полагать, что пароль ушёл постороннему получателю, замените именно затронутые учётные данные и проверьте их использование. Не считайте смену пароля заменой исправлению: без обновления новый пароль может попасть в ту же цепочку.
Где пароль меняет получателя
Программа берёт пароль первого сервера из .netrc. Уязвимая программа может отправить второму серверу прежний пароль.
- 1Программа берёт пароль первого сервера из .netrc.
- 2Первый сервер предлагает перейти на другой адрес.
- 3Для второго сервера подходит неполная запись .netrc.
- 4Уязвимая программа может отправить второму серверу прежний пароль.
Примеры конфигурации и проверки
curl -q --versionСреда: терминал Linux/macOS с установленным curl. Запускайте обычным пользователем в том контейнере или окружении, где работает задание; права администратора не нужны. Параметр -q первым аргументом отключает чтение стандартного файла настроек curl. Ожидается версия инструмента и связанных библиотек, а не ответ сайта. Команда не читает .netrc для передачи пароля и ничего не изменяет, откат не нужен. Она не подтверждает наличие патчей дистрибутива и не проверяет отдельную libcurl внутри другого приложения.
Как не подпустить ботов к сайту
BotProtection принимает запросы перед вашим сайтом и фильтрует автоматизированные обращения. Поэтому ботам сложнее добраться до уязвимого компонента и начать его проверять или атаковать, а вероятность успешной автоматизированной атаки становится значительно ниже. Это дополнительный слой защиты: обновление уязвимых компонентов, проверка журналов и реагирование на инциденты остаются обязательными.
Первоисточники
Снизьте шанс атаки до того, как бот дойдёт до сайта
Подключите BotProtection как фильтр перед сайтом: подозрительные автоматизированные запросы отсекаются до обращения к вашему серверу. Это значительно снижает вероятность автоматизированной атаки, но не исправляет саму уязвимость, поэтому обновление и настройка компонентов остаются обязательными.