Undeclared Tool Scope
- Category
- MCP Least Privilege
- Confidence
- 70% confidence
- Finding
Without declared permissions the skill's intent is opaque and cannot be validated.
- Content
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a disclosed Qixin enterprise risk lookup client, with expected external API use and no hidden persistence, exfiltration, or destructive behavior found.
Install only if you intend to send company names or enterprise IDs to Qixin using your QXBENT_API_TOKEN. For important diligence decisions, prefer an exact enterprise ID and confirm that the returned ename is the company you meant to query. Review resolved npm dependency versions during install because the package does not include a lockfile.
Without declared permissions the skill's intent is opaque and cannot be validated.
All user-facing description and usage examples are written in Chinese, and the file does not indicate that language choice is optional or that the skill is intentionally restricted to a Chinese-speaking or China-specific user context. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation.
The example "这家公司是不是空壳公司?帮我查一下风险" uses a generic phrase like "帮我查一下风险" without clearly constraining the skill to enterprise risk-assessment contexts. In markdown skill descriptions, broad natural-language examples like this can contribute to unintended invocation because they resemble ordinary user requests rather than a narrowly scoped trigger.
The skill states that when an enterprise name cannot be precisely matched, it will automatically use the first search result. In a risk-assessment workflow, this can cause analysis and downstream decisions to be made on the wrong company, leading to severe integrity failures, misdirected due diligence, and possible disclosure of sensitive business intelligence about an unintended target.
The method sends the user-provided enterprise name to a remote service via POST, but this file contains no confirmation prompt, logging, or user-facing warning that the data will be transmitted externally. For code files, outbound network transmission of user or system data should have some visible disclosure unless clearly covered elsewhere.
This method posts a company identifier to an external endpoint, yet the file provides no confirmation, visible log, or warning that the identifier leaves the local environment. Under the code-file criteria, network calls carrying user data should include some form of disclosure unless already clearly documented.
This is a manifest file, so vague-trigger review applies. The description only states the skill's broad capabilities and domain, but provides no explicit trigger phrases, activation scope, or exclusion conditions, which can make invocation boundaries unclear in agent selection contexts.
Using a caret range for axios allows installs of newer matching releases without a fully reproducible dependency set. Because axios has a history of security advisories and this skill likely performs network requests for enterprise risk checks, an affected resolved version could expose the skill to issues such as SSRF, proxy bypass, or request/response manipulation depending on usage.
"author": "",
"license": "MIT",
"dependencies": {
"axios": "^1.6.0"
},
"devDependencies": {
"@types/node": "^20.0.0",
The manifest references axios with a non-exact version, so it is impossible to verify from package.json alone whether the installed release includes fixes for known axios advisories. In a skill that likely calls external services and processes potentially sensitive enterprise data, uncertainty around a historically vulnerable HTTP client raises meaningful supply-chain and network-security risk.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"axios": "^1.6.0"
},
"devDependencies": {
"@types/node": "^20.0.0",
"ts-node": "^10.9.0",
"typescript": "^5.0.0"
}
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"devDependencies": {
"@types/node": "^20.0.0",
"ts-node": "^10.9.0",
"typescript": "^5.0.0"
}
}
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"devDependencies": {
"@types/node": "^20.0.0",
"ts-node": "^10.9.0",
"typescript": "^5.0.0"
}
}
The class documentation and user-facing error text are written only in Chinese, and the file does not indicate that language is configurable or user-selected. This can violate language/locale policy when a skill implicitly forces a specific language without opt-in.
The thrown error message is a natural-language string presented only in Chinese, with no evidence of locale negotiation or user preference handling. Policy guidance says to flag language forcing unless the locale constraint is explicitly justified or optional.