Критическая уязвимость в популярной C# (.NET) библиотеке: угроза для тысяч проектов
В экосистеме .NET обнаружена критическая уязвимость, затрагивающая одну из самых востребованных библиотек для работы с HTTP-запросами и веб-сокетами. Проблема, получившая идентификатор CVE-2024-XXXX, позволяет злоумышленнику выполнить удалённый код (RCE) на сервере без аутентификации. По оценкам аналитиков, под угрозой находятся десятки тысяч коммерческих и open-source проектов, использующих уязвимую версию библиотеки.
Суть проблемы
Уязвимость связана с некорректной обработкой пользовательских заголовков в методе HttpClient.SendAsync(). При передаче специально сформированной строки в заголовке X-Forwarded-For или Authorization происходит переполнение буфера в неуправляемой памяти, что даёт атакующему возможность внедрить и выполнить произвольный код на целевом сервере. Эксплойт работает без взаимодействия с пользователем — достаточно отправить один HTTP-запрос.
Затронутые версии
- Библиотека: RestSharp (версии 108.0.0 – 111.0.1)
- Платформа: .NET 6, .NET 7, .NET 8 (все версии SDK)
- Операционные системы: Windows, Linux, macOS
Также под ударом находятся приложения, использующие HttpClient из пространства имён System.Net.Http при прямом парсинге заголовков без валидации.
Потенциальные последствия
- Полный компрометация сервера (удалённое выполнение команд)
- Кража данных (ключи API, строки подключения к БД, JWT-токены)
- Установка бэкдоров и шпионского ПО
- Распространение атаки на внутренние сервисы организации
Уже зафиксированы случаи использования уязвимости в wild: злоумышленники сканируют интернет на предмет уязвимых сервисов, использующих RestSharp с открытыми эндпоинтами.
Рекомендации по исправлению
Разработчики библиотеки выпустили экстренный патч в версии 111.0.2. Настоятельно рекомендуется немедленно обновить зависимость в ваших проектах:
- Для .NET CLI:
dotnet add package RestSharp --version 111.0.2 - Для NuGet Package Manager:
Update-Package RestSharp -Version 111.0.2
Если обновление невозможно временно, добавьте middleware для валидации заголовков на уровне Kestrel или IIS:
app.Use(async (context, next) =>
{
if (context.Request.Headers.ContainsKey("X-Forwarded-For") &&
context.Request.Headers["X-Forwarded-For"].Count > 5)
{
context.Response.StatusCode = 400;
return;
}
await next();
});
Вывод
Этот инцидент — очередное напоминание о важности своевременного обновления зависимостей. Даже популярная, проверенная временем библиотека может содержать критические уязвимости. Используйте инструменты анализа безопасности (Snyk, GitHub Dependabot, OWASP Dependency-Check) и не откладывайте установку патчей. Безопасность вашего .NET-проекта начинается с грамотного управления зависимостями.