T09 · Insecure Skill Coding Practices
- Location
SKILL.md:299- Finding
Unvalidated Report URL Permits Local File Disclosure and Unintended Network Access
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This research skill is coherent, but it should be reviewed because it automatically moves reports through unvalidated downloads and Feishu/message channels without enough safeguards.
Install only if you are comfortable sending research prompts and generated reports to ZeeLin, and, on Feishu, having report text copied into a Feishu document. Do not submit secrets, regulated data, or sensitive business material unless you have checked the provider and workspace policies. Prefer runs where you can inspect the returned report URL and file before forwarding, and avoid shared hosts or predictable /tmp paths for sensitive reports.
SKILL.md:299Unvalidated Report URL Permits Local File Disclosure and Unintended Network Access
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
This workflow downloads a report, extracts its contents into plaintext locally, and uploads the material into a Feishu document without any disclosure or approval step. That materially increases exposure because confidential content is duplicated across systems and transformed into easier-to-search plaintext, potentially inheriting broad document-sharing defaults.
The file instructs the agent to prompt the user in Chinese when no API key is provided, and other canned user messages throughout the document are also fixed in Chinese. There is no indication that the skill is restricted to Chinese-speaking users or that users can choose their preferred language, which conflicts with the language/locale policy criteria.
The skill sends user prompts and session identifiers to an external service but does not warn that user-supplied research content will leave the local platform. This is a privacy and data-governance issue because users may provide proprietary or regulated information without informed consent.
The example sends arbitrary user research content and an API key to an external endpoint. In the context of a research skill this transmission is functional, but it is still security-relevant because the skill does not constrain data sensitivity, warn users, or minimize what is sent.
API_KEY="${DESEARCH_API_KEY}"
curl -s -X POST "https://desearch.zeelin.cn/api/conversation/anew" \
-H "Content-Type: application/json" \
-H "x-api-key: ${API_KEY}" \
-d '{
The workflow requires downloading generated reports into local temporary files and forwarding them, but it provides no warning about local storage, residual file retention, or host-level exposure. Sensitive reports can remain on disk or be accessed by other processes/users if temporary-file handling is weak.
This repeated API submission pattern again transmits user content externally without safeguards or disclosure. Repetition in error-handling examples reinforces unsafe default behavior and normalizes sending potentially sensitive prompts to a third party.
# 检查返回码
RESULT=$(curl -s -X POST "https://desearch.zeelin.cn/api/conversation/anew" \
-H "Content-Type: application/json" \
-H "x-api-key: ${API_KEY}" \
-d '{
The full workflow submits user questions to the external provider and stores returned identifiers for follow-up calls. While expected for the feature, it still creates external data exposure and session-linkability risks that are not acknowledged or limited in the skill text.
# 1. 创建任务
API_KEY="${DESEARCH_API_KEY}"
RESULT=$(curl -s -X POST "https://desearch.zeelin.cn/api/conversation/anew" \
-H "Content-Type: application/json" \
-H "x-api-key: ${API_KEY}" \
-d '{
The workflow downloads a report from an external URL to local storage and then forwards it to the user with no integrity, type, or size validation. That creates risk of mishandling untrusted remote content and propagating unexpected files through the messaging channel.
echo "PDF URL: $PDF_URL"
# 4. 下载 PDF 文件
curl -s -o /tmp/research_result.pdf "$PDF_URL"
# 5. 发送 PDF 文件给用户
message action=send target=用户ID filePath=/tmp/research_result.pdf
This instruction makes file download and onward transmission mandatory, encouraging blind forwarding of externally retrieved content. The danger is amplified because it forbids a safer alternative of returning text directly, forcing local file handling even when unnecessary.
PDF_URL=$(echo $REPORT_RESULT | jq -r '.data')
# 下载 PDF 文件
curl -s -o /tmp/research_result.pdf "$PDF_URL"
# 发送 PDF 文件给用户
message action=send target=用户ID filePath=/tmp/research_result.pdf
The 'download then immediately send' pattern forwards externally sourced content without validation and normalizes automated exfiltration to the user channel. In long-running workflows this also reduces opportunities for human review before transmission.
# 下载 PDF 后立即发送
curl -s -o /tmp/research_result.pdf "$PDF_URL"
message action=send target=用户ID filePath=/tmp/research_result.pdf
The Feishu-specific workflow expands the trust boundary from a research API into an additional document platform, and it instructs extracting report contents into local files and uploading them to Feishu without user consent or data classification checks. That creates unnecessary cross-system propagation of potentially sensitive research content and increases the chance of disclosure through the wrong channel, tenant, or sharing settings.
In the Feishu branch, external transmission is compounded: user content goes to the research API, then report content is later moved into Feishu. Multi-hop transfer across providers increases confidentiality and governance risk, especially without explicit user consent or workspace validation.
# 1. 创建任务
API_KEY="${DESEARCH_API_KEY}"
RESULT=$(curl -s -X POST "https://desearch.zeelin.cn/api/conversation/anew" \
-H "Content-Type: application/json" \
-H "x-api-key: ${API_KEY}" \
-d '{
Downloading a Word document from an external URL and unpacking it locally for text extraction handles untrusted remote content in a risky way, then prepares it for another upload target. This broadens attack surface and data exposure while lacking content validation, sandboxing, and disclosure.
WORD_URL=$(echo $REPORT_RESULT | jq -r '.data')
# 4. 下载 Word 文件
curl -s -o /tmp/research.docx "$WORD_URL"
# 5. 解压 Word 文件提取文字内容
unzip -q /tmp/research.docx -d /tmp/research_docx/
The manifest presents a research assistant, but these instructions add generic background task execution and process polling patterns (exec, process action=poll) as operational capabilities. That is infrastructure/control-plane behavior rather than core research functionality, and it is not declared in the skill description.
Detected: suspicious.generated_source_template_injection