
# CVE-2023-3635 Okio 2.9.0 재현기 Okio 2.9.0의 CVE-2023-3635 재현기로, React Native의 버전 카탈로그가 취약한 의존성을 고정(pin)하여 Android 앱에 영향을 미치는 방식을 보여줍니다.
facebook/react-native#58148에 대한 재현기(Reproducer):
React Native 자체의 packages/react-native/gradle/libs.versions.toml 파일이 okhttp = "4.9.2" /
okio = "2.9.0"을 고정(pin)하고 있으며, okio 2.9.0은
CVE-2023-3635 / GHSA-w33c-445m-f8w7의 영향을 받고,
이는 okio 3.4.0에서 수정되었습니다.
이를 만들기 위해 수정된 앱 코드는 없습니다. ReproducerApp은 [email protected](이 템플릿의
현재 latest로, main의 0.87.0-main과 일치)을 대상으로 생성된
npx @react-native-community/cli init의 완전히 수정되지 않은 출력물입니다. 취약한 고정 버전은
소비 앱이 하는 어떤 것에서가 아니라 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 아티팩트를 통해 전이적으로(transitively) 가져와집니다.
이것은 새로운 React Native 재현기 프로젝트입니다.
이 프로젝트는 npx @react-native-community/cli init으로 생성되었으며, 기본(vanilla) 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 에뮬레이터 또는 iOS 시뮬레이터 에서 새 앱이 실행되는 것을 볼 수 있습니다.
이것은 앱을 실행하는 한 가지 방법입니다 — Android Studio 및 Xcode 내에서 각각 직접 실행할 수도 있습니다.
이제 앱을 성공적으로 실행했으니, 수정해 봅시다.
원하는 텍스트 편집기에서 App.tsx를 열고 몇 줄을 수정하세요.
Android용: R 키를 두 번 누르거나 개발자 메뉴(Ctrl + M (Windows 및 Linux) 또는 Cmd ⌘ + M (macOS))에서 "Reload" 를 선택하여 변경 사항을 확인하세요!
iOS용: iOS 시뮬레이터에서 Cmd ⌘ + R을 눌러 앱을 다시 로드하고 변경 사항을 확인하세요!