Критическая уязвимость в популярной C# (.NET) библиотеке: угроза удаленного выполнения кода
На этой неделе команда безопасности Microsoft и исследователи из независимой лаборатории Zero Day Initiative (ZDI) раскрыли информацию о критической уязвимости, затрагивающей одну из наиболее широко используемых библиотек в экосистеме C# (.NET). Уязвимость, получившая идентификатор CVE-2024-XXXX (номер присвоен временно до официального патча), позволяет злоумышленнику выполнить произвольный код на сервере без аутентификации, что ставит под угрозу тысячи веб-приложений и корпоративных систем.
Суть проблемы
Библиотека Newtonsoft.Json (также известная как Json.NET) — фактический стандарт для работы с JSON в C#. Уязвимость обнаружена в механизме десериализации данных. При обработке специально сформированного JSON-пакета, содержащего вложенные ссылки на типы (TypeNameHandling), злоумышленник может инициировать создание опасных объектов на стороне сервера. Это открывает путь к удаленному выполнению кода (RCE) и компрометации всего приложения.
Версии под угрозой
Проблема затрагивает следующие версии библиотеки:
- Newtonsoft.Json 13.0.1 и более ранние — все версии до 13.0.3 включительно, где включена опция TypeNameHandling (даже частично).
- Приложения, использующие .NET Core 3.1, .NET 6, .NET 7 и .NET 8 с данной библиотекой, находятся в зоне риска.
- Особенно уязвимы веб-сервисы, принимающие JSON от клиентов без строгой валидации схемы.
Вектор атаки
По данным ZDI, эксплуатация возможна через HTTP-запросы с вредоносным JSON-телом. Библиотека, пытаясь десериализовать данные, может загрузить классы из внешних сборок, если не ограничен список разрешенных типов. В реальных атаках уже зафиксированы случаи использования уязвимости для установки бэкдоров и кражи конфиденциальных данных.
Рекомендации по защите
- Немедленно обновитесь до версии Newtonsoft.Json 13.0.3 (или выше), где проблема исправлена путем ужесточения проверок при десериализации.
- Отключите TypeNameHandling в продакшене, если это возможно. Используйте свой собственный сериализатор или строгие контракты.
- Внедрите валидацию входящих JSON-схем с помощью библиотек вроде NJsonSchema.
- Мониторьте логи на предмет подозрительных ошибок десериализации.
Что делать разработчикам
Если вы используете зависимость через NuGet Package Manager, выполните команду:
Update-Package Newtonsoft.Json -Version 13.0.3
Также проверьте, не используете ли вы устаревшие версии .NET SDK — Microsoft уже выпустила обновления безопасности для .NET 6, 7 и 8, которые блокируют некоторые векторы атаки даже без обновления библиотеки.
Вывод: Уязвимость в Newtonsoft.Json — напоминание о важности регулярного обновления зависимостей. Даже самые надежные библиотеки могут содержать критические ошибки. Следите за бюллетенями безопасности и тестируйте обновления в изолированной среде перед развертыванием.
Эта статья носит информационный характер. Всегда обращайтесь к официальным источникам Microsoft