Back to skill

Security audit

Mukun Md Push Wechat

Security checks for vulnerabilities and agentic risk

Overview

The skill largely matches its stated Markdown-to-draft purpose, but it uses sensitive publishing credentials and can alter WeChat drafts with hard-coded author and promotional footer content.

Install only if you are comfortable giving the skill access to WeChat and Juejin publishing credentials. Before publishing, review the generated HTML and draft metadata, remove or override the default ending_lines and hard-coded author behavior, store config.yaml with restrictive permissions, and avoid using it on Markdown files or images that contain private or proprietary content.

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 (3)

other

Error
Location
scripts/md2article_html.py:914
Finding

Unrequested promotional content is appended to generated articles

Content
View full analysis
{line}' for line in lines ) return ( f'
' f'{lines_html}' f'
' ) ``` ```python footer_section = render_footer(s) ending_section = render_ending(s) ``` ```python "ending_lines": [ "—End—", "如果觉得不错 随手点个 赞、在看、转发 三连吧", "关注+星标 可第一时间收到更多精彩思考和总结", "您的支持是我继续写下去的动力", "注:原创不易,合作请在公众号后台留言,未经许可,不得随意修改及盗用原文。", ], ``` ### Technical Analysis Article mode is the Skill's documented default. Its built-in default configuration contains engagement, follow, redistribution, and copyright messages that are not derived from the user's Markdown. During normal rendering, `render_ending()` reads these default lines and inserts them into the output. The final article assembly calls this function without requiring explicit user consent. Consequently, a routine Markdown conversion can produce content beyond what the user authored or requested. The configured lines are also inserted as raw HTML rather than escaped text. Although the built-in strings are static, a custom configuration can place arbitrary HTML markup in this section. This increases output-integrity risk if configuration files are obtain ...[truncated 1207 chars]
Remediation
View remediation

other

Error
Location
scripts/push_daily.py:602
Finding

WeChat drafts are assigned a hard-coded author identity

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/push_daily.py:68
Finding

Long-lived publishing credentials are kept in an unprotected plaintext configuration

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (85)

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'env' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Concealed Executable Artifact

High
Category
Supply Chain
Confidence
100% confidence
Finding

An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · README.md (reported line 131)May include surrounding context.

如果需要脚本(转换 HTML 和推送功能依赖 Python 脚本)

git clone https://github.com/MuKunZiAI/mukun_md_push.git /tmp/mukun_md_push cp -r /tmp/mukun_md_push/scripts ~/.codex/skills/mukun-md-push-wechat/ rm -rf /tmp/mukun_md_push

text

> Codex 的 Skills 是独立 `.md` 文件格式(Description / Input / Steps),而本 Skill 使用 `SKILL.md` + `scripts/` 结构。上述安装方式让 Codex 读取到 SKILL.md 中的指令内容,同时脚本可用于手动调用。

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · README.md (reported line 131)May include surrounding context.

如果需要脚本(转换 HTML 和推送功能依赖 Python 脚本)

git clone https://github.com/MuKunZiAI/mukun_md_push.git /tmp/mukun_md_push cp -r /tmp/mukun_md_push/scripts ~/.codex/skills/mukun-md-push-wechat/ rm -rf /tmp/mukun_md_push

text

> Codex 的 Skills 是独立 `.md` 文件格式(Description / Input / Steps),而本 Skill 使用 `SKILL.md` + `scripts/` 结构。上述安装方式让 Codex 读取到 SKILL.md 中的指令内容,同时脚本可用于手动调用。

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README asks users to configure a live Juejin session cookie, which is effectively a bearer credential, but provides no prominent warning about its sensitivity, scope, or exposure risk. If this cookie is stored insecurely, shared with an agent, logged, or committed to a repository, an attacker could hijack the user's Juejin account session and create or modify drafts.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

从代码内容看,这是一个本地命令行脚本 md2article_html.py,核心功能是解析 Markdown 并生成微信公众号兼容的 HTML 文件,且注释中明确写着“文章模式”。它处理标题、引用、表格、代码高亮、列表、图片、样式主题与配置加载,并最终写出 HTML 文件。没有看到任何网络请求、API 调用、认证信息处理、草稿箱上传、微信公众号接口、掘金接口,或 --news 分支逻辑。因此,代码与声明存在实质性不一致:声明描述了一个更完整的多模式发布技能,而实际代码片段仅实现其中一部分——文章模式的 HTML 转换。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

