Back to skill

Security audit

True Seeing

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent fact-checking workflow that uses web search and user-approved article corrections, with no hidden code, persistence, credential access, or automatic destructive behavior found.

Install this if you want a Chinese-oriented fact-checking workflow and are comfortable sending article claims to web search. Review sources carefully before accepting corrections, especially when results come from blogs, social media, or unfamiliar sites.

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:183
Finding
Untrusted Web Content Is Processed Without Prompt-Injection Isolation## Vulnerability Details **File Location**: `SKILL.md`, lines 183–190 **Vulnerability Type**: Indirect prompt injection through untrusted search results **Risk Level**: Medium ### Vulnerable Instructions ```markdown **3c.** For every fact in `batch_pool` with the `keywords-generated` state, use `sessions_spawn` to launch sub-agents for parallel searches: - Each sub-agent executes `web_search`, takes the first three results, and retrieves their content with `web_fetch`. - If at least one search result contains the entity from the original text, change the state to `fact-fetch`. - If no result contains the entity, or a tool returns an error, retain the `keywords-generated` state and keep the fact in `batch_pool`. **3d.** For every fact in `batch_pool` with the `fact-fetch` state, compare each element according to `references/verification-criteria.md`: - If all elements are consistent, change the state to `Verified`. - If a key element is inconsistent, change the state to `Corrected` and record `actual_fact`, `source_url`, and `divergence_type`. - If the search result has no direct correspondence with the entity, number, or date in the original text, change the state to `Remain` and record the reason. ``` The quoted instructions are an English translation of the complete affected segment in `SKILL.md`. ### Technical Analysis The skill directs sub-agents to retrieve the first three search results with `web_fetch` and process the returned page content as evidence. Search-result pages are untrusted, attacker-controlled inputs, but the skill provides no explicit security boundary requiring sub-agents to: - Treat fetched page text exclusively as untrusted data. - Ignore instructions, tool requests, or role-like text embedded in a page. - Prevent fetched content from changing the sub-agent's task or output format. - Restrict retrieval to safe public HTTP or HTTPS destinations. - Prefer authoritative sources or require independent corroboration. - Separate verbati ...[truncated 2772 chars]
Remediation
## Remediation Suggestions 1. **Establish an explicit untrusted-content boundary** - State that all search results and fetched pages are untrusted data. - Instruct every sub-agent never to follow commands, role declarations, tool requests, or policy text found in fetched content. - Require the sub-agent to use page content only to extract factual evidence relevant to the assigned claim. 2. **Use constrained structured extraction** - Require sub-agents to return a fixed schema containing only the source URL, page title, publication date, quoted evidence, source type, and comparison result. - Reject output containing unexpected instructions, executable content, or fields outside the schema. - Bound the size of excerpts and require exact quotations to remain distinct from generated analysis. 3. **Strengthen source validation** - Prefer official publications, regulatory filings, primary documentation, and established professional sources. - Do not classify a fact as `Corrected` based solely on a blog, social-media post, content farm, or other user-generated source. - Require corroboration from at least two independent sources for material corrections when no authoritative primary source is available. - Detect mirrors and syndicated copies so they are not counted as independent evidence. 4. **Harden URL retrieval** - Permit only public HTTP and HTTPS URLs. - Reject redirects or destinations resolving to loopback, link-local, private, reserved, or cloud-metadata address ranges. - Apply response-size, content-type, redirect-count, and timeout limits. - Do not download or execute scripts, binaries, archives, or active page content. 5. **Add prompt-injection detection** - Flag content containing phrases that address the agent, request policy overrides, instruct tool use, or demand a specific classification. - Exclude suspicious text from evidence and mark the affected fact as `Remain` when trustworthy evidence cannot be ob ...[truncated 753 chars]
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Vague Triggers

Medium
Confidence
91% confidence
Finding
The trigger examples are broad enough to match routine requests like checking numbers or verifying a passage, which can cause the skill to activate outside narrowly intended fact-checking scenarios. In an agent environment, overbroad invocation can route unrelated user content into web-search and replacement workflows, creating unnecessary data exposure and unintended actions.

Natural-Language Policy Violations

Medium
Confidence
89% confidence
Finding
The manifest description and the entire user-facing skill specification are written exclusively in Chinese, including trigger phrases, inputs, outputs, and user instructions. There is no indication that the skill supports other languages or lets the user opt into Chinese, which can violate language/locale policy for general-purpose skills.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This markdown file contains user-facing evaluation inputs, expected behaviors, and output strings exclusively in Chinese. Under the policy, forcing a specific language without user opt-in or a documented justification is a natural-language locale violation.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This markdown file is entirely written in Chinese and prescribes classification labels and procedures in that language, with no indication that users may opt into another language or locale. Under the policy rule, forcing a specific language without user choice is a natural-language policy violation.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
The README presents the skill instructions entirely in Chinese while also exposing English trigger text, but it does not state that Chinese output is optional or limited to a China-specific use case. This can be a language/locale policy issue because the skill appears to impose a specific language without user opt-in.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
This file is entirely written as mandatory operating guidance in Chinese, with no indication that users may choose another language or that the skill is intentionally limited to a Chinese-language context. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation.

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
Line L09 states '中文查询优先;如果无结果,尝试英文查询', which imposes a language preference in the skill's instructions. Under the policy, forcing a specific language without user opt-in can be a natural-language locale violation, and this file does not present the preference as optional or user-configurable.

Static analysis

No suspicious patterns detected.