Back to skill

Security audit

Mobile MVC

Security checks for vulnerabilities and agentic risk

Overview

This skill provides proportionate guidance for improving mobile app code through small, tested changes.

Use this as refactoring guidance: review proposed changes and run the application's tests. The skill requires no credentials or external service configuration. Its examples are illustrative and should be adapted to your project.

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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (4)

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 · references/uikit.md (reported line 11)May include surrounding context.

md
| Found in the view controller | Move it to |
|---|---|
| `URLSession`, request building, JSON decoding | A service or repository protocol, injected through `init` |
| Core Data, SwiftData, file or Keychain access | A store type behind a protocol |
| Date, number, measurement formatting | Row or display models built from domain models |
| Input validation | A pure validator type with unit tests |
| `UITableViewDataSource`, `UICollectionViewDataSource` | A diffable data source plus a cell provider |

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
// BAD: view controller builds requests and decodes JSON
override func viewDidLoad() {
    super.viewDidLoad()
    URLSession.shared.dataTask(with: URL(string: "https://api.example.com/devices")!) { data, _, _ in
        let devices = try! JSONDecoder().decode([Device].self, from: data!)
        DispatchQueue.main.async { self.devices = devices; self.tableView.reloadData() }
    }.resume()

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

java
// BAD: Activity opens sockets and parses responses
new Thread(() -> {
    String json = httpGet("https://api.example.com/devices");
    runOnUiThread(() -> adapter.submit(parse(json)));
}).start();

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
return;
    }
    setState(() => _loading = true);
    final response = await http.post(Uri.parse('https://api.example.com/pair'), body: code);
    setState(() => _loading = false);
    if (response.statusCode != 200) setState(() => _error = 'Pairing failed');
  }