T08 · Insecure Dependencies
- Location
README.md:9- Finding
Unpinned Third-Party Package Executed During Installation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This image generator appears purpose-aligned, but it under-discloses external data sharing and handles the API token in a risky way.
Review this skill before installing. Only use it with prompts and reference IDs you are comfortable sending to the Neta/TalesOfAI service, avoid putting real tokens directly in shell commands on shared or logged systems, and prefer a pinned or ClawHub-managed install path.
README.md:9Unpinned Third-Party Package Executed During Installation
filmphotogenerator.js:11API Token Exposed Through Command-Line Arguments
The README clearly directs users to send free-form prompts and optional reference image identifiers to an external image-generation API, but it does not warn users that this data leaves the local environment and may be logged, retained, or processed by a third party. In this skill context, prompts and reference IDs may contain sensitive personal, proprietary, or identifying information, so the lack of a privacy/data-sharing notice increases the risk of inadvertent disclosure.
The README instructs users to run npx skills add without pinning a specific version, which allows whatever package/version is current at execution time to be fetched and run. If the upstream package, dependency chain, or registry entry is compromised, users could execute unexpected code during installation.
The skill declares only tools: Bash and does not explicitly scope or disclose network permissions, yet the documented usage sends prompts and an API token to the external Neta service. This creates a mismatch between apparent and actual capabilities, which can mislead users and reviewers about data egress and increase the chance of unintended external transmission.
The markdown instructs users to pass prompts and an API token to a third-party image generation service but does not provide an explicit warning that user data will be transmitted externally. This can lead users to unknowingly share sensitive prompts, images, or credentials with a third party, especially because the skill is framed as a simple generation utility.
The 'When to use' guidance says to use the skill when someone asks to 'generate or create ai film photo generator images,' which is ambiguous and not a clearly bounded trigger condition. It does not provide specific invocation examples, constraints, or negative examples to distinguish this skill from general image-generation requests.
Using npx skills add omactiengartelle/film-photo-generator without pinning a version allows the installed package or referenced content to change over time. This weakens supply-chain integrity and can expose users to malicious or compromised updates without any change to the invocation in the documentation.
The skill’s help text and branding direct users to obtain a token from Neta AI, but the implementation actually sends that token and user prompts to TalesOfAI endpoints. This mismatch is dangerous because it can mislead users into disclosing credentials to an unintended third party and defeats informed consent about where data is sent.
The hardcoded TalesOfAI domain indicates outbound network transmission to a third-party service. In isolation this is normal for API-backed tooling, but in this skill it becomes problematic because the service identity conflicts with the stated Neta AI branding, making the transmission deceptive from a user trust perspective.
};
}
const res = await fetch('https://api.talesofai.com/v3/make_image', {
method: 'POST',
headers: HEADERS,
body: JSON.stringify(body),
The hardcoded TalesOfAI domain indicates outbound network transmission to a third-party service. In isolation this is normal for API-backed tooling, but in this skill it becomes problematic because the service identity conflicts with the stated Neta AI branding, making the transmission deceptive from a user trust perspective.
};
}
const res = await fetch('https://api.talesofai.com/v3/make_image', {
method: 'POST',
headers: HEADERS,
body: JSON.stringify(body),
The manifest/description claim the skill uses the Neta AI image generation API, but the code posts data to TalesOfAI and polls a TalesOfAI task endpoint. This is a supply-chain trust and transparency issue: users and reviewers may approve the skill based on one vendor while their prompts and token are actually transmitted to another service.
The polling request continuously sends authenticated requests to the external TalesOfAI task endpoint until completion. While functionally necessary, it extends the external interaction surface and reinforces that sensitive workflow metadata is being shared with an undisclosed provider relative to the skill description.
const maxAttempts = 90;
for (let i = 0; i < maxAttempts; i++) {
await new Promise((r) => setTimeout(r, 2000));
const res = await fetch(`https://api.talesofai.com/v1/artifact/task/${taskUuid}`, {
headers: HEADERS,
});
if (!res.ok) continue;
No suspicious patterns detected.