Критическая уязвимость в популярном модуле React Native угрожает системам разработчиков

vulnerability

Исследователи кибербезопасности из компании JFrog обнаружили критическую уязвимость удаленного выполнения кода в широко используемом пакете для разработки мобильных приложений React Native. Уязвимость CVE-2025-11953 затрагивает пакет @react-native-community/cli-server-api, который еженедельно скачивается около двух миллионов раз, что создает серьезную угрозу для миллионов разработчиков по всему миру.

Детали уязвимости

Уязвимость получила максимальную оценку по шкале CVSS - 9.8 баллов, что свидетельствует о ее критической серьезности и простоте эксплуатации. Проблема затрагивает версии пакета от 4.8.0 до 20.0.0-alpha.2 включительно и позволяет неавторизованным злоумышленникам выполнять произвольные команды операционной системы на компьютерах, где запущен сервер разработки React Native.

Источник проблемы кроется в небезопасной обработке пользовательского ввода в эндпоинте /open-url сервера разработки Metro. Когда разработчики запускают стандартные команды npm start или npx react-native start для запуска среды разработки, сервер обрабатывает POST-запросы, содержащие непроверенные данные, которые передаются напрямую в функцию open() из пакета open. Эта функция выполняет команды на уровне системы без надлежащей валидации, создавая путь для внедрения вредоносных команд злоумышленниками.

На системах Windows исследователи продемонстрировали полное выполнение произвольных команд с контролем всех параметров. В ходе тестирования была успешно создана файл pwned.txt в директории C:\temp с помощью команды cmd.exe /c, что доказало возможность произвольного выполнения кода. Хотя на macOS и Linux системы демонстрируют несколько более ограниченные пути эксплуатации из-за различий в механизмах выполнения кода, исследователи полагают, что достижение произвольного выполнения команд на этих платформах также возможно при дополнительном исследовании.

Усугубляет ситуацию обнаружение второй уязвимости в базовом коде React Native, из-за которой сервер разработки привязывается ко всем сетевым интерфейсам, а не только к localhost, несмотря на сообщения, указывающие на работу исключительно в локальном режиме. Эта неправильная конфигурация преобразует потенциально локальную проблему безопасности в критическую уязвимость, удаленно эксплуатируемую через сеть.

Под угрозой находятся разработчики, которые инициировали проекты React Native с использованием уязвимых версий @react-native-community/cli и запускают сервер разработки Metro через стандартные команды. При этом разработчики, использующие фреймворки типа Expo с другими серверами разработки, обычно обычно не затрагиваются.

Для проверки наличия уязвимого пакета в проекте рекомендуется перейти в папку проекта и выполнить команду npm list @react-native-community/cli-server-api. Пакет также может быть глобально установлен в системе, что можно проверить с помощью npm list -g @react-native-community/cli-server-api.

Команда безопасности Meta оперативно отреагировала на раскрытие уязвимости, выпустив исправление в версии 20.0.0 затронутого пакета. Разработчикам следует немедленно обновить @react-native-community/cli-server-api до версии 20.0.0 или выше во всех своих проектах React Native.

В ситуациях, когда обновление оказывается затруднительным, разработчики могут снизить риск, явно привязав сервер разработки к интерфейсу localhost с использованием флага -host 127.0.0.1 при запуске сервера, например: npx react-native start -host 127.0.0.1.

Это обнаружение подчеркивает, насколько серьезные уязвимости выполнения кода продолжают появляться в производственном программном обеспечении, особенно когда опасные функции находятся в сторонних зависимостях. Инцидент служит напоминанием, что безопасные практики программирования и автоматизированное сканирование безопасности остаются необходимыми для предотвращения легко эксплуатируемых уязвимостей до их попадания в производственные среды.

Уязвимость демонстрирует, что даже в современных инструментах разработки могут сохраняться классические проблемы безопасности, связанные с неправильной обработкой пользовательского ввода. Особенность данной ситуации заключается в том, что проблема затрагивает именно среды разработки, что может привести к компрометации не только конкретных приложений, но и всей инфраструктуры разработчиков.

Ссылки

Комментарии: 0