skill-publisher
SKILL.md metadata and documentation directly contradict the actual implementation: metadata declares `requires_api_key: false` while `upload_to_github.py` contains a hardcoded GitHub Personal Access Token, and the SKILL.md only describes `clawhub` CLI / `gh` CLI / `git push` workflows — never mentioning the Python script that performs undeclared HTTP network access.
A real GitHub PAT (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) is hardcoded in plaintext at upload_to_github.py:7. Any agent with filesystem:READ access to the skill directory can extract this token and use it to authenticate as the token owner on GitHub, enabling repository creation, file uploads, releases, and code manipulation under the owner's account.
upload_to_github.py:7 为什么得出这个结论
3/4 个维度触发发现 1 项声明之外的能力或越权行为。
提取到 1 个高危 IOC 或外联信号。
报告包含 5 步攻击链,另有 4 项高危或严重发现。
依赖结构存在,但暂未看到明显高危告警。
攻击链
初始入口 · upload_to_github.py:7
reconnaissance · upload_to_github.py:7
持久化 · upload_to_github.py:15
最终危害 · upload_to_github.py:37
最终危害 · upload_to_github.py:66
风险分是怎么被拉高的
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 hardcoded at upload_to_github.py:7; token can be harvested by any agent with filesystem:READ access to the skill directory
SKILL.md frontmatter declares requires_api_key: false but upload_to_github.py contains a real PAT; SKILL.md only documents CLI-based workflows (clawhub/gh CLI/git push), never mentions the Python script
upload_to_github.py makes direct HTTPS API calls to github.com — this capability is not declared anywhere in SKILL.md
BASE_DIR = r'd:\TRAE SOLO CN\project\skill-publisher' at line 9 exposes the author's Windows username and absolute project path; violates SKILL.md Layer 2 local-path scan rules
最关键的证据
Hardcoded GitHub Personal Access Token
A real GitHub PAT (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) is hardcoded in plaintext at upload_to_github.py:7. Any agent with filesystem:READ access to the skill directory can extract this token and use it to authenticate as the token owner on GitHub, enabling repository creation, file uploads, releases, and code manipulation under the owner's account.
upload_to_github.py:7 SKILL.md metadata declares no API key needed; code contains a real PAT
SKILL.md frontmatter has metadata.requires_api_key: false, yet upload_to_github.py embeds a live GitHub PAT. The SKILL.md also only documents CLI-based publishing workflows (clawhub CLI, gh CLI, git push, gh api) — it never mentions the Python script. This creates a false impression of the skill's actual capabilities and security posture.
SKILL.md:3 Hardcoded Windows absolute path exposing author identity
BASE_DIR = r'd:\TRAE SOLO CN\project\skill-publisher' at upload_to_github.py:9 encodes the author's Windows username ('TRAE SOLO CN') and absolute project path. This violates SKILL.md Layer 2 local-path scan rules and leaks the author's machine identity.
upload_to_github.py:9 Undeclared Python script bypasses documented CLI-only workflows
upload_to_github.py implements direct GitHub REST API file uploads using urllib.request and base64 encoding. SKILL.md Phase 3 Step 10 documents a push fallback chain: git push → gh CLI → REST API (as a last resort), but never describes the Python script or its file-reading/uploading behavior. The script is present in the skill root alongside SKILL.md, implying it may be intended for use by agents operating in this skill directory.
upload_to_github.py:1 No dependency pinning in publish script
upload_to_github.py uses only standard library modules (urllib.request, json, base64, os, time) — no external dependencies to pin. However, the skill has no requirements.txt or package.json, making it unclear what pip/npm packages the skill itself depends on at runtime.
upload_to_github.py:1 声明能力 vs 实际能力
upload_to_github.py:66 reads local files via read_local_file() upload_to_github.py:15-31 makes authenticated HTTPS requests to api.github.com; SKILL.md only documents CLI tools No env iteration observed SKILL.md defines triggers and workflow steps 可疑产物与外联
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 upload_to_github.py:7
https://img.shields.io/github/stars/EdwardWason/skill-publisher?style=flat-square README.en.md:5
https://img.shields.io/badge/license-MIT--0-green?style=flat-square README.en.md:6
https://img.shields.io/badge/ClawHub-skill--publisher-orange?style=flat-square README.en.md:7
https://clawhub.ai/skills/skill-publisher README.en.md:7
https://img.shields.io/badge/Claude%20Code-Skill-blue?style=flat-square README.en.md:8
https://img.shields.io/github/stars/ references/repo-structure.md:64
https://img.shields.io/badge/ClawHub- references/repo-structure.md:66
https://clawhub.ai/skills/ references/repo-structure.md:66
https://evil.com/collect?data=... references/security-audit.md:50
https://clawhub.ai/user/edwardwason skill-card.md:7
https://clawhub.ai/edwardwason/skill-publisher-ai skill-card.md:27
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| urllib.request | stdlib | Python standard library | 否 | No external dependencies — only stdlib used |
| json | stdlib | Python standard library | 否 | stdlib |
| base64 | stdlib | Python standard library | 否 | stdlib |
| os | stdlib | Python standard library | 否 | stdlib |
| time | stdlib | Python standard library | 否 | stdlib |
文件构成
SKILL.md references/repo-structure.md references/publish-procedures.md README.en.md upload_to_github.py references/security-audit.md skill-card.md