Back to skill

Security audit

Skills

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent human-review API guide, but it needs Review because it documents risky credential handling and broad organization, billing, and invite actions without enough safety guidance.

Install only if you are comfortable sending selected task content to SanctifAI and external human reviewers. Do not include secrets, credentials, private customer data, regulated data, or confidential code unless strictly necessary and approved. Treat org, billing, and agent invite links like access grants: verify recipients, avoid public sharing, revoke or rotate mistaken shares, set spending limits, and store API keys and webhook secrets in a secrets manager rather than in URLs or logs.

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
SKILL.md:60
Finding
API Credential Exposed in MCP URL Query Parameter## Vulnerability Details **File Location**: `SKILL.md`, lines 60–69 **Vulnerability Type**: API credential exposure through a URL query parameter **Risk Level**: Medium ### Vulnerable Code ```json { "mcpServers": { "sanctifai": { "url": "https://app.sanctifai.com/mcp?access_token=sk_live_xxx" } } } ``` ```text The `access_token` query parameter carries your API key — the same `sk_live_xxx` you get from registration. ``` ### Technical Analysis The Skill explicitly instructs users to place a live API key in the MCP endpoint's query string. Although HTTPS protects the URL in transit, query strings are more likely than authorization headers to be retained in MCP client configuration, reverse-proxy and access logs, telemetry, monitoring platforms, diagnostic output, crash reports, configuration backups, or support bundles. The example uses a placeholder rather than a real embedded credential. The vulnerability is therefore the documented credential-handling pattern: users following the instructions would substitute an operational secret into a location that may be persistently recorded or disclosed to components that do not require access to it. Because the query parameter acts as a bearer credential, possession may be sufficient for authentication. No additional proof of identity is described. ### Attack Path 1. A user follows the Skill and replaces `sk_live_xxx` with a valid SanctifAI API key. 2. The MCP client saves the complete endpoint URL in its configuration. 3. The URL is captured by a log, diagnostic report, telemetry system, configuration backup, proxy, or another process with access to the client configuration. 4. An attacker or unauthorized operator retrieves the token-bearing URL. 5. The attacker extracts the `access_token` value and reuses it against authenticated SanctifAI interfaces. 6. The attacker performs operations permitted to the compromised agent until the key is rotated, revoked, or otherwise expires. ### Impact As ...[truncated 852 chars]
Remediation
## Remediation Suggestions 1. Replace query-parameter authentication with an `Authorization: Bearer` header supported by the MCP client or transport. 2. If the client supports secret references, obtain the token from a protected environment variable, operating-system credential store, or secrets manager rather than writing it directly into configuration. 3. Do not include credentials in URLs, command-line arguments, examples copied into tickets, or diagnostic output. 4. Configure MCP clients, proxies, monitoring systems, and application logs to redact authorization data and query parameters. 5. Apply restrictive permissions to configuration files and backups containing connection details. 6. Rotate any API key that has previously been stored in a URL or exposed through logs, telemetry, support bundles, or version control. 7. Use scoped, short-lived, and revocable credentials where the platform supports them. 8. Enforce least privilege and configure per-task and daily spending limits to reduce financial impact after credential compromise. 9. Add explicit documentation warning that bearer credentials must not be placed in URLs and provide a secure configuration example.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Session Persistence

Medium
Category
Rogue Agent
Content
┌─────────────────────────────────────────────────────────────────────────────┐
│  TASKS (authentication required)                                            │
├────────────────────┬────────────────────────────────────────────────────────┤
│  create_task       │ Create a task for humans to complete.                  │
│                    │ Parameters: name, summary, target_type, task_type,     │
│                    │ domain, use_case, form (required). Optional:            │
│                    │ target_id, price_cents, metadata, callback_url,         │
Confidence
80% 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.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill explicitly encourages uploading task content and attachments for human review, but it never warns users not to include secrets, regulated data, or unnecessary personal information. Because the platform routes data to external human workers, this omission can lead to unintended disclosure of confidential documents, credentials, customer data, or internal code to third parties.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The billing invite flow creates organization-linked funding access via email or shareable links, but the documentation does not warn users to verify the recipient's identity before sending or sharing those links. A misdirected or casually shared invite could grant the wrong person administrative or billing-related access over the organization's wallet and funding workflow.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The organization invite and invite-link sections explain how to add humans to an organization, but omit a clear warning that accepting the invitation grants access to organization resources. Without that warning, users may share links too broadly or send them to the wrong recipient, enabling unauthorized organizational access.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The sub-agent invitation flow returns a new API key and webhook secret, but the documentation only notes they are shown once and does not emphasize secure credential handling. This increases the risk that operators log, paste, or otherwise expose live credentials that allow API access and webhook trust impersonation.

External Transmission

Medium
Category
Data Exfiltration
Content
# Pick: task_type="EVA", domain="RES", use_case="verification"

# Step 2: Create a research verification task
task = requests.post(f"{BASE_URL}/tasks", headers=headers, json={
    "name": "Verify Research Finding",
    "summary": "Confirm this statistic before publishing",
    "target_type": "public",
Confidence
70% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.