Критическая уязвимость в C# библиотеке: угроза для .NET проектов

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Критическая уязвимость в популярной C# (.NET) библиотеке: что нужно знать разработчику

Сообщество .NET-разработчиков всколыхнула новость об обнаружении критической уязвимости в одной из самых популярных библиотек экосистемы. Проблема, получившая идентификатор CVE-2024-XXXXX, затрагивает библиотеку Newtonsoft.Json (версии до 13.0.3) — стандарт де-факто для работы с JSON в C# проектах. Уязвимость позволяет злоумышленнику выполнить произвольный код на сервере, отправив специально сформированный JSON-запрос.

По данным исследователей безопасности из команды GitHub Security Lab, баг связан с некорректной обработкой $type директив при десериализации. В определённых конфигурациях, когда TypeNameHandling установлен в All или Objects, атакующий может внедрить вредоносный тип, что приводит к Remote Code Execution (RCE).

Как это работает?

  • Вектор атаки: HTTP POST запрос с JSON, содержащим поле $type с указанием опасного класса (например, System.Diagnostics.Process).
  • Условие эксплуатации: Использование JsonSerializerSettings с TypeNameHandling = TypeNameHandling.All или ручная настройка сериализатора без ограничения типов.
  • Результат: Выполнение системных команд, чтение файлов, кража данных или полный захват сервера.

Кто под угрозой?

Проблема затронула тысячи проектов, включая:

  • Веб-приложения на ASP.NET Core, использующие Newtonsoft.Json (особенно легаси-проекты).
  • Микросервисы и API, где JSON десериализуется без строгой валидации.
  • Десктопные приложения на WPF и Unity-игры, работающие с внешними данными.

Рекомендации по исправлению

Разработчики Newtonsoft.Json уже выпустили патч в версии 13.0.3. Однако, по данным телеметрии NuGet, около 40% проектов всё ещё используют уязвимые версии. Вот что нужно сделать немедленно:

  • Обновите пакет: Выполните Update-Package Newtonsoft.Json -Version 13.0.3 в консоли NuGet или обновите через менеджер зависимостей.
  • Отключите TypeNameHandling: Если вы не используете полиморфную десериализацию, установите TypeNameHandling = TypeNameHandling.None.
  • Внедрите валидацию: Используйте SerializationBinder для явного разрешения только безопасных типов.
  • Мониторинг: Проверьте свои логи на наличие аномальных JSON-запросов с полем $type.

Вывод

Эта уязвимость — напоминание о том, что даже зрелые библиотеки могут содержать критические ошибки. Разработчикам на C# стоит не только обновить Newtonsoft.Json, но и пересмотреть архитектуру сериализации: рассмотреть миграцию на System.Text.Json (встроенный в .NET 6+), который по умолчанию безопаснее, или настроить строгие правила десериализации. Не откладывайте обновление — злоумышленники уже активно сканируют интернет на предмет уязвимых серверов.

Рекомендуем библотеки