
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 - Environment Setup पूरा कर लिया है ताकि आपके पास स्थानीय रूप से एक कार्यशील वातावरण हो।
सबसे पहले, आपको 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 में जल्द ही चलता हुआ दिखना चाहिए, बशर्ते आपने अपना emulator/simulator सही ढंग से सेट किया हो।
यह आपके ऐप को चलाने का एक तरीका है — आप इसे क्रमशः Android Studio और Xcode से सीधे भी चला सकते हैं।
अब जब आपने ऐप को सफलतापूर्वक चला लिया है, तो इसे संशोधित करते हैं।
अपने पसंदीदा टेक्स्ट एडिटर में App.tsx खोलें और कुछ पंक्तियाँ संपादित करें।
Android के लिए: R कुंजी दो बार दबाएँ या Developer Menu (Ctrl + M (Windows और Linux पर) या Cmd ⌘ + M (macOS पर)) से "Reload" चुनें ताकि आप अपने परिवर्तन देख सकें!
iOS के लिए: अपने iOS Simulator में Cmd ⌘ + R दबाएँ ताकि ऐप रीलोड हो और आप अपने परिवर्तन देख सकें!