Skip to content
kubepath Book a call
Menu

Flutter eMudhra checker: is your app affected?

Upload your Android app and find out in seconds if it was built with a Dart SDK affected by the eMudhra TLS issue (GHSA-frr6-h895-5pxp). A static check: we never run your app, and the file is deleted right after. No signup, no email needed.

Free Flutter eMudhra check

The Dart eMudhra vulnerability, plainly

HTTPS trusts a site because its certificate is signed by a certificate authority your device trusts. In October 2026, eight intermediate CA certificates issued by eMudhra turned out to have been generated with weak key entropy: an attacker can work out their private keys and sign a valid-looking certificate for any domain. Browsers and Android now distrust them.

Flutter apps are different. On Android and Windows, Dart's dart:io verifies certificates with its own built-in BoringSSL and doesn't read the operating system's blocklist. So an app built with an older Dart SDK still trusts the compromised certificates, and someone on the same network (public Wi-Fi, a hostile hotspot, a compromised router) can read and change its HTTPS traffic: logins, tokens, API calls. It stays that way until the app is rebuilt with a patched SDK and users update. See the official advisory (GHSA-frr6-h895-5pxp).

Who is affected

AffectedFixed in
Dart SDK, stablebelow 3.13.73.13.7
Dart SDK, betabelow 3.14.0-315.3.beta3.14.0-315.3.beta
Flutter, stablebelow 3.47.83.47.8
Flutter, betabelow 3.50.0-0.2.pre3.50.0-0.2.pre

Affected platforms: Android, Windows, and Linux in static containers or on hosts without updated CA certificates. Not affected: iOS, macOS and Web, which verify certificates with Apple's Security.framework or the browser.

What this checks

A static look inside the file you upload. We never run, install or decompile your app, make no network call, and delete the file right after.

  • 01Likely affected: your app's Flutter engine was built with Dart below the fixed version for its channel.
  • 02Probably safe: built with Dart at or above the fixed version.
  • 03Not a Flutter app: no Flutter engine (libflutter.so) inside, so this issue doesn't apply.
  • 04Unknown: a Flutter app whose version can't be read or compared (a base APK without the engine, a custom build, a dev SDK).
  • 05Never "vulnerable": apps that use native Android networking instead of dart:io aren't affected, and a backported SDK can keep an old version number.

Questions

What is the Flutter eMudhra vulnerability?

In October 2026, eight intermediate CA certificates issued by eMudhra were found to be compromised: their keys were generated with weak entropy, so an attacker can derive the private keys and forge valid HTTPS certificates for any domain. Browsers and operating systems now distrust them, but on Android and Windows, Dart's dart:io uses its own built-in copy of BoringSSL and doesn't read the operating system's blocklist. A Flutter app built with an older Dart SDK keeps trusting those certificates, so someone on the network path (public Wi-Fi, a compromised router) could intercept its HTTPS traffic. The official advisory is GHSA-frr6-h895-5pxp (severity High, published 23 October 2026).

Is my Flutter app affected?

Likely, if it was built with Dart below 3.13.7 on the stable channel (below 3.14.0-315.3.beta on beta), which means Flutter below 3.47.8 (or 3.50.0-0.2.pre on beta), and it makes HTTPS connections through dart:io (for example the http or dio packages on their default client). Android and Windows builds are affected, and Linux builds that run in a static container or on a host without updated CA certificates. iOS, macOS and Web builds are not.

How do I check my app with the Flutter eMudhra checker?

Upload your release .apk or .xapk above. We open it as a zip archive, find the Flutter engine (libflutter.so) and read the Dart version it was built with, then compare it with the fixed versions in the advisory. You get the result on this page; add an email if you also want it with the fix steps. If you build the app yourself, `flutter --version` on your build machine or in CI shows the same thing.

Is the Dart eMudhra vulnerability in iOS apps?

No. On iOS and macOS, Dart uses Apple's Security.framework to verify certificates, and on the Web the browser does it, and those already distrust the compromised eMudhra certificates. Android, Windows and some Linux builds are the ones that need a rebuild.

Why does it say "likely affected" and not "vulnerable"?

Because a static check of the SDK version can't confirm it. Apps that make their network calls through native Android APIs (for example cronet_http, or your own platform channel) instead of dart:io aren't affected. And some teams use an SDK with the fix backported, which still reports the old version number. If your result is likely affected, a short review of how the app talks to the network settles it.

How do I fix it?

Upgrade Flutter to 3.47.8 or later (stable; 3.50.0-0.2.pre or later on beta) with `flutter upgrade`, check that `flutter --version` reports Dart 3.13.7 or later, then rebuild and release your Android app and any Windows or Linux builds. The fix updates BoringSSL to distrust the eMudhra intermediates; on Android 14 and later, dart:io also loads the system's updatable root store. Users stay exposed until they install the rebuilt version.

What happens to my APK?

We read it, we never run it. The checker doesn't install or execute the app, makes no network call and doesn't contact any server the app uses. It reads only the few files inside the archive it needs (the Flutter engine library and the app's manifest), then deletes the upload and everything read from it as soon as the check finishes. We keep only the result: the app's name or package, the Dart version and the verdict.

Where do I find my app's APK?

If you build it: `flutter build apk --release` writes build/app/outputs/flutter-apk/app-release.apk. If you ship an app bundle (.aab), build a universal APK from it, or upload the .xapk. From an installed app: `adb shell pm path <package>` lists its APK files; upload the one with libflutter.so (usually the ABI split, such as split_config.arm64_v8a.apk) or all of them as one .xapk.

Why is my result Unknown?

Usually because the file has no Flutter engine inside: a base APK from a split install keeps libflutter.so in a separate ABI split. Upload the full .xapk or a universal APK. It can also mean a custom engine build without the standard version string, or a dev-channel SDK that the advisory doesn't cover.

Is the checker free?

Yes: no account, no card and no email needed. Uploads up to 95 MB, a few checks per hour from one network.

More free checkers: all kubepath tools.