Back to skill

Security audit

Og Image Skill

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward image-generation helper, but users should handle the API token carefully and understand prompts are sent to an external service.

Install only from a source you trust, consider pinning the installer or package version, and avoid putting real API tokens directly on the command line. Treat any prompt or reference image UUID you provide as data sent to api.talesofai.com, so do not use confidential business text or sensitive imagery unless that service's terms and retention policy are acceptable to you.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
ogimage.js:10
Finding

API Token Exposed Through Command-Line Arguments

Content
View full analysis
"your prompt" --token YOUR_TOKEN ``` ```bash node ogimage.js "your description here" --token YOUR_TOKEN ``` `README.md:67`: ```bash node
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
SKILL.md:31
Finding

Unpinned Third-Party Package Execution in Installation Instructions

Content
View full analysis
Remediation
View remediation
add SherriHidalgolt/og-image-skill ``` 2. Where the tooling supports it, verify the package against an expected integrity hash or signed provenance. 3. Use a trusted and clearly identified package scope to reduce package-name ambiguity and takeover risk. 4. Document the expected package publisher and registry so users can verify what will execute. 5. Consider recommending a separately installed, version-locked installer instead of automatically downloading executable code on each invocation. 6. Review each installer update before changing the pinned version in the documentation. 7. Use lifecycle-script restrictions where compatible with the installer and deployment environment. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (13)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README promotes sending user prompts and optional reference image identifiers to a third-party image generation API but does not clearly warn that this data leaves the local environment. Users may unknowingly transmit sensitive prompts, identifiers, or business data to an external service, creating privacy, confidentiality, and compliance risks.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

The README instructs users to install and run a remote package via npx skills without pinning an exact version. This creates a supply-chain risk because users may receive a newer or compromised package than the one the author originally tested, and installation-time or runtime code could execute with the user's privileges.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill declares only a Bash tool and documents execution of a Node script that sends prompts and an API token to an external Neta service, but it does not declare any explicit tool scope, permissions, or allowed network destinations. This creates an unnecessary trust gap: an agent or reviewer cannot easily determine or constrain outbound network behavior, increasing the risk of unintended data exfiltration or broader-than-expected network access.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The trigger guidance says to use the skill whenever someone asks to generate or create OG images, which is broad and lacks tighter constraints around when the skill should activate. Over-broad activation can cause unintended execution of shell/network-enabled functionality, exposing prompts or secrets to an external API when the user may only be asking a general question or comparing options.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

The install instruction uses npx skills add SherriHidalgolt/og-image-skill without a pinned version or immutable reference. That means users may install changed content in the future, including malicious updates or a compromised package/repository state, undermining reproducibility and supply-chain integrity.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill accepts an authentication token and forwards it in an HTTP header to an external service without clear disclosure of where it is going. Combined with the provider mismatch, this creates a meaningful risk of credential exposure or misuse because users may believe they are authenticating to one vendor while the token is sent to another.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill claims to use the Neta API, but the code actually sends authentication material and user content to talesofai.com while presenting a different platform identity. This mismatch is dangerous because users may provide tokens and prompts under false assumptions about the recipient service, enabling credential misuse, undisclosed third-party data transfer, or deceptive routing of sensitive content.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

The hardcoded outbound domain indicates data is sent to talesofai.com rather than the advertised provider. In a skill context, this increases risk because it can conceal where user data and credentials are actually being transmitted, which is a material trust and privacy issue rather than a harmless implementation detail.

Content

Scanner excerpt · ogimage.js (reported line 71)May include surrounding context.

js
// --- Submit job ---
async function makeImage() {
  const res = await fetch("https://api.talesofai.com/v3/make_image", {
    method: "POST",
    headers: HEADERS,
    body: JSON.stringify(body),

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

The hardcoded outbound domain indicates data is sent to talesofai.com rather than the advertised provider. In a skill context, this increases risk because it can conceal where user data and credentials are actually being transmitted, which is a material trust and privacy issue rather than a harmless implementation detail.

Content

Scanner excerpt · ogimage.js (reported line 71)May include surrounding context.

js
// --- Submit job ---
async function makeImage() {
  const res = await fetch("https://api.talesofai.com/v3/make_image", {
    method: "POST",
    headers: HEADERS,
    body: JSON.stringify(body),

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The request sends user-supplied prompt text and optional reference identifiers to an external service without any user-facing disclosure in the skill itself. In this context, that is risky because prompts or reference UUIDs may contain sensitive or proprietary information, and the skill metadata already misstates the service being contacted.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The polling request transmits the auth header and task identifier to the same external service to retrieve job status. While status polling is expected behavior for asynchronous APIs, it still contributes to undisclosed third-party communication and credential use, which is more concerning because the service destination is inconsistent with the stated skill purpose.

Content

Scanner excerpt · ogimage.js (reported line 100)May include surrounding context.

js
for (let attempt = 0; attempt < maxAttempts; attempt++) {
    await new Promise((r) => setTimeout(r, 2000));

    const res = await fetch(`https://api.talesofai.com/v1/artifact/task/${taskUuid}`, {
      headers: HEADERS,
    });

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
75% confidence
Finding

The comment suggests a broader credential-resolution step, but the implementation strictly requires a user-supplied --token argument and exits otherwise. This is a mild intent/documentation mismatch because the documented section name implies token lookup or resolution behavior that is not actually present.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.