T09 · Insecure Skill Coding Practices
- Location
src/client.ts:7- Finding
Authenticated API Requests Can Be Redirected to an Arbitrary Server
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches its GitVerse purpose, but it can attach your GitVerse token to an undocumented custom API endpoint, creating a meaningful credential-exposure risk.
Review carefully before installing. Use a narrowly scoped, revocable GitVerse token, avoid running the CLI from directories with untrusted .env files, and do not set GITVERSE_BASE_URL unless you intentionally trust that endpoint. Confirm repository, branch, and title before allowing the skill to create a pull request.
src/client.ts:7Authenticated API Requests Can Be Redirected to an Arbitrary Server
Based on the supplied code chunk, the implementation only performs dotenv configuration import, a generic setup action for loading environment variables. There is no visible logic for connecting to gitverse.ru, making API requests, handling repositories, issues, or pull requests. Because the declared description claims a GitVerse integration as the skill's purpose, but the actual provided code does not substantiate that behavior and instead only shows unrelated initialization scaffolding, this is a mismatch.
The pulls merge command is presented with no cautionary text, even though merging a pull request changes repository history/state and may be difficult to undo. For markdown skill documentation, this kind of behavior should be clearly warned about because it can materially affect user data and repository integrity.
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.
Use this skill when you need to:
- List or view repositories
- List or view issues
- List, view, or create pull requests
- View repository information
## Installation via OpenClaw
This markdown file documents a state-changing operation (pulls create) that affects a remote repository, but it does not include any warning or caution about creating a new pull request on the user's behalf. Under the markdown-specific warning criteria, actions that can affect user data or system integrity should be disclosed clearly.
The skill declares executable behavior involving environment variables and network access but does not define any explicit tool scope such as permissions or allowed-tools. In an agent setting, this weakens least-privilege controls and can allow broader-than-expected access to credentials and outbound requests if the runtime honors skill metadata for safety decisions.
The activation text includes a broad catch-all scope like 'any other GitVerse operations,' which can cause an agent to invoke the skill for unbounded actions beyond those specifically described. In agent ecosystems, overly broad routing language increases the chance of unintended high-impact operations being selected without clear user intent.
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.
Use this skill when you need to:
- List or view repositories
- List or view issues
- List, view, or create pull requests
- View repository information
## Installation
The skill tells users to place an access token in an environment variable or .env file but provides no guidance on secure storage, file permissions, redaction, or avoiding accidental commits. This increases the risk of credential exposure, especially because .env files are commonly leaked through logs, shell history, or repository inclusion.
The documentation instructs creation of pull requests, which changes remote repository state, but does not warn that this is a write operation requiring explicit user approval. In an agent context, omission of that warning can lead to unintended code publication, workflow triggers, or repository modifications under the user's credentials.
The usage section shows only Russian prompt examples and frames invocation as "When you ask me to work with GitVerse" using Russian utterances, with no indication that other languages are supported or that Russian is an intentional, justified restriction. This can be read as imposing a locale expectation without user opt-in.
The document instructs users to export GITVERSE_TOKEN but does not warn that this is a sensitive credential that should be protected from shell history, logs, and accidental sharing. Markdown skill descriptions should disclose privacy- or security-relevant handling when user credentials are involved.
The markdown documents issues close as a command to close an issue, but provides no warning that it changes remote repository state. Under the markdown-specific warning rule, actions that can affect user data or system integrity should disclose their impact so users are not surprised by state-changing operations.
The natural-language invocation examples are presented only in Russian (e.g. "Покажи мои репозитории", "Создай PR в saic/chatbot") and imply that the skill is triggered through that language alone. There is no accompanying note that other languages are supported or that Russian is merely an example, which creates a locale/language policy concern.
The dependency uses a caret range, which allows future minor and patch versions to be installed. This can introduce supply-chain risk because a newly published compromised or breaking upstream release could be pulled into builds without explicit review, especially for a skill that interfaces with external APIs and may handle tokens or repository metadata.
"author": "AI Center",
"license": "MIT",
"dependencies": {
"@onreza/gitverse-sdk": "^1.0.4",
"commander": "^12.1.0",
"dotenv": "^16.6.1"
},
The commander package is referenced with a caret version, so installations may resolve to newer releases than the author tested. While common in Node projects, this still creates a supply-chain exposure window where an upstream compromised release or unexpected behavior change could affect CLI parsing or execution paths.
"license": "MIT",
"dependencies": {
"@onreza/gitverse-sdk": "^1.0.4",
"commander": "^12.1.0",
"dotenv": "^16.6.1"
},
"devDependencies": {
The dotenv dependency is not pinned to an exact version, allowing dependency drift across environments. In a skill likely to consume API credentials from environment files, any compromised or faulty upstream update could affect secret loading behavior or execution reliability.
"dependencies": {
"@onreza/gitverse-sdk": "^1.0.4",
"commander": "^12.1.0",
"dotenv": "^16.6.1"
},
"devDependencies": {
"@types/node": "^20.19.37",
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"dotenv": "^16.6.1"
},
"devDependencies": {
"@types/node": "^20.19.37",
"typescript": "^5.9.3"
}
}
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"devDependencies": {
"@types/node": "^20.19.37",
"typescript": "^5.9.3"
}
}
This code file defines a create command that will create a pull request via pulls.createPull, which is a remote write operation against a repository service. In this file there is no visible confirmation prompt, warning text, or user-facing disclosure that the command changes remote state, unlike the read-only list/view commands around it.