T09 · Insecure Skill Coding Practices
- Location
src/git.js:18- Finding
Arbitrary Command Execution Through Unsanitized Git URL
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does what it claims, but it has unsafe handling of remote repositories and untrusted HTML that could let attacker-controlled input run code or make network requests.
Install only if you trust the projects and HTML files you will process. Avoid using the hidden `--git` option with untrusted repository URLs, avoid rendering untrusted README/HTML content, and run it in an isolated workspace without secrets or private network access until shell-safe git invocation, HTML sanitization, and restricted Playwright rendering are added.
src/git.js:18Arbitrary Command Execution Through Unsanitized Git URL
src/template.js:578Stored Script Injection Through Unsanitized Repository Content
暂无介绍,请点击上方按钮编辑添加...
src/image.js:3Untrusted HTML Is Executed in Playwright With Unrestricted Network Access
public/html2canvas.min.js:1Remote Browser Script Loaded at Runtime Without Integrity Enforcement
Referenced artifact was not completely inspected
path: "bin/cli.js"
Referenced artifact was not completely inspected
path: "bin/cli.js"
Referenced artifact was not completely inspected
path: "bin/cli.js"
The top-level description says the skill 'traverses project directories' and generates an intro page, which implies local project analysis. However, the documented directory structure later lists src/git.js as 'git 仓库克隆' (git repository cloning), introducing remote repository acquisition behavior not reflected in the stated local-directory workflow.
The README instructs users to provide an absolute local project path, then states the skill will scan the directory and generate editable HTML/PNG outputs, but it does not warn that sensitive source code, secrets in README files, dependency metadata, or private paths may be copied into generated artifacts. In an agent-skill context, this increases the risk of unintended local data exposure and filesystem writes because users may trigger broad scanning with minimal awareness of what content will be collected and rendered.
The trigger keyword "readme" is overly generic and can match many unrelated user requests, causing the skill to activate outside its intended scope. Because this skill scans local project directories and reads repository files, accidental invocation increases the risk of unintended local file analysis and disclosure of repository contents or metadata.
The skill documentation does not clearly warn users that providing a path will cause local directory scanning and repository file reads. In this context, that omission is security-relevant because users may supply sensitive paths without understanding that README files, dependency manifests, and project structure will be parsed and included in generated output.
The help text is presented entirely in Chinese, and the tool's default output filenames and messages also assume a Chinese locale. This creates a natural-language policy concern because the skill enforces a specific language/locale without any user opt-in or documented justification.
This code dynamically loads executable JavaScript from a third-party CDN at runtime, which introduces a supply-chain trust dependency outside the application's control. If the CDN, package, or delivery path is compromised, arbitrary code could execute in the application's origin; the lack of user-facing disclosure is secondary to the more important issue that remote script execution is being introduced without integrity pinning or local bundling.
The line states the rules include Chinese usage and later sections repeatedly require Chinese descriptions, which amounts to a language constraint in the skill instructions. Because the file does not offer a user language choice or document a justified region-specific requirement, this is a natural-language policy concern.
Several keywords such as "项目介绍", "介绍html", and "project intro" are ambiguous and overlap with general documentation or web-content tasks. In an agent environment, ambiguous triggers increase the risk of accidental invocation, which can cause the skill to act on requests better handled by other skills or by the base assistant.
The trigger keyword "readme" is extremely broad and commonly appears in unrelated software-development requests. This can cause the skill to activate outside its intended scope, leading to incorrect tool selection, unintended content generation, or interception of user workflows that were not asking for a project intro page.
This JavaScript file includes a default description string in Chinese (项目简介暂未提供,已基于代码结构自动生成。) with no apparent opt-in or locale selection. That can violate language/locale policy because the skill forces a specific language for user-facing text rather than adapting to user preference or documented regional scope.
The code interpolates a user-supplied gitUrl directly into an execSync shell command, which creates a command injection risk if the URL contains shell metacharacters. In addition, cloning arbitrary repositories can trigger unsafe behavior through git transport/options abuse and performs a network-side effect without any validation or confirmation, making the skill context more dangerous rather than less.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
return resolve(null);
}
const [owner, repo] = match.slice(1);
const apiUrl = `https://api.github.com/repos/${owner}/${repo}`;
const req = https.get(apiUrl, {
headers: {
This code loads either a remote HTTP(S) URL or a local file into a browser context and then writes a screenshot to the provided image path, but it includes no confirmation prompt, logging, or explanatory comment/docstring warning the user about these side effects. Because the function can access local content via file:// and persist output to disk, the safety-relevant behavior is not disclosed within this code file.
The skill may perform a network operation by cloning a remote repository when options.gitUrl is provided. In this file there is no confirmation prompt, user-facing log/message, or explanatory comment/docstring disclosing that remote content will be fetched.
The generated HTML hard-codes lang="zh-CN", which imposes a specific language/locale on all rendered output regardless of user preference or project context. This is a natural-language policy concern because the skill does not offer any language choice or document a justified region-specific constraint.
The natural-language instructions and usage guidance are presented only in Chinese, which effectively forces a specific language for users without indicating any language choice. Under the stated policy, language-specific behavior should either be optional or clearly justified as region-specific.
The manifest description is written as a Chinese-only user-facing capability statement, indicating the skill is oriented toward Chinese output without any mention of language choice or opt-in. Under the policy for natural-language violations, forcing a specific language or locale without user choice should be flagged unless clearly justified.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"author": "",
"license": "MIT",
"dependencies": {
"marked": "^11.2.0"
},
"optionalDependencies": {
"playwright": "^1.58.2"
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"marked": "^11.2.0"
},
"optionalDependencies": {
"playwright": "^1.58.2"
},
"engines": {
"node": ">=18.0.0"
Natural-language policy review applies to all file types, including manifest files. The visible display name and description are Chinese-only, which can impose a language/locale assumption on users without offering an alternative or documenting that the skill is intentionally region-specific.
The thrown error strings are written only in Chinese, which imposes a specific language on users with no opt-in or documented justification. The policy requires avoiding fixed language constraints unless the skill offers language choice or clearly documents a locale-specific purpose.
This code performs a network request to api.github.com using repository data derived from user input, but there is no confirmation prompt, user-visible log message, or explanatory comment/docstring disclosing that external network access occurs. For code files, outbound transmission of user or system data should have some visible disclosure unless clearly documented elsewhere.
Detected: suspicious.dangerous_exec