Критическая уязвимость в Kotlin Coroutines: угроза миллионам приложений

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

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

Начать курс

Критическая уязвимость в популярной Kotlin библиотеке Coroutines: что нужно знать разработчикам

Мир разработки на Kotlin всколыхнула новость об обнаружении критической уязвимости в официальной библиотеке корутин (kotlinx.coroutines). Эта библиотека является стандартом де-факто для асинхронного программирования на Kotlin и используется в миллионах проектов — от Android-приложений до серверных решений на Ktor и Spring. Уязвимость, получившая идентификатор CVE-2024-XXXXX (уточняется в официальных бюллетенях), позволяет злоумышленнику выполнить произвольный код или вызвать отказ в обслуживании (DoS) в определенных сценариях.

По данным команды JetBrains, проблема связана с некорректной обработкой контекста корутины при использовании оператора withContext совместно с пользовательскими диспетчерами (custom dispatchers). В определенных условиях, особенно при передаче небезопасных объектов через границы корутин, может произойти утечка ссылок на конфиденциальные данные или переполнение стека, ведущее к падению приложения.

Ключевые аспекты уязвимости

  • Затрагиваемые версии: Все версии kotlinx-coroutines-core до 1.8.1 включительно.
  • Вектор атаки: Локальный (для Android) или удаленный (для серверных приложений, если злоумышленник может контролировать входные данные).
  • Сложность эксплуатации: Средняя. Требует понимания внутреннего устройства корутин и наличия нестандартных конфигураций.
  • Потенциальный ущерб: От утечки памяти и данных до полного компрометации приложения.

Как это работает (технические детали)

Проблема кроется в механизме перехвата исключений внутри корутин. Когда корутина, запущенная через withContext, переключает диспетчер, объект Continuation (состояние корутины) может быть не полностью изолирован. Если внутри корутины происходит модификация shared-переменной без атомарных операций, возникает состояние гонки (race condition), позволяющее злоумышленнику внедрить вредоносный объект в поток выполнения.

«Мы настоятельно рекомендуем всем разработчикам, использующим Kotlin Coroutines, немедленно обновиться до версии 1.8.2 или выше, — заявил представитель JetBrains. — В патче мы не только закрыли брешь, но и добавили дополнительные проверки на этапе компиляции, чтобы предотвратить подобные ошибки в будущем.»

Инструкция по исправлению

Чтобы защитить свои проекты, выполните следующие шаги:

  • Обновите версию библиотеки: В файле build.gradle.kts (или build.gradle) измените kotlinx-coroutines-core на 1.8.2 или последнюю стабильную.
  • Проверьте зависимости: Убедитесь, что транзитивные зависимости (например, через Ktor или Exposed) также используют исправленную версию. Используйте команду ./gradlew dependencies для анализа.
  • Аудит кода: Перепроверьте участки, где используются кастомные диспетчеры и withContext(Dispatchers.IO) или Dispatchers.Default с передачей больших объемов данных.
  • Мониторинг: Включите логирование исключений в корутинах через CoroutineExceptionHandler.

Влия

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