Back to skill

Security audit

mobile-performance

Security checks for vulnerabilities and agentic risk

Overview

This skill provides purpose-aligned mobile app performance guidance, with a minor cleanup omission in its Android testing instructions.

Use a dedicated test device, record and restore app-specific Android testing settings afterward, and review background capability changes. If implementing telemetry uploads, follow the skill's privacy guidance.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 346)May include surrounding context.

text

- iOS: `BGTaskScheduler` identifiers must be listed under `BGTaskSchedulerPermittedIdentifiers` in
  Info.plist, with the Background Modes capability. Call out that Info.plist and capability change.
- Android 15+: `dataSync` and `mediaProcessing` foreground services are limited to 6 hours per 24 hours.
  Android 16 applies job runtime quotas by standby bucket, also to jobs started in the foreground.
- Test with Doze and standby forced (commands in [references/android.md](references/android.md)).

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · SKILL.md (reported line 346)May include surrounding context.

text

- iOS: `BGTaskScheduler` identifiers must be listed under `BGTaskSchedulerPermittedIdentifiers` in
  Info.plist, with the Background Modes capability. Call out that Info.plist and capability change.
- Android 15+: `dataSync` and `mediaProcessing` foreground services are limited to 6 hours per 24 hours.
  Android 16 applies job runtime quotas by standby bucket, also to jobs started in the foreground.
- Test with Doze and standby forced (commands in [references/android.md](references/android.md)).

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · references/flutter.md (reported line 126)May include surrounding context.

md
## Battery and network

- Background work runs on the host: the `workmanager` plugin maps to WorkManager on Android and
  `BGTaskScheduler` on iOS; the constraint and Info.plist rules in the main skill apply.
- Timers and periodic `Stream`s keep running while the app is in the background until the OS suspends
  it. Pause them in `AppLifecycleListener` (`onHide`, `onPause`) and resume on `onResume`.
- Use one HTTP client instance, cache responses where the server allows, paginate, and batch telemetry.

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · references/ios.md (reported line 163)May include surrounding context.

md
- Organizer Energy reports show energy issues reported from the field.
- Background work: `BGAppRefreshTaskRequest` for short refresh, `BGProcessingTaskRequest` with
  `requiresExternalPower` and `requiresNetworkConnectivity` for heavy work. Identifiers must be in
  `BGTaskSchedulerPermittedIdentifiers` (Info.plist) and the Background Modes capability must be on.
- Large transfers: `URLSessionConfiguration.background(withIdentifier:)` with `isDiscretionary = true`;
  the system may wait for Wi-Fi and power.
- Location: the lowest accuracy that works, stop updates when not needed, significant-change or visits

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · references/ios.md (reported line 208)May include surrounding context.

md
thinning. The export folder contains `App Thinning Size Report.txt` with compressed (download) and
  uncompressed (install) size per variant.
- Automate: `xcodebuild -exportArchive -archivePath App.xcarchive -exportPath out -exportOptionsPlist
  Options.plist`, with the `thinning` key set to `<thin-for-all-variants>` in the plist.
- The `.app`, `.xcarchive` and uploaded `.ipa` are not valid size measurements. App Store Connect shows
  the real per-device sizes.
- Common wins: asset catalogs (enables thinning and compression), remove unused assets and fonts, ODR

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · references/ios.md (reported line 208)May include surrounding context.

md
thinning. The export folder contains `App Thinning Size Report.txt` with compressed (download) and
  uncompressed (install) size per variant.
- Automate: `xcodebuild -exportArchive -archivePath App.xcarchive -exportPath out -exportOptionsPlist
  Options.plist`, with the `thinning` key set to `<thin-for-all-variants>` in the plist.
- The `.app`, `.xcarchive` and uploaded `.ipa` are not valid size measurements. App Store Connect shows
  the real per-device sizes.
- Common wins: asset catalogs (enables thinning and compression), remove unused assets and fonts, ODR

Device-state test commands lack a warning about ongoing background-execution restrictions or instructions to restore them.

Medium
Category
Output Handling
Confidence
90% confidence
Finding

The test commands place the app in the restrictive rare standby bucket and enable foreground-service time limits without documenting how to restore the previous configuration. These changes can affect subsequent background execution and invalidate later measurements; the existing Doze and battery reset commands do not undo them. The explicit performance-testing context and need for ADB access limit this to a low-impact operational safety issue rather than an attacker-accessible security flaw.

Content

No source excerpt is available for this finding.