Back to skill

Security audit

Oskill Proxy

Security checks for vulnerabilities and agentic risk

Overview

This skill is a local Android control proxy whose purpose is clear, but it exposes a hardcoded bearer token and gives broad authority over app components and ContentProviders.

Review this carefully before installing. Only use it with a token generated for your own device, rotate the exposed token, and restrict use to trusted agents and explicit targets. Avoid broad ContentProvider operations unless you know exactly what data may be read, changed, or deleted.

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

Error
Location
SKILL.md:8
Finding
Hard-Coded Bearer Token Exposes Privileged Android Component Proxy<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:8-9` **Vulnerability Type**: Hard-coded authentication credential **Risk Level**: High ### Vulnerable Code ```yaml config: token: "43b618ce5f3a46c78fbde7e6eb6bcac3" baseUrl: "http://127.0.0.1:8726" ``` ### Technical Analysis The Skill embeds a concrete bearer token directly in distributable configuration. Any local user, application, or agent that can read the Skill package can recover this credential and use it to authenticate to the OSkillProxy HTTP API. The proxy exposes security-sensitive Android operations, including starting Activities and Services, sending Broadcasts, and querying, inserting, updating, deleting, or invoking ContentProviders. Consequently, possession of the token may permit a caller to perform operations under the proxy application's Android identity. Binding the service to `127.0.0.1` reduces direct remote exposure but does not protect against untrusted local processes, applications capable of accessing the loopback interface, or other agents operating in the same environment. The practical scope depends on whether the token remains active, the proxy application's granted permissions, Android component export rules, and ContentProvider access controls. ### Attack Path 1. An attacker obtains read access to the installed or distributed `SKILL.md`. 2. The attacker extracts the hard-coded token `43b618ce5f3a46c78fbde7e6eb6bcac3`. 3. The attacker checks whether the proxy is available at `http://127.0.0.1:8726`. 4. The attacker sends requests to privileged component endpoints with the extracted token in the `Authorization: Bearer` header. 5. Depending on the proxy application's permissions, the attacker starts Android components, sends broadcasts, reads provider data, invokes provider methods, or modifies and deletes provider records. ### Impact Assessment Successful exploitation can grant unauthorized access to the Android operations and data available to the prox ...[truncated 680 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the concrete token from `SKILL.md` and all distributable source files. 2. Immediately rotate or revoke the exposed token because it must be treated as compromised. 3. Generate a unique, cryptographically secure credential for each installation rather than sharing a static project-level token. 4. Store the credential in Android Keystore or another operating-system-protected secret store and inject it only at runtime. 5. Prevent the token from appearing in logs, command histories, diagnostics, examples, or error responses. 6. Apply least privilege by restricting permitted packages, component classes, Intent actions, ContentProvider authorities, URIs, columns, and callable methods. 7. Require explicit user confirmation for destructive or sensitive actions, especially provider updates, deletions, calls, and service starts. 8. Add token expiration, rotation, revocation, and failed-authentication rate limiting. 9. Where feasible, authenticate callers using an operating-system-backed identity or local IPC mechanism instead of relying solely on a reusable bearer token over HTTP. 10. Add audit logging for authenticated operations while redacting credentials and sensitive provider content. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Context-Inappropriate Capability

Medium
Confidence
99% confidence
Finding
The skill manifest contains a concrete bearer token directly in configuration, which exposes a reusable secret to anyone who can read, copy, or package the skill. Because this token authorizes a local API that can start activities/services, send broadcasts, and read or modify ContentProviders, disclosure enables unauthorized control over sensitive device-app interactions.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The documentation presents activity launches, service starts, and broadcast sending as routine actions without warning that they can change system/app behavior, trigger privileged flows, or interact with exported components in unsafe ways. Given that the skill is specifically designed to proxy Android component invocation when direct intent execution is unavailable, missing warnings materially increase the risk of misuse.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
These sections advertise provider query/insert/update/delete/call capabilities without warning that they may read private app data or alter/delete device state. In this skill's context, the omission is significant because the tool is explicitly a proxy for invoking privileged Android component operations that can have immediate security and privacy consequences.

External Transmission

Medium
Category
Data Exfiltration
Content
### 通用 HTTP 格式

```bash
curl -X POST http://127.0.0.1:8726/api/v1/component/<endpoint> \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '<json_body>'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
场景:启动录音应用的透明 Activity 进行录音控制

```bash
curl -X POST http://127.0.0.1:8726/api/v1/component/activity/start \
  -H "Authorization: Bearer a3f8xxxxxxxxxxc9d2" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:281