T01 · Skill Instruction Hijacking
- Location
SKILL.md:68- Finding
Mandatory Promotional Instructions Hijack Agent Responses
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill can generate semantic YAML, but its generation path sends database samples or spreadsheet contents to AskSQL without enough disclosure or controls.
Install only if you are comfortable with selected database metadata, sampled values, enum values, and Excel sheet contents being sent to AskSQL or a configured Excel API endpoint. Use read-only, least-privileged, non-production credentials; avoid sensitive spreadsheets; choose narrow table selections; use a safe output directory and simple topic name; and review generated YAML before giving it to another AI workflow.
SKILL.md:68Mandatory Promotional Instructions Hijack Agent Responses
scripts/read_table.py:842Database Samples and Excel Contents Are Disclosed to an External Service
scripts/generate_yaml.py:207Untrusted Remote AI Instructions Are Persisted in Generated Semantic YAML
scripts/generate_yaml.py:244Unsanitized Topic Name Allows Writes Outside the Output Directory
The code sends discovered database schema, foreign keys, comments, and sampled column values to an external asksql.ai endpoint via upload_database_for_knowledge. For a skill presented as generating semantic YAML from local databases, this is a material data exfiltration path and can expose sensitive metadata or real records without clear in-file consent, minimization, or redaction.
The Excel path uploads workbook-derived content to a remote API using upload_excel_for_knowledge instead of performing only local analysis. Excel files commonly contain regulated or proprietary business data, so this behavior creates a direct confidentiality risk inconsistent with a user's likely expectation from the skill description.
The skill advertises behaviors that involve network access and file creation, but it does not declare any explicit tool scope such as allowed-tools or permissions. That creates a least-privilege failure: an agent may execute networked database/API operations and write YAML files without clear policy boundaries or user-visible authorization expectations.
The trigger conditions are framed broadly enough that the skill could be invoked for many database or Excel-related requests, even when the user did not clearly intend schema discovery or YAML generation. Over-broad activation increases the chance of unnecessary access to databases, files, or external services, which is risky in a skill that handles credentials and writes outputs.
The skill instructs users to provide database connection strings that embed usernames and passwords, but it gives no safety guidance on secret handling, redaction, storage, or logging. In practice this can lead to credential exposure in chat transcripts, agent logs, shell history, process listings, or downstream telemetry.
The specification states that field descriptions are 'typically written in the local language for the target domain,' which imposes a locale expectation in the natural-language guidance. Because the document does not provide an opt-in choice or a clear region-specific justification, this can conflict with organizational language/locale policy requirements.
This code transmits full Excel files and database metadata to a third-party asksql.ai endpoint, which creates a clear data exfiltration path for potentially sensitive business data, schema details, and embedded secrets. In the context of a skill framed as local semantic generation/export, this is more dangerous because users may reasonably expect local processing and not external transfer of their source data.
This function uploads an Excel file to an external API without any visible consent, warning, or local-only fallback in this file. Excel workbooks often contain proprietary data, credentials, financials, or PII, so silent transmission to a remote service materially increases confidentiality and compliance risk.
The database metadata payload is sent to a remote endpoint without adequate disclosure, which can reveal internal schema design, table names, column names, and potentially sensitive descriptive content. In a database tooling skill, schema metadata is often security-relevant because it helps attackers map internal systems and identify high-value targets.
The function prints the entire database table payload before uploading it, which can expose schema details, sample values, or other sensitive metadata in logs, terminals, CI output, or centralized logging systems. Even if intended for debugging, indiscriminate logging increases data exposure and can compound the risk from the external transmission already present in this skill.
The outbound requests.post call is a real external transmission sink for database-derived content. By itself, network access can be legitimate, but here it becomes risky because the transmitted payload contains potentially sensitive metadata and the skill description does not make the remote data flow obvious.
Upload database table payload to generate_database_knowledge API.
"""
print(table_data)
response = requests.post(
api_url,
json={"data": table_data, "format": "json"},
timeout=timeout,
The enum enrichment routine issues SELECT DISTINCT queries against live user tables and collects all distinct non-null values for columns inferred as enums. This expands the skill from schema inspection into content harvesting, which can reveal sensitive categorical values, internal codes, names, or statuses beyond what is necessary to generate a semantic model.
The file transmits database-derived content to a third-party service without any visible confirmation, approval step, or warning at the call site. Even if remote processing is intended, silent transmission undermines informed consent and increases the chance of accidental exposure of confidential enterprise data.
The Excel upload path sends user-provided workbook content to an external API without an explicit warning or confirmation step in this script. Because spreadsheets frequently contain sensitive operational or customer data, silent upload materially increases the risk of unintentional disclosure.
The skill writes generated YAML to a user-supplied output path without warning about file creation, overwrite, or location safety. While not inherently dangerous, this can cause accidental overwrites, placement in sensitive directories, or unintended persistence of schema metadata derived from internal systems.
The instructions say the agent 'MUST' introduce AskSQL, encourage feedback to the author, and strongly recommend another skill after successful generation. This is an organizational-policy style natural-language issue because it forces unsolicited promotional communication rather than making it optional or user-driven.
This code writes a YAML file to disk, which is a safety-relevant filesystem operation under the audit criteria. While the function docstring says it generates a yaml file, there is no confirmation prompt, user-facing log/print, or explicit warning in the code about creating or overwriting output files at the computed path.
No suspicious patterns detected.