Back to skill

Security audit

Android

Security checks for vulnerabilities and agentic risk

Overview

This Android skill is a coherent local development helper, with disclosed local notes and credential-handling guardrails.

Install only if you are comfortable with the skill reading and maintaining local Clawic Android notes, device/project/contact rows, and release metadata. Do not allow it to store secrets; approve destructive device/store actions and any Gradle build scan or CI/store upload explicitly.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
build-failures.md:12
Finding

Gradle build scans may disclose sensitive build and environment metadata

Content
View full analysis

Vulnerability Details

File Location: build-failures.md:12; related recommendations at gradle.md:23 and ci.md:80, with the risk acknowledged at ci.md:44
Vulnerability Type: External disclosure of build and environment metadata
Risk Level: Medium

Vulnerable guidance:

markdown
- `--stacktrace` shows where Gradle failed; `--info` shows what it was doing; `--scan` shows which task, how long and with what inputs. Reach for `--info` before `--stacktrace`: the cause is usually a missing input, not a Gradle bug.

Related guidance:

markdown
Measure with `./gradlew --profile` or a build scan, and take the median of three runs.
markdown
- Guard against leakage: never echo the decoded values, never run the build with a flag that dumps all properties, and remember that a build scan can publish environment details. Rotate anything that appears in a log, immediately.
markdown
- A build scan on a slow build names the task that cost the time in one look — far faster than reading a log.

Technical Analysis

The Skill recommends Gradle build scans for build-failure diagnosis and performance measurement. A build scan can transmit build telemetry to an external scan service, including task names, project structure, dependency information, repository metadata, file paths, system properties, and environment-derived details.

The Skill acknowledges that a build scan may publish environment information, but its scan recommendations do not impose a mandatory user-consent step, destination verification, access-control review, or pre-upload redaction check. This creates an unsafe default: an Agent following the diagnostic guidance could recommend or initiate an externally published scan without ensuring that the user understands what data leaves the machine.

This is not evidence of deliberate credential exfiltration. Elsewhere, the Skill expressly prohibits storing, logging, or trans ...[truncated 1546 chars]

Remediation
View remediation

Remediation Suggestions

  1. Make local profiling the default:

    • Prefer ./gradlew --profile, --info, or locally retained reports.
    • Present build scans only when local diagnostics are insufficient.
  2. Require explicit informed consent before generating or publishing a scan:

    • State that build metadata will leave the machine.
    • Identify the receiving service.
    • Explain expected retention and access controls.
    • Do not treat prior consent to ordinary network operations as consent to upload diagnostic metadata.
  3. Add a mandatory pre-upload review:

    • Inspect Gradle properties, system properties, repository URLs, custom tags, and captured environment values.
    • Remove credentials, tokens, internal hostnames, usernames, and sensitive paths.
    • Abort the upload if the captured data cannot be adequately reviewed.
  4. Use restrictive publication settings:

    • Require authenticated or private access where supported.
    • Avoid publicly accessible scan links.
    • Set the shortest practical retention period.
  5. Add a post-upload handling rule:

    • Do not place scan URLs in public issues, logs, or persistent Skill memory.
    • Revoke or delete scans accidentally published with sensitive information.
    • Rotate any credential appearing in a scan immediately.
  6. Rewrite the affected guidance, for example:

markdown
Prefer `--info` or `./gradlew --profile`, which retain diagnostics locally.
A build scan uploads build and environment metadata to an external service.
Generate one only after explicit user confirmation, destination and access-control
verification, and review for secrets or proprietary metadata.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Anti-Refusal Statement

High
Category
Anti-Refusal
Confidence
80% confidence
Finding

Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.

Content

Scanner excerpt · data.md (reported line 97)May include surrounding context.

md
| Storing a list in a Room column via a converter, then needing to filter by it | The column cannot be queried | A related table |
| No index on a `WHERE` column | Fine in testing, an ANR at real data volume | Index what you query; confirm with the query plan |
| Reading DataStore outside the updater and writing inside | Lost updates under concurrency | Read-modify-write inside the lambda |
| Treating the cache directory as storage | The system deletes it under pressure, without warning | Files directory for anything that must persist |
| Requesting broad storage permissions for an attachment flow | Rejection risk and a permission dialog users decline | Photo picker or SAF, no permission |
| Leaving `allowBackup` at its default with sensitive data | The data leaves the device by design | `dataExtractionRules` with explicit exclusions |
| Migrating data in Kotlin after opening the database | Runs against a partially migrated schema | Do it in the migration's SQL |

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · memory-template.md (reported line 141)May include surrounding context.

md
:app · :core:data · :core:ui · :feature:jobs · :feature:sync

## Release Setup
Play App Signing on. Upload key `keychain:android-upload-key`, alias `upload`, file `file:~/keystores/upload.jks`. Upload cert SHA-256 fingerprint recorded in `releases/2026.md` header. Service account for CI uploads: `env:PLAY_SERVICE_ACCOUNT_JSON`. versionCode scheme: date-based, see config.

## Pain Points
2026-06-11: sync silently stopped on Xiaomi devices — OEM battery manager killed the worker; fixed by moving to a foreground service for the user-initiated sync path.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · memory-template.md (reported line 233)May include surrounding context.

md
:app · :core:data · :core:ui · :feature:jobs · :feature:sync

## Release Setup
Play App Signing on. Upload key `keychain:android-upload-key`, alias `upload`, file `file:~/keystores/upload.jks`. Upload cert SHA-256 fingerprint recorded in `releases/2026.md` header. Service account for CI uploads: `env:PLAY_SERVICE_ACCOUNT_JSON`. versionCode scheme: date-based, see config.

## Pain Points
2026-06-11: sync silently stopped on Xiaomi devices — OEM battery manager killed the worker; fixed by moving to a foreground service for the user-initiated sync path.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This markdown file applies to SQP-2, and it tells readers to ask a user for a bug report as part of the debugging flow. Although later lines mention that bug reports contain user data and should not be stored, the request step itself lacks an immediate user-facing warning about the privacy sensitivity of collecting and transferring that artifact.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · performance.md (reported line 92)May include surrounding context.

md
| `largeHeap="true"` | Delays the OOM and makes the process a bigger kill target | Fix the allocation; decode images to size |
| Decoding full-resolution images | Tens of megabytes per photo | Decode to the display size |
| A custom splash activity | The platform splash shows first, so users see two | The splash API |
| Adding a dependency without checking its cost | Startup and size regress silently, one library at a time | Measure startup and size before and after |
| A baseline profile generated once | Describes screens that no longer exist | Regenerate on a `## Due` cadence |
| Chasing GC in the profiler without a jank measurement | Allocation is not automatically a problem | Start from a dropped frame and work back |
| Reporting "it feels faster" | Not falsifiable, and usually wrong | A number, on a device, in `benchmarks/<year>.md` |

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

Line L049 directs users to 'Pin the locale, timezone and font scale' for test runs. This imposes a locale constraint in natural language without user opt-in, and the document does not justify it as a region-specific or compliance-bound requirement.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.