T08 · Insecure Dependencies
- Location
README.md:7- Finding
Unpinned Third-Party Dependency Installation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This appears to be an incomplete demo skill that encourages Google browser session reuse and can misleadingly report media generation success, so it should be reviewed before installation.
Install only if you are comfortable treating this as a demo scaffold, not a working media generator. Use a dedicated Google account if you implement the browser automation, avoid storing reusable Google session data unless it is protected and isolated, pin dependencies with a lockfile, and fix the shell command construction before running it from untrusted paths.
README.md:7Unpinned Third-Party Dependency Installation
scripts/generate_image.mjs:94Shell Command Injection Through Unquoted Project Path
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
1. **Quota ฟรีจำกัด**: Gemini ~100 รูป/วัน, Flow ~50 credits/วัน (อาจเปลี่ยนแปลง)
2. **ช้ากว่า API**: ต้องเปิด browser และรอ UI load (5-10x ช้ากว่า)
3. **เสี่ยง UI เปลี่ยน**: Google เปลี่ยนปุ่ม/ตำแหน่งบ่อย → อาจต้อง update skill
4. **Terms of Service**: Automation อาจขัดกับ ToS ของ Google free tier
## 📋 ขั้นตอนการทำงาน
Natural-language guidance throughout the file is presented only in Thai, including setup, troubleshooting, and usage instructions. Under the language/locale policy, forcing a specific language without user opt-in or documented justification is a policy concern.
The skill explicitly recommends persisting login cookies/session storage for reuse in browser automation, but does not mention secure storage, scope restriction, expiration, or the privacy/credential risks if those artifacts are stolen. In this context, session tokens may grant direct access to the user's Google account and associated services without requiring a password, making compromise of the automation host materially dangerous.
The module header and manifest context present this skill as an operational free AI image generator using browser automation. However, the actual generateWithGemini function is explicitly a skeleton/demo and only saves placeholder metadata to a .json file while printing demo instructions, so the behavior materially differs from the claimed functionality.
The file description and operational messages are written in Thai, and the CLI help/output throughout the script is primarily Thai-facing. This imposes a specific language on users without any opt-in or alternative locale selection, which matches the language/locale policy violation criteria.
The success message implies completion of image generation and points to the requested output image path. In reality, the code writes only outputPath.replace('.jpg', '.json'), so users are told an image was produced when it was not, which is a direct description-behavior mismatch.
The file description and subsequent CLI messages are written in Thai, and the script does not provide any option to select another language or indicate that it is intentionally limited to Thai-speaking users. This creates a language/locale policy issue because the skill imposes a specific language by default without user opt-in.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
console.error('❌ ไม่พบ Chrome/Chromium ในระบบ');
console.error('');
console.error('ติดตั้งด้วยคำสั่ง:');
console.error(' Ubuntu/Debian: sudo apt install chromium-browser');
console.error(' macOS: brew install --cask google-chrome');
return false;
}
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
console.error('❌ ไม่พบ Chrome/Chromium ในระบบ');
console.error('');
console.error('ติดตั้งด้วยคำสั่ง:');
console.error(' Ubuntu/Debian: sudo apt install chromium-browser');
console.error(' macOS: brew install --cask google-chrome');
return false;
}
The script advertises video generation and accepts an .mp4 output path, but in demo mode it only writes a JSON placeholder and never creates the promised video file. This can mislead downstream automation into treating the job as successful, causing integrity and workflow failures such as publishing missing assets or skipping error handling.
The completion message states success and prints the requested output path even though no video was generated there in demo mode. In an agent skill context, this is especially risky because other tools or users may rely on status text rather than artifact verification, leading to false success, broken pipelines, or accidental use of nonexistent media.
The code hard-codes the Thai locale and Bangkok timezone for date handling and uses Thai-only user-facing output throughout the script. This creates a natural-language/locale policy issue because the skill does not offer any user opt-in or configuration for language/locale selection, and no region-specific justification is provided in the file.
This markdown file provides commands that generate image files to a specified output path, and later also shows analogous video generation commands. The guide gives no user-facing warning that running these commands will create files on disk and may overwrite existing files depending on script behavior, which is a data-affecting action relevant to markdown warning requirements.
The manifest description forces a specific language for user-facing instructions, and the rest of the document is likewise Thai-centric. There is no opt-in, alternative language, or stated reason that the skill must be limited to Thai users.
The inline comment at L054 states that Thai input will be converted to English first. The actual logic only detects Thai text and logs that it will be used as-is because Gemini supports Thai, which directly contradicts the comment.