Back to skill

Security audit

SanctifAI Trust

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent, but its hosted chat bridge can receive raw task and result data despite prominent privacy claims that only hashes leave the client.

Read the chat-bridge section carefully before installing. The embedded flow appears designed to send only commitments, but the hosted chat bridge receives raw taskData and resultData, so use opaque, non-sensitive values there or choose an embedded/self-hosted commitment-only design for confidential workflows.

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
Findings (1)

other

Warning
Location
SKILL.md:262
Finding
Raw Payload Disclosure Contradicts the Declared Privacy Model## Vulnerability Details **File Location**: `SKILL.md`, lines 14–15 and 262–297 **Vulnerability Type**: Undisclosed Raw Data Disclosure **Risk Level**: Medium ### Vulnerable Code The Skill makes the following global privacy claim: ```text Raw task data never leaves the client — only `0x`+SHA-256 commitments are sent. ``` However, its hosted chat-bridge workflow instructs the agent to transmit raw payloads: ```text 1. POST {APP_BASE_URL}/api/v1/attestations 2. Human opens approve_url in Chrome (passkey) 3. Poll GET {APP_BASE_URL}/api/v1/attestations/{id} or GET {APP_BASE_URL}/api/v1/attestations/{id}/wait 4. status=completed → certificate_url (hosted on trust.sanctifai.com) ``` ```json { "task_type": "GEN", "domain": "GEN", "task_subtype": "Chat approval", "requesting_agent": "Support bot", "taskData": { "summary": "opaque task payload" }, "resultData": { "decision": "approved" } } ``` The instructions later confirm that the raw objects are posted: ```text Retain the exact `taskData` / `resultData` you posted (see Shared rules). The bridge approve client uses the same `sha256Hex` helper as Embedded. ``` ### Technical Analysis The global description states that only SHA-256 commitments leave the client. In contrast, the chat-bridge flow directs the agent to send raw `taskData` and `resultData` to the externally hosted `https://bridge.trust.sanctifai.com` service. Describing a payload as “opaque” does not technically enforce anonymization, data minimization, or secret removal. Although the Skill separately warns users not to include personally identifiable information, an agent may still place confidential business information, transaction details, review content, or sensitive decisions into these objects. This behavior exceeds the minimum data disclosure demonstrated as necessary by the embedded workflow, which computes commitments locally and sends only `task_commitment` and `result_commitment`. The chat bridge therefore expands third- ...[truncated 1995 chars]
Remediation
## Remediation Suggestions 1. Compute the task and result commitments on the client or agent side before contacting the hosted bridge. 2. Change the bridge API to accept only `task_commitment` and `result_commitment` wherever raw data is not essential. 3. If the hosted bridge genuinely requires raw objects, revise the global privacy claim to explicitly distinguish the embedded, extension, and chat-bridge data flows. 4. Obtain explicit user confirmation before transmitting raw task or result content to the external service. 5. Default to metadata-only payloads and enforce strict field allowlists, size limits, and client-side secret and PII detection. 6. Clearly document what the bridge receives, why it requires the data, how long it retains it, who can access it, and which subprocessors receive it. 7. Provide a self-hosted or commitment-only bridge option for sensitive workflows. 8. Add automated tests or documentation checks that prevent future claims that all surfaces transmit only commitments while any surface still accepts raw payloads.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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

Static analysis

No suspicious patterns detected.