T08 · Insecure Dependencies
- Location
SKILL.md:34- Finding
Unpinned Third-Party Installation Command Creates Supply-Chain Exposure
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This podcast-cover skill appears purpose-aligned, but it handles an API token in an exposed way and has enough disclosure and supply-chain weaknesses that users should review it before installing.
Install only if you are comfortable sending prompts, optional reference image IDs, and your image-service token to api.talesofai.com. Prefer a pinned release or ClawHub-managed install, avoid putting real tokens directly in shell commands or CI logs, and rotate the token if it may have been exposed in command history or process telemetry.
SKILL.md:34Unpinned Third-Party Installation Command Creates Supply-Chain Exposure
podcastcovergenerator.js:19API Token Exposed Through Command-Line Arguments
The documented purpose says the skill uses the Neta API for podcast cover generation, but the analyzed behavior reportedly uses a different service endpoint, supports broader image-generation modes, and includes undeclared reference-image features. This mismatch is dangerous because it prevents informed consent, can redirect user data or prompts to an unexpected third party, and may conceal materially different behavior than the user approved.
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.
The README explicitly instructs users to pass the API token on the command line, which commonly exposes secrets via shell history, terminal logging, CI logs, and process listings visible to other local users. Because the document says the script reads the token only from --token, it steers users toward the less safe handling pattern with no warning or safer alternative.
The skill declares Bash tooling but does not constrain tool scope with explicit permissions or allowed-tools, even though the documented behavior requires outbound network access for API calls. This creates unnecessary ambiguity about what the skill may do at runtime and weakens containment, increasing the risk of unintended or abusive network actions if the implementation changes or is swapped.
The phrase "Use when someone asks to generate or create podcast cover art generator images" is ambiguous and not constrained to specific trigger wording or context. It does not provide clear boundaries or negative examples, so it could match a wide range of ordinary requests and lead to unintended skill invocation.
The installation instruction uses npx skills add blammectrappora/podcast-cover-generator without pinning a specific version or immutable reference. That allows consumers to install whatever happens to be current at execution time, which can lead to supply-chain compromise if the package or referenced artifact is later modified maliciously.
The skill claims to use the Neta API but actually transmits user prompts and tokens to talesofai.com, which is a materially different endpoint than advertised. This mismatch undermines informed consent and can lead users to disclose API credentials or sensitive prompt content to an unexpected third party.
The manifest specifically advertises creation of 1400x1400 square podcast cover art for podcast directories. In code, the only square preset is 1024x1024, and there is no 1400x1400 option or resizing step, so the implemented behavior does not match the stated output capability.
This code transmits user content and an API token to an external service. External transmission is expected for a cloud image generator, but here it is more concerning because the skill description emphasizes a different provider, so users may not realize which service receives their data and credentials.
body.inherit_params = { collection_uuid: ref, picture_uuid: ref };
}
const res = await fetch(`https://api.talesofai.com/v3/make_image`, {
method: 'POST',
headers: {
'x-token': token,
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
async function pollTask(taskUuid, token) {
const maxAttempts = 90;
for (let i = 0; i < maxAttempts; i++) {
const res = await fetch(`https://api.talesofai.com/v1/artifact/task/${taskUuid}`, {
headers: {
'x-token': token,
'x-platform': 'nieta-app/web',
The script sends user-supplied prompts and an optional reference identifier to a remote API without clearly warning that this data leaves the local environment. In an image-generation skill, prompts may contain confidential creative concepts or personal data, so the lack of notice creates a privacy and data-handling risk.
No suspicious patterns detected.