T08 · Insecure Dependencies
- Location
scripts/requirements.txt:1- Finding
Unnecessary and Unsafe Third-Party Dependency Installation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly a disclosed Chinese learning assistant, but it ships under-documented launchers that execute an absent Node.js target and includes optional install/deployment paths with avoidable supply-chain and privacy risks.
Review before installing. The teaching prompt itself is limited and coherent, but avoid running the clawhub launcher files unless the missing Node.js implementation and dependency chain are supplied and reviewed. Use a virtual environment for any pip install, remove unnecessary dependencies if possible, avoid Docker latest tags for production use, and do not send confidential documents or selected browser text to a remote challenge API without approval.
scripts/requirements.txt:1Unnecessary and Unsafe Third-Party Dependency Installation
clawhub:12Launchers Execute an Unpackaged and Unverified JavaScript Target
Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.
The README instructs users to upload documents and includes examples that send selected content to a remote API, but it does not warn that potentially sensitive material may leave the local environment. In a skill centered on analyzing arbitrary user-provided documents, this omission increases the risk of accidental disclosure of proprietary, personal, or regulated data.
The browser bookmarklet example takes user-selected page text and POSTs it to a remote endpoint, which is an external data transmission path. In context, the selected text could include confidential business information, personal data, or copyrighted material, and the README gives no consent prompt, origin validation, or data-minimization guidance.
javascript:(function(){
const text = window.getSelection().toString();
if(text.length > 100) {
fetch('https://your-api/challenge', {
method: 'POST',
body: JSON.stringify({content: text})
})
The skill examples are entirely in Chinese and do not offer any language selection or fallback, which can exclude or confuse users who do not read Chinese. This is not a traditional security exploit, but it is a genuine safety/quality issue because users may misunderstand the skill’s behavior or be unable to provide informed input.
The skill hard-codes Chinese-language behavior and style across the entire prompt without asking for the user's preferred language or providing a fallback. This can exclude or confuse users, cause unsafe misunderstanding of instructions or quiz content, and reduce accessibility, but it is not inherently a code-execution or data-exfiltration threat.
The reset method replaces all tracked data with a fresh default structure and immediately writes it to disk, which irreversibly deletes prior history. There is no confirmation prompt in the reset flow and no user-facing warning near the destructive operation itself.
The function docstrings and generated output labels are hard-coded in Chinese, including the title prefix "要点". This imposes a specific language/locale in the skill's natural-language behavior without offering user opt-in or documenting that the tool is intentionally Chinese-only.
The skill metadata, description, and usage flow are written in Chinese and strongly frame the interaction in that locale without any indication of adapting to the user's preferred language. While not a classic security flaw, this can create consent and usability problems by causing the system to respond in an unexpected language or interaction style, which may confuse users and increase the chance of unintended actions.
The trigger list contains very generic phrases such as “提取”, “重点”, “精华”, and “来一道”, which are likely to appear in ordinary educational or conversational contexts. This can cause accidental invocation or routing collisions with unrelated user requests, leading to unexpected behavior and reducing user control over when the skill activates.
The activation phrases, workflow prompts, and all user-facing instructions are presented only in Chinese, which effectively constrains use to a specific language. Because the file does not offer user opt-in, alternatives, or a documented justification for the locale restriction, it may violate language/locale policy expectations.
This .cmd file ultimately executes a Node.js entrypoint with user-supplied arguments via %*, which is a code-execution operation in a code file. There is no visible confirmation prompt, user-facing log/print, or explanatory comment/docstring in this file disclosing that behavior.
The unlock command records a timestamped history entry containing the topic string, which is user-provided data, but there is no explicit notice that this information is being stored. In addition, the save occurs before the history append, suggesting the recorded entry may not be written to disk during this operation.
The skill inserts the fixed Chinese phrase "解锁:" into history entries without offering a language choice or documenting a locale-specific purpose. This can create a natural-language policy issue if skills are expected to remain language-neutral unless users opt in.
The natural-language instructions in docstrings and generated strings are exclusively in Chinese, and the script emits Chinese quiz content and explanations by default. This creates a locale/language constraint without offering the user a choice or documenting that the skill is intentionally region-specific.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
arxiv==2.1.0
datetime
No suspicious patterns detected.