← Tahr SecurityCONTENT HISTORY

Update to Tahr Security

Snapshot Sep 30, 2026 · 23:16 UTC · version 0.3.3

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "tahr-audit-android",
  "description": "Audit Android application security from an APK, AAB-derived APK, Android source repository, manifest, or authorized emulator/device. Use for mobile release reviews, OWASP MASVS-oriented assessments, exported component and deep-link testing, WebView and IPC review, local storage and token analysis, mobile API traffic review, runtime instrumentation, privacy testing, and Android hardening validation.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 231
    },
    {
      "relative_path": "references/attack-surface.md",
      "size_in_bytes": 4507
    },
    {
      "relative_path": "references/proof-gates.md",
      "size_in_bytes": 3863
    }
  ],
  "skill_md_contents": "---\nname: tahr-audit-android\ndescription: Audit Android application security from an APK, AAB-derived APK, Android source repository, manifest, or authorized emulator/device. Use for mobile release reviews, OWASP MASVS-oriented assessments, exported component and deep-link testing, WebView and IPC review, local storage and token analysis, mobile API traffic review, runtime instrumentation, privacy testing, and Android hardening validation.\n---\n\n# Tahr Audit Android\n\nUse an artifact-first workflow to turn manifest and code signals into focused runtime checks. Keep static evidence, runtime reachability, and verified security impact distinct.\n\n## Set scope and safety\n\n1. Identify the application ID, build variant, APK hash, source revision, device profile, identities, and backend environment in scope.\n2. Treat a local repository or supplied artifact as authorized for read-only review. Default to static analysis when active device or backend testing is not clearly authorized.\n3. Use a disposable emulator snapshot, test install, test accounts, and synthetic data for state-changing checks.\n4. Do not clear package data, change protected account credentials, trigger lockouts, submit real payments, send messages, write through content providers, load persistent code, or tamper with production data.\n5. Do not modify the app or implement fixes unless the user explicitly asks.\n\nUse secrets, tokens, PII, keys, cookies, and credentials only transiently for authorized verification. Persist their class, source, key or field name, redacted excerpt, length, fingerprint, scope, expiry, and replay result—not raw values.\n\n## Inventory before testing\n\nRead [attack-surface.md](references/attack-surface.md) before exploring the application.\n\nPrefer existing artifacts over broad rescans: manifest, decompiled source, smali/resources, class or string index, static findings, device information, traffic capture, dynamic plan, and earlier coverage. If no compact index exists, create a focused inventory of URLs, secrets, crypto APIs, log calls, password/token fields, WebViews, JavaScript bridges, dynamic loading, and native libraries.\n\nBuild a target list with provenance for:\n\n- exported activities, services, receivers, providers, and their permissions;\n- deep links, app links, intent actions, URI authorities, and parameters;\n- WebViews, loaded origins, settings, file/content access, and bridges;\n- authentication, biometric, token, OAuth, and session paths;\n- storage locations, backup behavior, logs, clipboard, and caches;\n- crypto operations, keys, IVs, RNG, signing, and integrity decisions;\n- endpoints, trust configuration, cleartext paths, pinning, and PII flows;\n- deserialization, reflection, commands, dynamic code, native libraries, and dependencies;\n- privacy permissions, tracking SDKs, consent states, retention, and screenshots.\n\n## Separate evidence levels\n\nClassify each observation immediately:\n\n1. **Static candidate** — source, smali, manifest, resource, dependency, or configuration evidence identifies a plausible weakness.\n2. **Runtime reachability** — adb, UI, proxy, logcat, filesystem, Frida, or backend evidence shows that the path executes or is externally callable.\n3. **Verified impact** — the behavior crosses a confidentiality, integrity, authorization, authentication, privacy, or protected-functionality boundary.\n\nNever label a static flag as runtime exploitation. An exported component, weak algorithm, permissive WebView setting, cleartext allowance, dependency CVE, or disabled resilience control is a target until the matching proof gate is met.\n\n## Plan and run focused checks\n\nRead [proof-gates.md](references/proof-gates.md) before dynamic testing or severity assignment.\n\nPrioritize high-impact targets from artifacts. For each target, define the safe command or interaction, caller and app state, expected secure behavior, impact proof, cleanup, and stop condition. Exercise fresh, logged-in, proxied, unproxied, and offline states only when they add relevant evidence.\n\nUse read-only or marker-based component and provider checks by default. Instrument only the classes and methods identified by static evidence. Capture metadata rather than raw values. Stop when the device, app, backend, or account shows instability.\n\nFor dependency or platform intelligence, search only exact detected packages and versions. Record affected range, fixed version, prerequisites, and source, then prove that the vulnerable code path is packaged and reachable. Intelligence is a lead, never a finding.\n\nWhen stuck, use a bounded fresh-agent pass to suggest missing test states or alternate proof paths. Treat suggestions as candidates and independently verify them.\n\n## Report without losing uncertainty\n\nReturn three separate sections:\n\n- **Verified findings:** include category proof, exact component or file, caller/app state, commands or interactions, before/after behavior, impact, and remediation.\n- **Candidates:** include the static or runtime signal, missing proof, and safest next check.\n- **Coverage:** mark every material target `tested`, `partially_tested`, `skipped_with_reason`, `inaccessible`, `blocked_by_environment`, or `unsafe_or_destructive_skip`.\n\nDo not silently omit high-risk components because the emulator, login, proxy, root, Frida, or backend was unavailable. Do not interpret a blocker as evidence that the app is secure. Calibrate severity to demonstrated impact, not MASVS category names or scanner labels.\n"
}

SHA-256: 1bf00f4e924a9955ffd1190c193efeaf4633cef1609da6dd5e344e7442c68a9c