Skip to main content

Static analysis

MAST combines several static engines over the unpacked artifact (and the source repo when available). Everything below runs offline.

Native SAST

Line-anchored source analysis across Kotlin, Java, Swift and Objective-C (.kt .java .swift .m .mm); comment lines are skipped. Representative rules:

Android (Kotlin / Java)

IssueCWESeverity
Empty checkServerTrusted (TLS trust-all)CWE-295Critical
Allow-all hostname verifierCWE-295High
addJavascriptInterface / WebView universal or file accessCWE-749High
ECB / DES / RC4 / Blowfish cipherCWE-327High
MD5 / SHA-1CWE-328Medium
java.util.Random for securityCWE-330Medium
MODE_WORLD_READABLE / WRITEABLECWE-276High
SQL injection via rawQuery / execSQL concatenationCWE-89High
Runtime.exec / ProcessBuilderCWE-78Medium
Secret written to Log.*CWE-532Medium

iOS (Swift / Obj-C)

IssueCWESeverity
TLS trust bypass (performDefaultHandling, SecTrustSetExceptions, ...)CWE-295High
Secret in UserDefaultsCWE-312High
UIWebView (deprecated)CWE-749Medium
CC_MD5 / CC_SHA1CWE-328Medium
Secret in NSLog / printCWE-532Low

Flutter / Dart

Findings from the Dart engine fold into the mobile view: dart-* rule findings plus tree-sitter taint results (TAINT-<cwe>-DART). Two Flutter-specific checks are worth calling out:

  • Resilience (RASP) absence - a Flutter app with no root / jailbreak / tamper-detection package (freeRASP, flutter_jailbreak_detection, safe_device and similar) is flagged against MASVS-RESILIENCE (dart-no-rasp, CWE-919).
  • Pub typosquat - a dependency one character away from a popular pub package is flagged (dart-typosquat, CWE-1357).

SCA - vulnerable libraries & dependencies

Three layers, all mapped to CWE-1104 (use of an unmaintained / vulnerable component):

  1. Native libraries - version strings embedded in bundled binaries (.so, dylibs) are matched against known-vulnerable builds: OpenSSL (CVE-2016-2107, CVE-2021-3711, CVE-2022-3602), SQLite < 3.39 (CVE-2020-13871), libpng 1.0-1.5 (CVE-2019-7317).
  2. Native dependency manifests - build.gradle(.kts), Podfile.lock, Package.resolved, gradle.lockfile (Gradle / CocoaPods / Swift PM) are matched against known-bad versions of okhttp, gson, jackson-databind, Alamofire and AFNetworking.
  3. Pub / Dart - Flutter dependency CVEs are handled by the shared SCA engine.

Manifest & config

  • AndroidManifest.xml - compiled binary XML (AXML) is decoded (via pyaxmlparser) and evaluated for the usual misconfigurations - exported components, debuggable, cleartext traffic - through the shared IaC engine. When AXML cannot be decoded, a best-effort string heuristic is used.
  • Info.plist - App Transport Security - NSAllowsArbitraryLoads (high) and NSAllowsArbitraryLoadsInWebContent (medium), both CWE-319.
  • Firebase - Realtime Database hosts, project ids and storage buckets are extracted from the artifact; when a scan is authorised, a read-only open-rules probe checks whether the database is world-readable.
  • Permissions - Android permissions from the decoded manifest and iOS permissions mapped from Info.plist usage-description keys are surfaced and feed the privacy analysis.

Secrets

Every text member is run through the platform's secrets engine, so API keys, tokens and credentials shipped inside the app are caught alongside the mobile- specific findings.