Penetration Testing Flutter and React Native Apps
Many Indian product teams build one mobile app in Flutter or React Native and ship it on both stores. The OWASP mobile risks are the same as for native apps, but the tools and the places to look differ, because the framework changes where the code lives and how the app talks to the network.
Mobile apps · By Thimmagurudu Bathini · Published · 3 min read
What Is Different
| Compared on | Flutter | React Native |
|---|---|---|
| Where the app logic is | Dart code compiled ahead of time into a native library inside the app package | A JavaScript bundle, or Hermes bytecode, shipped inside the package |
| How easy it is to read | Harder: there is no Java or Swift to decompile, and tools work on the compiled library | Easier: an unprotected JavaScript bundle is plain text, and Hermes bytecode has decompilers |
| Network traffic | The app does not follow the device's proxy setting by default, so interception needs other routing | Follows system networking, so a proxy works unless the app pins certificates |
| Typical storage mistake | Values in shared preferences or local files | Tokens and personal data in unencrypted AsyncStorage |
Testing a React Native App
The tester unpacks the package and finds the JavaScript bundle (for example index.android.bundle). If it is not obfuscated, it can be read like source. Searching it often turns up what the team thought was hidden:
$ unzip -q app.apk -d app && grep -oE "(api[_-]?key|secret|Bearer )[^\"']{0,40}" app/assets/index.android.bundle
apiKey: "sk_live_…" # a secret key shipped to every phoneAnything in the bundle is public. Secret keys, internal URLs, feature flags that unlock paid features and hard-coded admin checks all show up here. Testers also check AsyncStorage for tokens, any over-the-air update mechanism (can the update be tampered with, is it signed?), deep links and the native modules the app adds.
Testing a Flutter App
The app logic is in a compiled library. Testers use frameworks that understand Dart's runtime to recover class and method names and to hook functions with Frida. Network interception is the first obstacle. Because the app ignores the device proxy, the tester redirects its traffic at the network level, or uses a patched build, and handles the certificate checks the app does itself. Once traffic is visible, the API tests are the same as for any other app: see intercepting mobile API traffic.
How to Check Your Own App
- Unpack the release build and search it for keys, tokens and internal host names.
- List what the app writes to disk and what is kept in AsyncStorage or shared preferences.
- Try to intercept the app's traffic as a user would. If you cannot, find out whether that is by design (pinning) or an accident.
- Ask which decisions the app makes on its own that the server should make.
What a Fix Looks Like
- Keep secrets off the device. Use short-lived tokens issued after sign-in, and keep long-lived keys on your server.
- Store tokens in the platform's secure storage (Keychain, Android Keystore), through a maintained library, and not in AsyncStorage or plain preferences.
- Enable obfuscation for release builds (Flutter's
--obfuscatewith--split-debug-info, and Hermes bytecode with a minifier for React Native) as a delay, not a defense. - Sign and verify over-the-air updates.
- Check every sensitive action on the server.
These tests are part of our mobile application Penetration Testing.
To plan a test for your own systems, request a scoping call, or download the pre-test checklist and scoping questionnaire.
Sources
Links checked on 5 November 2026.
- OWASP Mobile Application Security Testing Guide, test cases for both platforms
- Flutter documentation, Obfuscate Dart code, obfuscation and debug info
- React Native documentation, Security, storage, networking and updates
Next Step
To have an engineer test your own app and its back end, see mobile application Penetration Testing. To get your scope ready first, use the pre-test checklist and scoping questionnaire.
Written by Thimmagurudu Bathini, BERRY9 IT SERVICES PRIVATE LIMITED, Hyderabad. Questions about your own systems? Request a scoping call or call +91 86868 92922.
Plan Your Next Security Test
Tell us what needs Penetration Testing and when you need it done, and we will propose a scope and timeline. We respond within 24 hours. If you would rather talk first, call or write to us.
- +91 86868 92922
- contact@berry9.com
- H.No: 8-3-945/A/12 & 13, Sri Venkata Sai Nest Apartments, Nagarjuna Nagar Colony, Yellareddyguda, Hyderabad 500073, Telangana