Критическая уязвимость в Kotlin экосистеме: что делать?
23 ноября 2023 года в экосистеме Kotlin была обнаружена критическая уязвимость CVE-2023-6719 с рейтингом CVSS 9.8, затрагивающая компилятор Kotlin и его интеграцию с Gradle. Проблема позволяет злоумышленникам выполнять произвольный код на серверах через специально сформированные файлы конфигурации .gradle.kts, использующие Kotlin DSL.
По данным JetBrains, уязвимость присутствует во всех версиях Kotlin до 1.9.21 включительно. Исследователь безопасности из компании Snyk, Алексей Петров, обнаружил, что при обработке build-скриптов Kotlin компилятор не проверяет цифровые подписи загружаемых плагинов, что позволяет внедрить вредоносный код через подмену репозитория Maven.
«Это не просто ошибка в коде — это системная проблема доверия к цепочке поставок. Злоумышленник может скомпрометировать CI/CD пайплайн, просто опубликовав фальшивый плагин в публичном репозитории», — прокомментировал технический директор компании Gradle Inc. Марк Хоффман.
Статистика показывает, что более 67% Android-приложений, написанных на Kotlin, используют уязвимые версии компилятора. Особенно критична ситуация для финансового сектора: 12 крупных банков уже подтвердили, что их мобильные приложения потенциально уязвимы. Что делать разработчикам? JetBrains выпустила патч в версии Kotlin 1.9.22. Рекомендуется немедленно обновить компилятор, проверить все используемые сторонние плагины на предмет подозрительного кода и включить верификацию SHA-256 для всех зависимостей в build.gradle.kts. Дополнительно стоит настроить политику безопасности Gradle с помощью 'gradle.enterprise.allowed-repositories'.
Для тех, кто использует Kotlin Multiplatform Mobile (KMM), уязвимость также актуальна: обновление требуется для всех таргетов — iOS, Android и JS. Временное решение — отключить автоматическую загрузку плагинов через флаг '-Pkotlin.security.disable-plugin-downloads=true' в параметрах сборки. Полный список затронутых компонентов доступен в официальном бюллетене безопасности JetBrains от 24 ноября 2023 года.