Back to skill

Security audit

SanctifAI Source

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent human-review integration, but it needs Review because it can expose task content and files to external workers while also documenting a reusable API key in an MCP URL.

Install only if you are comfortable sending task text, metadata, attachments, and links to SanctifAI and its human workers. Avoid public routing for confidential work, redact secrets and personal data before submission, prefer direct or vetted guild routing for sensitive tasks, and treat MCP URLs containing access_token values as secrets that may need rotation if copied into logs or shared configs.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:74
Finding
Long-Lived API Credential Exposed in an MCP Endpoint URL<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 74–83 **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" } } } ``` ```markdown **Protocol:** Streamable HTTP transport with SSE for real-time notifications. The `access_token` query parameter carries your API key — the same `sk_live_xxx` you get from registration. ``` ### Technical Analysis The documented MCP configuration places a long-lived API key in the `access_token` query parameter. Query strings are routinely captured by configuration files, reverse proxies, request logs, diagnostic output, telemetry systems, error reports, URL parsers, and copied connection strings. Although HTTPS protects the URL while it is in transit, it does not prevent endpoint components or local tooling from recording the complete URL. This unnecessarily expands the number of places in which the credential may persist. The REST integration described elsewhere in the Skill uses an `Authorization: Bearer` header, demonstrating that a less exposed credential transport pattern is available. This exceeds minimum privilege in terms of credential exposure: every component handling the MCP URL receives access to a bearer credential even if that component only needs endpoint routing information. ### Attack Path 1. A user follows the Skill instructions and configures the MCP server with an actual API key in the URL. 2. An MCP client, proxy, monitoring integration, support bundle, or configuration backup records the complete endpoint URL. 3. An attacker obtains access to that record through a leaked configuration, diagnostic report, log aggregation system, or copied URL. 4. The attacker extracts the `access_token` value. 5. The attacker connects to the SanctifAI MCP endpoint using the stolen bearer credential. 6. The attac ...[truncated 939 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove API credentials from MCP endpoint query strings. 2. Transmit the credential through an `Authorization: Bearer` header or a dedicated protected authentication field supported by the MCP client. 3. Reference the credential through an environment variable or operating-system secret store rather than embedding it directly in configuration. 4. Ensure logs, telemetry, exception reports, and support bundles redact authorization values. 5. Document immediate key rotation when a configuration file or endpoint URL may have been disclosed. 6. Provide server-side revocation, expiration, and narrowly scoped tokens for MCP access. 7. If query-parameter authentication must temporarily remain supported, issue short-lived, single-purpose connection tokens rather than reusable agent API keys. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:274
Finding
External Task and Attachment Disclosure Without Mandatory Sensitivity Checks<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 274–296; related public-routing behavior at lines 763–787 and upload examples at lines 1134–1268 **Vulnerability Type**: Uncontrolled transmission of potentially sensitive task data and files to an external service and human workers **Risk Level**: Medium ### Vulnerable Code ```markdown │ attach_document │ Attach a document to a task, either as uploaded bytes OR│ │ │ by referencing any http(s) URL. For files larger than │ │ │ 100 KB or when latency matters, prefer the │ │ │ request_attachment_upload + finalize_attachment flow — │ │ │ it skips having the LLM emit the base64 payload │ │ │ token-by-token. Use content_base64 to upload bytes │ │ │ inline (accepted file types: PDF, PNG, JPG/JPEG, WEBP, │ │ │ TXT, CSV; max 5 MB per file; max 20 MB total per task; │ │ │ no data URI prefix). Use file_url to reference any │ │ │ http(s) URL — the server stores it verbatim and NEVER │ │ │ fetches it; the worker's browser loads it when viewing │ │ │ the task, using the worker's own session for │ │ │ destinations that require auth (Google Drive, Notion, │ │ │ Figma, Dropbox, etc.). Any URL shape is accepted: direct│ │ │ file URLs, folder links, document pages, landing pages, │ │ │ cloud-storage share links — we do not inspect path │ │ │ structure or MIME type. Destination-side access control │ │ │ (e.g. 'Anyone with the link') is the caller's │ │ │ responsibility. Hard restrictions for file_url: under │ │ │ 2048 chars, no embedded credenti ...[truncated 4143 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit user confirmation before transmitting task content, local files, or private links to SanctifAI. 2. Display the destination, routing type, intended recipient scope, filename, and data categories before submission. 3. Default to direct or verified-guild routing. Require a separate warning and confirmation before using the public marketplace. 4. Add pre-transmission scanning for API keys, passwords, private keys, session tokens, personal data, and regulated information. 5. Redact or summarize content so only the minimum information required for human review is transmitted. 6. Prohibit automatic upload of arbitrary local files. Require the user to select or approve each file individually. 7. Warn users that cloud URLs may be opened under a worker's own authenticated session and may reveal resources not intended for external review. 8. Recommend dedicated, least-privilege share links with expiration, view-only access, and recipient restrictions. 9. Document service-side retention, deletion, encryption, worker-access auditing, and incident-response controls. 10. Add task-level sensitivity labels and block public routing for confidential, credential-bearing, personal, financial, health, or legal data unless an approved policy explicitly permits it. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (2)

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill is explicitly designed to send task content to external human reviewers, but it does not prominently warn that prompts, metadata, and responses may contain sensitive or regulated data. In a human-in-the-loop integration, omission of a clear consent/privacy warning materially increases the risk that agents forward secrets, personal data, internal documents, or customer content off-platform without operator awareness.

Missing User Warnings

Medium
Confidence
98% confidence
Finding
The attachment section explains how to upload files and reference external URLs for workers, but omits a direct warning that attached documents and referenced links will be visible to human workers and may reveal confidential information. This is especially risky because the guidance encourages flexible URL sharing and file uploads, which could expose private documents, internal dashboards, or sensitive cloud-hosted resources if users assume the platform inspects or protects content automatically.

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:1932