
How we found 24 Android vulnerabilities using our open source AI security agent
GitHub Security Lab describes custom "taskflow" prompts built on their open-source Taskflow Agent to hunt Android app vulnerabilities, reporting 24 findings to date. It walks through two concrete chains: an exported, unprotected MapActivity in OsmAnd that lets any app silently import settings and exfiltrate the user's exact map tile/route coordinates to an attacker server, and a hostname-parsing logic bug plus overly loose cookie-domain check in the Wikipedia Android app that lets a wikipedia:// deeplink load an attacker page (e.g. evil-wikipedia.org) and steal long-lived session cookies for account takeover. The post also candidly notes where LLMs struggle (false positives, mis-estimating severity, missing mitigating factors) versus where they excel (deep knowledge of safe/unsafe API patterns).
What it is
GitHub Security Lab's seclab-taskflow-agent includes a mobile-specific audit mode built from two custom prompt files layered on top of a general taskflow framework: gather_mobile_entry_point_info.yaml (classifies entry points as mobile vs. non-mobile so the agent targets the right attack surface in mixed repos) and an edited classify_application_local.yaml (seeds the LLM with a checklist of known Android vulnerability classes per entry-point type, e.g. intent-based entry points get checked against confused-deputy and insecure-broadcast patterns).
How it works
flowchart LR
A[gather_mobile_entry_point_info] --> B[classify entry points:\nmobile vs non-mobile]
B --> C[classify_application_local:\napply vuln-class checklist per type]
C --> D[repeated runs: strict checklist]
C --> E[repeated runs: open-ended LLM creativity]
D --> F[audit_results SQLite table]
E --> FRunning both the strict, checklist-driven prompt and the broad, open-ended prompt across multiple runs is deliberate: the strict pass catches known bug classes reliably, the open pass lets the model surprise you with logic bugs outside the checklist.
What to do
To run it yourself (requires a GitHub Copilot license; consumes premium model requests and can be token-heavy):
./scripts/audit/run_mobile.sh myorg/myrepoStart a codespace in the seclab-taskflows repo first; a medium-sized repo takes one to two hours. Results open in a SQLite viewer — check the audit_results table for rows with a checkmark in has_vulnerability.
Caveats (stated in the post)
- Every AI finding needs review by a researcher with mobile security knowledge — the LLM still surfaces low-severity or near-impossible-to-trigger issues even when told not to.
- Severity estimates are frequently wrong because the model misses mitigating factors (e.g., a path traversal confined to external storage is low severity, but the LLM may not account for internal storage taking priority over attacker-controlled external data, producing false positives).
- Fixing this currently requires explicitly prompting the model to build a proof-of-concept (forcing it to attempt exploitation) or giving it a debugger — GitHub frames this as a current limitation that should shrink as model context and reasoning improve, not a solved problem.
- Where the model does well: inferring safe/unsafe API behavior across languages well enough that PoCs needed little manual correction.
Technologies named here
- OsmAnd for Android
- GitHub Security Lab Taskflow Agent
- gather_mobile_entry_point_info.yaml
- Wikipedia Android app
- classify_application_local.yaml
- GitHub Copilot
- SQLite viewer
- Android
- SQLite
- OsmAnd
- Wikipedia
Techniques named here
- Exported Android activity abuse via intent extras
- Map tile URL replacement for location tracking
- Deeplink hostname parsing bypass
- Cookie domain suffix check bypass
- WebView JavaScript execution via deeplink
- Account takeover via cookie theft chain
- Path traversal restricted to external storage
- Cross-app scripting in WebView
- Exposed JavaScript bridges
- Confused deputy
Related in AI Security
