T09 · Insecure Skill Coding Practices
- Location
SKILL.md:5- Finding
Authenticated Platform Traffic Defaults to Plaintext HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill matches its publishing-assistant purpose, but it handles login/session credentials and can perform high-impact publishing or reminder actions without enough confirmation or transport safeguards.
Review before installing. Use only on a trusted network, prefer an HTTPS Founder platform URL, avoid exposing raw cookies or WeChat secrets in logs, use least-privileged WeChat credentials, and require a manual preview plus explicit final approval before any WeChat publication, DOI registration, or reviewer reminder send.
SKILL.md:5Authenticated Platform Traffic Defaults to Plaintext HTTP
SKILL.md:668Session Cookie Is Unnecessarily Extracted into Agent-Visible State
SKILL.md:392WeChat App Secret and Access Tokens Are Embedded in Command-Line URLs
SKILL.md:382Untrusted Article Content Is Inserted into Shell-Based Publication Commands
SKILL.md:317Irreversible WeChat Publication Uses the First Fuzzy Search Result Without Final Confirmation
This workflow culminates in directly publishing content to a WeChat public account via external API calls, but the documented steps do not require an explicit final user confirmation after the exact article, account context, and content are resolved. Because the search is fuzzy and the first result is selected automatically, a mistaken or manipulated invocation could publish the wrong article to a public channel, creating irreversible external disclosure and reputational damage.
This step transmits sensitive WeChat credentials and later publication data to an external third-party service using curl. External transmission is expected for the feature, but it is still security-relevant because it extends trust beyond the journal platform and can expose account capabilities or publish content if misused; the absence of an explicit confirmation and tighter handling of secrets increases the risk.
4.1 获取 access_token:
curl -s "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${WECHAT_APP_ID}&secret=${WECHAT_APP_SECRET}"
# 返回:{"access_token":"xxx","expires_in":7200}
This step transmits sensitive WeChat credentials and later publication data to an external third-party service using curl. External transmission is expected for the feature, but it is still security-relevant because it extends trust beyond the journal platform and can expose account capabilities or publish content if misused; the absence of an explicit confirmation and tighter handling of secrets increases the risk.
4.1 获取 access_token:
curl -s "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${WECHAT_APP_ID}&secret=${WECHAT_APP_SECRET}"
# 返回:{"access_token":"xxx","expires_in":7200}
Uploading a cover image to WeChat is an external data transmission to a third-party platform. In context this is intentional functionality, but it still carries risk because local or temporary files are being sent off-platform without a documented user confirmation of the exact file, and an incorrect file path or automation mistake could disclose unintended content.
4.2 上传封面图获取 media_id:
curl -s "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=${ACCESS_TOKEN}&type=image" \
-F "media=@/tmp/cover.jpg" \
-F 'description={"title":"cover","introduction":"cover image"}'
# 返回:{"media_id":"xxx","url":"xxx"}
This step sends the article body, metadata, and publication assets to WeChat's draft API, which is a substantive external disclosure of potentially unpublished content. Because the workflow auto-selects the first fuzzy search result and lacks a mandatory preview/confirmation, an incorrect match could cause unauthorized transfer and downstream publication preparation of the wrong manuscript.
4.3 创建草稿:
curl -s "https://api.weixin.qq.com/cgi-bin/draft/add?access_token=${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"articles": [{
Submitting the draft for publication is an external side effect that can make content publicly accessible through the official account. In this context the risk is elevated because this is the final irreversible publish action, yet the documented flow performs it automatically once prior steps succeed and does not require a distinct final authorization checkpoint.
4.4 发布文章:
curl -s "https://api.weixin.qq.com/cgi-bin/freepublish/submit?access_token=${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"media_id":"${draft_media_id}"}'
# 返回:{"errcode":0,"errmsg":"ok","publish_id":xxx,"msg_data_id":xxx}
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
4.5 获取文章 URL:
curl -s "https://api.weixin.qq.com/cgi-bin/freepublish/get?access_token=${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"publish_id":${publish_id}}'
# 返回:{"article_detail":{"item":[{"article_url":"http://mp.weixin.qq.com/s?..."}]}}
在 L471 和 L513,文档明确写明该功能“仅展示过期稿件列表,不执行催修操作”。但 manifest 的触发关键词在 L003 直接宣称支持“自动催修”,这与正文对该能力的实际定义形成主动矛盾,容易使用户误以为会真正发送催修通知。
L522 和 L549 明确说明“自动催审”功能只获取并展示送专家审阶段的过期稿件,不执行催审操作;而 L003 把“自动催审”列为触发关键词,语义上表示会自动完成催审。这是文档内部关于技能意图与实际行为的直接冲突。
The '催审第 X 条' action sends reminder emails/SMS messages to reviewers, but there is no explicit execution-time confirmation before contacting external recipients. Since it acts on a cached prior list by index, a user could trigger notifications to the wrong expert or for the wrong manuscript, causing unintended communication and workflow disruption.
The manifest explicitly supports operations involving login cookies, platform authentication, and API calls, and it also defines WeChat credentials in environment variables, but it provides no user-facing warning or consent language about handling sensitive secrets and session data. In this context, the ability to obtain login cookies and use browser-evaluated API calls increases the risk of credential leakage, session hijacking, or unauthorized account actions if outputs, logs, or prompts expose this data.
The manifest requests exec permission even though the declared capabilities and description only require browser automation and browser.evaluate. Unnecessary command-execution permission materially expands the attack surface: if the skill or a downstream prompt flow is abused, an attacker could run arbitrary local commands, access files, or pivot beyond the browser session.
This markdown file presents all setup, trigger, and safety instructions exclusively in Chinese. Under the policy rule for natural-language violations, forcing a specific language without user opt-in or an explicit region-specific justification is a reportable issue.
No suspicious patterns detected.