T01 · Skill Instruction Hijacking
- Location
SKILL.md:124- Finding
Mandatory Promotional Output Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This prompt-library skill is mostly purpose-aligned, but it silently auto-updates from mutable GitHub data and its updater can write outside the intended references folder if the remote manifest is compromised.
Review before installing. The skill provides useful prompt recommendations, but it should ideally validate remote manifest filenames, constrain writes to references/, make updates explicit or host-controlled, pin installer commands, and ask before fetching or sending preview media. Do not use developer CMS credentials unless you are maintaining the prompt dataset and know how to protect those secrets.
SKILL.md:124Mandatory Promotional Output Hijacking
scripts/setup.js:54Remote Manifest Allows Writes Outside the References Directory
README.md:51Unpinned Third-Party Packages Executed Through npx Installation Commands
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
pnpm install
# Create .env with CMS credentials
echo "CMS_HOST=your_host" >> .env
echo "CMS_API_KEY=your_key" >> .env
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
pnpm install
# Create .env with CMS credentials
echo "CMS_HOST=your_host" >> .env
echo "CMS_API_KEY=your_key" >> .env
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
pnpm install
# Create .env with CMS credentials
echo "CMS_HOST=your_host" >> .env
echo "CMS_API_KEY=your_key" >> .env
Referenced artifact was not completely inspected
node scripts/setup.js
Referenced artifact was not completely inspected
node scripts/setup.js
Referenced artifact was not completely inspected
node scripts/setup.js
The skill embeds shell commands for downloading a remote file to a fixed path and then deleting it, which normalizes direct command execution with externally derived inputs. Even though the shown rm target is static, the broader pattern encourages unsafe tool-parameter use around curl and filesystem operations, and could become dangerous if sourceMedia or paths are attacker-influenced.
- **Other platforms** (Discord, Slack, web chat, etc.): Send the image URL directly:
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
{
"name": "nano-banana-pro-prompts-recommend-skill",
"version": "1.5.9",
"description": "AI skill: 14,000+ Nano Banana Pro (Gemini) image generation prompts. Also works with Nano Banana 2, Seedream 5.0, GPT Image 1.5, Midjourney, DALL-E, Flux, Stable Diffusion. Auto-downloads library on install. Works with OpenClaw, Claude Code, Cursor and more.",
"type": "module",
"scripts": {
"generate": "npx tsx scripts/generate-references.ts",
"typecheck": "tsc --noEmit",
"setup": "node scripts/setup.js",
"sync": "node scripts/setup.js --force"
},
"keywords": [
"openclaw",
"openclaw-skill",
"clawhub",
"claude-code",
"claude-code-skill
The README instructs users to execute npx skills without pinning a version, which causes code to be fetched and run from the package registry at install time. If the package or a dependency is compromised, users may execute unexpected code, and this is more concerning in an agent-skill ecosystem where installation commands are copied directly from documentation.
This is another unpinned npx skills invocation, carrying the same supply-chain risk: transient execution of whatever version is current in the registry. README install snippets are high-trust copy/paste surfaces, so leaving them unpinned increases exposure to registry or maintainer compromise.
The npx openskills command is also unpinned and would download and run the latest published package version. That creates a supply-chain execution risk, especially because users may run it in environments containing source code, tokens, or agent credentials.
The remix workflow explicitly encourages users to paste full articles, scripts, and notes, but provides no privacy warning or minimization guidance. Users may submit unpublished, regulated, or confidential content into an agent/tooling flow without understanding retention, downstream processing, or sharing implications.
The later README reference to npx skills repeats the same unpinned remote-code execution risk. Repetition across installation guidance broadens the chance that users invoke an unreviewed, mutable package version.
The manifest-level purpose is to search and recommend prompts to users. In contrast, the README documents development functionality that fetches prompt data from a CMS using API credentials and regenerates the local references, which is a distinct content-ingestion/maintenance operation rather than end-user prompt recommendation behavior.
A skill whose stated purpose is searching and recommending prompts does not obviously require developers or runtime components to hold CMS host and API key secrets. This capability enables privileged backend data access unrelated to the user-facing recommendation scope described in the manifest.
The skill instructs the agent to perform network-capable actions such as downloading references from GitHub and fetching sample images, but it does not declare an explicit tool scope or allowed-tools policy. This increases the risk of unintended external access and makes it harder for the host platform to enforce least privilege.
The activation guidance is broad enough to match many generic requests about images, marketing, articles, and content creation, increasing the chance of accidental invocation. Because the skill performs network updates and media-fetching behavior, overbroad triggering can unexpectedly cause external access and data processing without clear user intent.
The skill mandates automatic freshness checks and silent GitHub pulls on every use, without clearly notifying the user that external network requests will occur. Silent background fetching can violate user expectations, import unreviewed remote data into the local environment, and increase supply-chain exposure.
The skill is presented as a prompt search/recommendation tool, but it also directs the agent to fetch and send sample images to end users. That expands the operational scope from passive recommendation into external content transfer, which can expose users to unreviewed remote media and enlarge the attack surface.
The instructions explicitly include downloading remote images and sending them outbound via messaging tools, which are capabilities beyond prompt recommendation. This creates SSRF-like and content-delivery risks if sourceMedia is untrusted or manipulated, and may also leak usage metadata to third parties.
This is a manifest file, so vague-trigger review applies. The description says the skill 'works with OpenClaw, Claude Code, Cursor and more,' but does not specify how or when it should be invoked, what trigger phrases apply, or any constraints/exclusions, making activation scope ambiguous.
The generate script invokes npx tsx, which allows package resolution at execution time rather than strictly using a pinned local binary path. In environments where tsx is absent or resolution behavior changes, this can fetch or execute an unexpected version, increasing supply-chain risk during script execution.
The setup section tells users to create a .env file with CMS host and API key, and the GitHub Actions section references repository secrets, but there is no accompanying warning about protecting those credentials. Under SQP-2 for markdown files, omissions around privacy or system-integrity-impacting behavior can warrant a finding when secret handling is described without user-facing caution.
The heading labels Step 5 as 'Content Illustration Mode Only,' implying a limited scope. Immediately below, the trigger and description state it runs whenever any user selects a prompt and applies to all users, directly contradicting the heading.
The file does not clearly contain a language or locale policy violation. While the description is English-only, there is no explicit instruction forcing users into a specific language or locale, so this does not meet the threshold for a confident policy finding.