代码文件 scripts/md2news_html.py 的主功能是读取本地 Markdown 文件,去除 frontmatter,解析新闻分区结构,按“新闻模式”模板生成 HTML,并写入本地输出文件。它还会读取本地配置文件 ~/.md_push_wechat/config.yaml 来调整样式。整个代码没有任何 HTTP 请求、API 调用、认证、草稿箱上传或外部平台交互逻辑,因此与声明中的“推送到微信公众号草稿箱”“推送 Markdown 到稀土掘金草稿箱”明显不符。另外,声明称支持文章模式(默认,含 7 种预设样式)和新闻模式,但当前代码仅针对新闻模式实现,且没有文章模式分支或多预设样式选择逻辑。虽然“Markdown 转微信 HTML”这一部分与声明部分吻合,但声明覆盖的关键能力有多项在该代码中缺失,因此应判定为描述与实际行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

从给出的代码片段看,核心行为是模式选择与参数转发,然后通过 subprocess 调用本地子脚本完成转换。它确实与“Markdown 转微信兼容 HTML、支持文章/新闻模式”这一部分描述基本一致。但声明还包含“进一步推送到微信公众号草稿箱”以及“支持推送 Markdown 到稀土掘金草稿箱”的能力,而当前代码中没有任何网络请求、API 调用、认证处理、草稿箱写入或相关参数,因此这些能力与所示代码行为不符。另,声明中的“7种预设样式”在本片段中也未体现,虽然可能在被调用子脚本中实现,但基于当前代码无法验证。综合判断,描述比实际代码展示的能力更宽,存在能力声明不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

整体上,这段代码与“微信公众号 Markdown 转 HTML 并推送草稿箱”的核心描述大体一致:它调用 md2wechat_html.py 生成微信兼容 HTML,读取 ~/.md_push_wechat/config.yaml 中的 appid/secret,获取微信 access_token,上传封面图和正文图片到微信素材库,并创建或更新微信草稿箱。支持文章模式、新闻模式、草稿更新、frontmatter 标题/摘要、图片缓存等,均与描述相符或属于实现细节。主要不匹配点在于声明中明确写了“支持推送 Markdown 到稀土掘金草稿箱”,但该代码完全没有掘金(Juejin)相关实现,没有对应域名、接口、认证信息、请求构造或草稿推送逻辑。因此描述包含了代码块未实现的重要能力,应判定为存在描述与行为不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

声明描述的是一个以“Markdown 转微信公众号 HTML / 推送公众号”为核心的技能,同时附带支持掘金草稿推送。当前代码片段的主功能却完全集中在掘金:调用 api.juejin.cn 和 imagex.bytedanceapi.com,上传正文图片到掘金图床,并创建或更新掘金草稿。代码没有任何微信公众号相关接口、HTML 样式转换、公众号格式化、新闻模式或预设样式处理逻辑。因此,代码行为只覆盖了声明中的一小部分(掘金草稿推送),而缺失了声明中的主要能力,属于明显的描述与实际行为不符。

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 119)May include surrounding context.

md
4. **调用 `push_daily.py`**:将生成的摘要通过 `--digest` 参数传入(若 frontmatter 已有 digest 则使用 frontmatter 中的值)

Lp1

High
Category
MCP Least Privilege
Confidence
98% confidence
Finding

This script performs outbound network operations to the WeChat API, including obtaining access tokens and uploading article content and images, but the declared permissions reportedly do not cover network access. In an agent skill context, undeclared network capability is dangerous because it can exfiltrate local Markdown contents, images, titles, digests, and associated credentials to external services without transparent permission scoping.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
85% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 120)May include surrounding context.

OpenAI Codex CLI/APP

Codex CLI 使用 AGENTS.md 作为项目级指令文件,Skills 放在 ~/.codex/skills/ 目录下:

bash
# 将 SKILL.md 复制到 Codex skills 目录

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
85% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 124)May include surrounding context.

bash
# 将 SKILL.md 复制到 Codex skills 目录
mkdir -p ~/.codex/skills/mukun-md-push-wechat
curl -o ~/.codex/skills/mukun-md-push-wechat/SKILL.md \
  https://raw.githubusercontent.com/MuKunZiAI/mukun_md_push/main/SKILL.md

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 124)May include surrounding context.

bash
# 将 SKILL.md 复制到 Codex skills 目录
mkdir -p ~/.codex/skills/mukun-md-push-wechat
curl -o ~/.codex/skills/mukun-md-push-wechat/SKILL.md \
  https://raw.githubusercontent.com/MuKunZiAI/mukun_md_push/main/SKILL.md

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 124)May include surrounding context.

