
Воспроизведение CVE-2023-3635 в Okio 2.9.0, демонстрирующее, как каталог версий React Native фиксирует уязвимую зависимость, затрагивающую Android-приложения.
Репродуктор для facebook/react-native#58148:
собственный packages/react-native/gradle/libs.versions.toml React Native закрепляет okhttp = "4.9.2" /
okio = "2.9.0", а okio 2.9.0 затронут уязвимостью
CVE-2023-3635 / GHSA-w33c-445m-f8w7,
исправленной в okio 3.4.0.
Никакой код приложения не изменялся для этого. ReproducerApp — это полностью неизменённый результат
выполнения npx @react-native-community/cli init, сгенерированный для [email protected] (текущий
latest этого шаблона, соответствующий 0.87.0-main из main). Уязвимая версия закреплена в собственном
каталоге версий React Native, а не из-за чего-либо, что делает потребляющее приложение.
Для воспроизведения, из ReproducerApp/android:
./gradlew :app:dependencies --configuration releaseRuntimeClasspath | grep -iE "okhttp|okio"
Вывод (полный прогон сохранён в gradle-dependencies-output.txt):
com.squareup.okhttp3:okhttp-urlconnection:4.9.2
com.squareup.okhttp3:okhttp:4.9.2 (*)
com.squareup.okio:okio:2.9.0 (*)
com.squareup.okhttp3:okhttp:3.14.9 -> 4.9.2
com.squareup.okio:okio:2.8.0 -> 2.9.0
okhttp/okio попадают в фактический поставляемый releaseRuntimeClasspath приложения (не только в тестовую инфраструктуру),
будучи подтянутыми транзитивно через com.facebook.fresco:imagepipeline-okhttp3 и собственный
артефакт react-android React Native.
Это ваш новый проект-репродуктор React Native.
Этот проект создан с помощью npx @react-native-community/cli init и представляет собой ванильное приложение React Native.
[!IMPORTANT]
Убедитесь, что вы выполнили Настройку окружения React Native, чтобы у вас было рабочее окружение локально.
Сначала вам нужно запустить Metro, JavaScript бандлер, который поставляется с React Native.
Чтобы запустить Metro, выполните следующую команду из корня вашего проекта React Native:
# используя npm
npm start
# ИЛИ используя Yarn
yarn start
Пусть Metro Bundler работает в своём собственном терминале. Откройте новый терминал из корня вашего проекта React Native. Выполните следующую команду, чтобы запустить ваше приложение для Android или iOS:
# используя npm
npm run android
# ИЛИ используя Yarn
yarn android
Сначала убедитесь, что вы установили зависимости с помощью:
cd ios && bundle install && bundle exec pod install
Затем вы можете запустить приложение для iOS с помощью:
# используя npm
npm run ios
# ИЛИ используя Yarn
yarn ios
Если всё настроено правильно, вы должны вскоре увидеть ваше новое приложение, работающее в вашем Android Emulator или iOS Simulator, при условии, что вы правильно настроили эмулятор/симулятор.
Это один из способов запустить ваше приложение — вы также можете запустить его напрямую из Android Studio и Xcode соответственно.
Теперь, когда вы успешно запустили приложение, давайте изменим его.
Откройте App.tsx в вашем текстовом редакторе по выбору и отредактируйте несколько строк.
Для Android: Нажмите клавишу R дважды или выберите "Reload" из Developer Menu (Ctrl + M (на Windows и Linux) или Cmd ⌘ + M (на macOS)), чтобы увидеть ваши изменения!
Для iOS: Нажмите Cmd ⌘ + R в вашем iOS Simulator, чтобы перезагрузить приложение и увидеть ваши изменения!