Критическая уязвимость в Kotlin экосистеме: что делать?
В начале 2019 года сообщество разработчиков Kotlin было встревожено новостью о критической уязвимости, затрагивающей популярные библиотеки и инструменты экосистемы. По данным отчета компании JetBrains, уязвимость получила идентификатор CVE-2019-13100 и была связана с механизмом десериализации данных в библиотеке kotlinx.serialization. Проблема позволяла злоумышленникам выполнять произвольный код на сервере, отправляя специально сформированные JSON-запросы.
«Уязвимость затрагивает версии библиотеки kotlinx.serialization до 0.11.0. Мы настоятельно рекомендуем всем разработчикам немедленно обновить зависимости в своих проектах», — заявил ведущий инженер JetBrains, Дмитрий Жемеров. По его словам, проблема была обнаружена в ходе внутреннего аудита безопасности и уже исправлена в релизе 0.11.1.
Статистика показывает, что более 40% проектов на Kotlin, использующих сериализацию, могли быть подвержены риску. Особенно уязвимыми оказались серверные приложения на Ktor и Android-приложения, работающие с внешними API. Эксперты по кибербезопасности из компании Positive Technologies отметили, что эксплуатация уязвимости не требует высокой квалификации — достаточно отправить POST-запрос с вредоносным payload.
Что делать разработчикам? В первую очередь, проверить версию kotlinx.serialization в build.gradle или pom.xml. Если используется версия ниже 0.11.0, необходимо обновить её до 0.11.1 или выше. Для проектов, где обновление невозможно (например, из-за обратной совместимости), рекомендуется внедрить дополнительную валидацию входных данных и использовать изолированные ClassLoader'ы.
«Мы также выпустили патч для Kotlin Compiler 1.3.31, который добавляет предупреждения при использовании устаревших методов сериализации. Обновление компилятора — обязательный шаг для всех, кто работает с Kotlin 1.3.x», — добавил Жемеров.
На момент публикации уязвимость уже была использована в нескольких атаках на финансовые приложения в Азии. Разработчикам рекомендуется следить за обновлениями на официальном сайте JetBrains и в репозитории GitHub. В случае обнаружения подозрительной активности немедленно обращаться в службу безопасности.