You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(apkauditor): kill 5 false-positive classes found auditing a real banking APK
Ran a real, in-scope banking app (io.wio.sme, Wio Bank H1 program) through the
auditor and manually verified every flagged category against real decompiled
smali/manifest content. 5 of ~8 categories were false positives; fixed each at
the root cause:
- trust_all: bare 'checkServerTrusted'/'X509TrustManager' identifiers fired on
ANY implementation, including OkHttp's own legitimate internal
AndroidCertificateChainCleaner (confirmed via real smali: it calls the real
platform X509TrustManagerExtensions and re-throws on failure). Now requires
'TrustAllCerts' (the actual copy-paste-vulnerable class name) or a literal
EMPTY checkServerTrusted method body -- the real "accepts everything" signature.
- provider_query_exposed: fired on any ContentResolver.query() call with zero
correlation to whether any provider is actually exported (Android forbids
querying a non-exported provider at all). Now suppressed unless a genuinely
exported, unprotected provider exists.
- nav_deeplink_forced_navigation: fired on marker-string presence + any exported
activity, without checking a navigation graph resource actually exists. The
Wio app is a FlutterActivity with flutter_deeplinking_enabled=false and no
res/navigation/ directory at all -- the library was only a transitive
dependency, nothing was wired up to receive the deep-link extras. Now
requires a real res/navigation(-qualifiers)/ path in the APK's file list.
- apx_mailgun_api_key_2: the bare 'mg' alternative in '(mailgun|mg)[0-9a-z]{32}'
matched almost any 34-char alphanumeric run; now requires the full 'mailgun'
word.
- apx_aws_access_key_id_value / apx_aws_client_id / apx_aws_api_key: used the
'gi' (case-insensitive) flag on a format AWS always issues fully uppercase,
so mixed-case coincidental matches on binary-derived text (e.g.
'ASIAAAAAUMOUw0OhIZQg', which AWS would never generate) passed. Now
case-sensitive.
- Added looksLikeRealSecret(): a generic entropy/repetition backstop applied to
all ~180 bulk-imported 'apx_*' secret patterns, rejecting matches with 4+
repeated characters or very low character diversity -- catches future
binary-noise false positives in patterns not individually audited yet.
Verified with real APKs (not synthetic tests):
- io.wio.sme: nav_deeplink_forced_navigation/trust_all/provider_query_exposed
all now 0 (were 1/6/15); mailgun/AWS noise 0 (was 64/38/38); total findings
597 -> 434.
- BookBeat + BitOasis (the two confirmed true positives from the earlier
nav-deeplink validation): nav_deeplink_forced_navigation still fires
correctly on both -- no regression.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
0 commit comments