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 Why this conclusion was reached
3/4 dimensions flagged1 undeclared or violating capabilities were inferred.
1 high-risk artifacts or egress signals were extracted.
The report includes 5 attack-chain steps and 4 severe findings.
Dependencies are present but no obvious high-risk issue stands out.
Attack Chain
Entry · upload_to_github.py:7
reconnaissance · upload_to_github.py:7
Persistence · upload_to_github.py:15
Impact · upload_to_github.py:37
Impact · upload_to_github.py:66
What drove the risk score up
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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
Most important evidence
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 Declared capability vs actual capability
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 Suspicious artifacts and egress
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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
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| urllib.request | stdlib | Python standard library | No | No external dependencies — only stdlib used |
| json | stdlib | Python standard library | No | stdlib |
| base64 | stdlib | Python standard library | No | stdlib |
| os | stdlib | Python standard library | No | stdlib |
| time | stdlib | Python standard library | No | stdlib |
File composition
SKILL.md references/repo-structure.md references/publish-procedures.md README.en.md upload_to_github.py references/security-audit.md skill-card.md