Skill Trust Decision

wechat-md-publisher

合法的微信公众号 Markdown 发布工具,通过 npx 动态执行外部 npm 包,存在供应链风险但已明确声明并提供源码审计指引

Install decision first Source: ClawHub Scanned: Apr 6, 2026
Files 8
Artifacts 15
Violations 1
Findings 3

Why this conclusion was reached

1/4 dimensions flagged
Block
Declared vs actual capability

1 undeclared or violating capabilities were inferred.

Review
Hidden execution and egress

15 lower-risk artifacts were extracted and still need context.

Pass
Attack chain and severe findings

There is no explicit malicious chain in the report.

Pass
Dependencies and supply chain hygiene

Dependencies are present but no obvious high-risk issue stands out.

What drove the risk score up

供应链依赖 +15

通过 npx 动态拉取第三方 npm 包 wechat-md-publisher,版本 ^1.0.2 允许次要版本更新

凭证处理外包 +10

凭证加密由上游 npm 包处理,SKILL.md 建议审计但未强制验证

可选远程端点 +5

remote-theme-api 功能可能访问第三方端点并发送文章内容

Most important evidence

Low Supply Chain

npx 动态拉取第三方 npm 包存在供应链风险

SKILL.md 和 config.json 均声明使用 `npx --yes wechat-md-publisher@^1.0.2` 动态拉取执行。版本 ^1.0.2 允许次要版本自动更新,可能引入恶意代码。

SKILL.md:54
建议使用固定版本号(如 1.0.2)而非 ^1.0.2,并在使用前审计源码
Low Credential Theft

凭证加密处理依赖外部包

SKILL.md 声明凭证(WECHAT_APP_SECRET)由 wechat-md-publisher npm 包使用 AES-256 加密存储到 ~/.config/,但未强制验证加密实现。

SKILL.md:78
建议用户在使用前审计 https://github.com/sipingme/wechat-md-publisher/blob/main/src/services/account.ts
Info Supply Chain

可选的远程主题端点可能外传数据

remote-theme-api 功能在用户使用 `theme add-remote` 时访问第三方端点,可能发送文章内容。SKILL.md 已标注警告。

SKILL.md:72
仅使用可信任的主题源

Declared capability vs actual capability

Filesystem Pass
Declared READ/WRITE
→
Inferred READ/WRITE
SKILL.md:filesystem 声明读取 *.md/*.jpg/*.png/*.gif,写入 ~/.config/wechat-md-publisher-nodejs/
Network Pass
Declared READ
→
Inferred READ
SKILL.md 声明访问 api.weixin.qq.com、mp.weixin.qq.com
Shell Block
Declared NONE
→
Inferred WRITE
scripts/run.js:12 使用 spawnSync 执行 npx 命令,属于间接 shell 执行

Suspicious artifacts and egress

Medium External URL
https://mp.weixin.qq.com/

README.md:54

Medium External URL
https://www.toutiao.com/article/123

README.md:142

Medium External URL
https://api.md2wechat.cn

README.md:209

Medium External URL
https://mp.we...

SKILL.md:386

Medium External URL
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

SKILL.md:626

Medium External URL
https://mp.weixin.qq.com/s/abc

SKILL.md:716

Medium External URL
https://www.xiaohongshu.com/explore/xyz

SKILL.md:717

Medium External URL
https://www.toutiao.com/article/7000000000000000000/

SKILL.md:807

Medium External URL
https://www.toutiao.com/article/...

SKILL.md:813

Medium External URL
https://www.ip.cn/

references/ip-whitelist-guide.md:29

Medium External URL
https://ipinfo.io/

references/ip-whitelist-guide.md:30

Medium External URL
https://ifconfig.me/

references/ip-whitelist-guide.md:31

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
wechat-md-publisher ^1.0.2 npm (npx) No 通过 npx 动态拉取,版本允许次要版本更新,存在供应链风险

File composition

8 files · 2131 lines
Markdown 5 files · 1848 linesJavaScript 2 files · 177 linesJSON 1 files · 106 lines
Files of concern · 4
config.json JSON · 106 lines
SKILL.md Markdown · 864 lines
npx 动态拉取第三方 npm 包存在供应链风险 · 凭证加密处理依赖外部包 · 可选的远程主题端点可能外传数据 · https://mp.we... · https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html · https://mp.weixin.qq.com/s/abc · https://www.xiaohongshu.com/explore/xyz · https://www.toutiao.com/article/7000000000000000000/ · https://www.toutiao.com/article/...
README.md Markdown · 317 lines
https://mp.weixin.qq.com/ · https://www.toutiao.com/article/123 · https://api.md2wechat.cn · [email protected]
references/ip-whitelist-guide.md Markdown · 290 lines
https://www.ip.cn/ · https://ipinfo.io/ · https://ifconfig.me/ · https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Getting_Started_Guide.html · https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
Other files · themes.md · postinstall.js · run.js · quick-start.md

Security positives

SKILL.md 文档完整,声明了供应链风险并提供源码审计链接
权限声明与实际功能匹配(除间接 shell 执行外)
明确标注凭证敏感性(WECHAT_APP_SECRET 为 sensitive:true)
提供多层次安全提示和使用指引
凭证存储使用 AES-256 加密(依赖上游实现)
脚本代码简洁,无复杂或可疑逻辑