bash
# 将 SKILL.md 复制到 Codex skills 目录
mkdir -p ~/.codex/skills/mukun-md-push-wechat
curl -o ~/.codex/skills/mukun-md-push-wechat/SKILL.md \
  https://raw.githubusercontent.com/MuKunZiAI/mukun_md_push/main/SKILL.md

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

Scanner excerpt · README.md (reported line 125)May include surrounding context.

bash
# 将 SKILL.md 复制到 Codex skills 目录
mkdir -p ~/.codex/skills/mukun-md-push-wechat
curl -o ~/.codex/skills/mukun-md-push-wechat/SKILL.md \
  https://raw.githubusercontent.com/MuKunZiAI/mukun_md_push/main/SKILL.md

# 如果需要脚本(转换 HTML 和推送功能依赖 Python 脚本)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The README instructs users to place WeChat AppID and AppSecret into a local config file and describes remote draft-push behavior, but it does not clearly warn that these are sensitive credentials or recommend storage and handling precautions. In an agent-skill context, encouraging automated use of publishing credentials without explicit privacy guidance increases the risk of accidental disclosure, misuse, or unsafe logging.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs publishing content to external platforms using locally stored app secrets or cookies, but it does not require a clear user-facing warning or explicit confirmation before transmitting article content and credentials-derived requests. This is dangerous because users may trigger external publication or credential use without understanding that local secrets and private draft content will be sent to third-party services.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The Juejin workflow states that local image references may be uploaded to Juejin CDN, but there is no strong user warning at the point of action that local files will leave the machine and become hosted on a third-party platform. This can leak sensitive screenshots, diagrams, filesystem-derived content, or proprietary assets embedded in markdown if users assume the operation only creates a draft from text.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

For markdown-like descriptive content, warnings are expected when the skill behavior may affect user data or privacy. Here the workflow explicitly collects Git records, project-management data, and chat logs, then pushes generated reports to Feishu/DingTalk/WeCom, but the article provides no caution about sensitive content, consent, or destination disclosure.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
87% confidence
Finding

The example performs an outbound POST of generated content to a webhook, which can transmit internal commit summaries or other sensitive operational data to an external destination. In this skill context, the surrounding article explicitly encourages collecting Git, chat, and task information before automated delivery, so the lack of validation, allowlisting, or privacy guardrails makes accidental data exfiltration more plausible.

Content

Scanner excerpt · examples/blueprint/article_blueprint_example.html (reported line 111)May include surrounding context.

html
<code><span leaf="">            <span class="code-snippet__string">"</span><span class="code-snippet__string">elements</span><span class="code-snippet__string">"</span>: [{<span class="code-snippet__string">"</span><span class="code-snippet__string">tag</span><span class="code-snippet__string">"</span>: <span class="code-snippet__string">"</span><span class="code-snippet__string">markdown</span><span class="code-snippet__string">"</span>, <span class="code-snippet__string">"</span><span class="code-snippet__string">content</span><span class="code-snippet__string">"</span>: content}],</span></code>
<code><span leaf="">        },</span></code>
<code><span leaf="">    }</span></code>
<code><span leaf="">    requests.post(webhook_url, json=payload)</span></code>
</pre>
</section>
<section style="margin:34px 0 24px 0;text-align:center"><p style="margin:0;line-height:1"><span style="display:inline-block;vertical-align:middle;width:34%;border-top:2px solid #cfd8e3;height:0"></span><span style="display:inline-block;vertical-align:middle;margin:0 10px;background:#1857b8;color:#ffffff;padding:9px 14px;font-size:24px;font-weight:bold;line-height:1;min-width:48px">07</span><span style="display:inline-block;vertical-align:middle;width:34%;border-top:2px solid #cfd8e3;height:0"></span></p><h2 style="margin:16px 0 0 0;font-size:42px;font-weight:bold;color:#16191f;line-height:1.5;display:block;background:none;padding:0">最终效果</h2></section>

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This HTML article is entirely written in Chinese and presents the skill behavior, prompts, titles, and outputs in a fixed language without any indication that users may choose another language or that the skill is region-specific. The policy for natural-language content requires either user opt-in for a specific language/locale or a clearly justified locale restriction.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The workflow describes automatically sending generated reports to external messaging platforms, but it does not warn that the content may contain sensitive operational, project, or personal information. This increases the risk of accidental data exfiltration or oversharing, especially when summaries are auto-generated from broad internal sources and pushed without human review.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The workflow describes automatically sending generated reports to external messaging platforms, but it does not warn that the content may contain sensitive operational, project, or personal information. This increases the risk of accidental data exfiltration or oversharing, especially when summaries are auto-generated from broad internal sources and pushed without human review.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.