
CVE-2023-3635 の Okio 2.9.0 における再現コード。React Native のバージョンカタログが脆弱な依存関係を固定する仕組みを示し、Android アプリに影響を及ぼします。
facebook/react-native#58148 の再現リポジトリです:
React Native 自身の packages/react-native/gradle/libs.versions.toml は 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、main の 0.87.0-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 Native 自身の react-android アーティファクトを介して推移的に取り込まれます。
これはあなたの新しい React Native Reproducer プロジェクトです。
このプロジェクトは npx @react-native-community/cli init で作成された、素の React Native アプリです。
[!IMPORTANT]
React Native - 環境構築 を完了して、ローカルで動作する環境を用意してください。
まず、React Native に同梱されている JavaScript バンドラー である Metro を起動する必要があります。
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 でまもなく実行されているのが確認できるはずです。
これはアプリを実行する 1 つの方法です — Android Studio や Xcode から直接実行することもできます。
アプリの実行に成功したら、変更してみましょう。
任意のテキストエディターで App.tsx を開き、いくつかの行を編集します。
Android の場合: R キーを 2 回押すか、Developer Menu(Ctrl + M(Windows と Linux の場合)または Cmd ⌘ + M(macOS の場合))から "Reload" を選択して、変更を確認します!
iOS の場合: iOS Simulator で Cmd ⌘ + R を押してアプリをリロードし、変更を確認します!