T04 · Embedded Malicious Code
- Location
scripts/twitter-thread.sh:73- Finding
Source-Independent Hard-Coded Promotional Output in All Content Generators
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill should be reviewed carefully because it claims to repurpose user content but its generators save fixed promotional sample text instead of using the supplied material.
Do not rely on this skill for automated or public publishing without manual review. It currently appears to save canned sample posts rather than transforming your content, and URL mode should only be used with trusted public URLs because the fetch logic is broad.
scripts/twitter-thread.sh:73Source-Independent Hard-Coded Promotional Output in All Content Generators
scripts/repurpose.sh:59Unrestricted URL Fetching Enables Blind Server-Side Request Forgery
The description presents a broad content-repurposing skill that takes one source and generates ready-to-publish content across several platforms while maintaining voice consistency and allowing platform/tone configuration. The actual code chunk only covers one script, instagram-caption.sh, whose behavior is limited to Instagram captions. It reads source content and config values, builds an Instagram-only prompt, and finally echoes a static mock caption rather than performing real generation. While reading voice and platform configuration is consistent with part of the description, the implemented behavior in this code chunk is materially narrower and does not substantiate the declared multi-channel functionality. Therefore this is a mismatch.
The declared description presents a general content-repurposing skill that takes one source and produces ready-to-publish content across several platforms. This code chunk, however, is narrowly scoped to a single script for LinkedIn post generation. It reads content and config consistent with repurposing, but its implemented behavior is limited to building a LinkedIn-specific prompt and then echoing a fixed mock response. That is a material mismatch in primary behavior and supported capabilities relative to the broad declared description. There is no evidence of undeclared sensitive access or unrelated triggers, but the implemented functionality shown is substantially narrower and partly nonfunctional compared with the declaration.
The description presents a broad multi-channel content repurposing capability that generates ready-to-publish outputs for several platforms. The actual code chunk is narrowly scoped to a single script, newsletter.sh, whose behavior is limited to newsletter generation. It reads content, loads voice/platform config, builds a newsletter-specific prompt, and then emits a static mock response rather than dynamically generating platform-adapted content. While the newsletter aspect is consistent with part of the description, the primary behavior shown in this code does not match the declared end-to-end multi-platform repurposing functionality.
The declared description presents a broad multi-channel content repurposing skill that adapts one source into several ready-to-publish formats across multiple platforms. The actual code chunk is much narrower: it is a single shell script dedicated to creating one Meta Threads post. It reads content and config, builds a Threads-specific prompt, and then echoes a mock response instead of performing real generation. While this script is related to content repurposing, its primary behavior is materially narrower than the declared purpose, so the description does not accurately represent what this code chunk actually does.
The declared description presents a multi-channel content repurposing skill that adapts one source item into several platform-specific outputs. The supplied code chunk implements only a single script for Twitter thread generation. It loads voice/platform configuration for Twitter, builds a Twitter-specific prompt, and then echoes a fixed mock response. There is no evidence in this chunk of generating content for LinkedIn, newsletters, Instagram, or handling platform priorities/output formats across channels. While reading config and source content is consistent with the declared domain, the actual implemented behavior in this chunk is materially narrower and partly simulated, so the description overstates the capability.
The script advertises transforming supplied source content into a newsletter section, but its actual behavior ignores the provided content and always emits a canned response. This is dangerous because it breaks integrity and trust: automated publishing workflows may distribute irrelevant or misleading content while operators believe user input was processed. In a content repurposing skill, that mismatch is especially risky because the entire purpose of the tool is faithful transformation of source material.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
echo "Options:"
echo " --platforms <p1,p2> Repurpose for specific platforms (e.g., twitter,linkedin)"
echo " --output-dir <path> Override output directory"
echo " --dry-run Print prompts instead of executing them"
echo " --help Show this help message"
}
The skill advertises and instructs use of shell scripts (setup.sh, repurpose.sh, platform-specific scripts) but does not declare any tool scope such as permissions or allowed-tools. In an agent environment, undeclared shell capability weakens least-privilege guarantees and can let the skill execute filesystem or network-affecting commands without explicit user-visible scoping.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
emoji: "♻️"
---
# Content Repurposer — Create Once, Publish Everywhere
**Stop reformatting. Start publishing.**
The script loads user configuration fields and later embeds both user data and source content into an LLM prompt, but there is no confirmation prompt, warning comment, or user-facing notice that this information will be sent to an LLM tool. For a code file, transmitting user or system data to an LLM is safety-relevant and should be disclosed unless clearly warned elsewhere in the skill description, which is not present in this file.
The script claims it will use an LLM tool and only temporarily mocks output, but in reality it always emits a hard-coded LinkedIn post regardless of the input content or configuration. In an agent skill, this is dangerous because it creates deceptive behavior: downstream users or orchestrators may believe sensitive source content is being processed as requested when it is silently ignored, leading to integrity failures, misleading automation, and possible accidental publication of irrelevant or incorrect content.
The script embeds source content and user/profile configuration directly into an LLM prompt without any visible disclosure or consent mechanism. If this were connected to an external model or logging pipeline, sensitive content, identity details, branding, and CTA information could be transmitted or retained unexpectedly. The skill context increases the concern because it is designed to ingest potentially unpublished long-form content that may be proprietary.
The script explicitly claims it uses a built-in LLM tool, but instead returns a fixed mock response. This is a deceptive implementation flaw: users may rely on the output as if it were derived from their supplied content, when in fact the input is ignored. In an agent skill context, that can mislead downstream automation, cause inaccurate publishing, and hide the real data flow and trust boundaries.
The manifest frames the skill as transforming an existing input into platform-specific snippets. This script expands scope by directly downloading content from arbitrary HTTP(S) URLs via clawdbot web_fetch or curl, which is a separate content-retrieval capability not stated in the description.
Fetched URL content is passed to external tools such as clawdbot web_fetch or the curl/html2text pipeline without any explicit privacy notice or trust boundary warning. If the source URL contains sensitive or private content, users may not realize that the content is being processed by additional tooling, potentially including network-connected components.
The full source content is piped into platform-specific subprocess scripts, which likely invoke downstream generation systems, without a clear user warning that the entire input will be transmitted for processing. In a content-repurposing skill, users may paste drafts, transcripts, or notes that contain unpublished or sensitive information, making silent full-content forwarding a meaningful privacy risk.
Although the script reads content and configuration, it never uses them in the final output and always emits the same canned post. In the context of a content-repurposing skill, this undermines integrity and trust: users may publish irrelevant or misleading content, and automated workflows may assume sensitive source material was transformed when it was actually ignored.
The script explicitly claims it will use a built-in LLM tool, but instead returns a fixed hardcoded response regardless of input. This is a deceptive implementation that can mislead users, downstream automation, or security reviewers into believing content is dynamically generated from provided source material and configuration when it is not.
The file header and manifest context indicate this skill transforms supplied long-form content into platform-optimized output, and the script reads content and builds a prompt accordingly. However, the final behavior does not use that prompt or the input content at all; it always prints the same static thread, so the implemented behavior does not match the described repurposing function.
The script builds an LLM prompt from full source content plus user profile, brand, and CTA data without any notice, consent, minimization, or trust boundary controls. In a content-repurposing skill, this can expose unpublished drafts, proprietary material, or personal/business profile data to an external model provider or logging pipeline, making confidentiality leakage a realistic risk.
The inline documentation says the script uses a built-in LLM tool and would generate output from the constructed prompt, but the implemented behavior never invokes an LLM and instead emits a fixed mock response. This is an active contradiction between the code comments and the code's actual effect, not merely missing implementation detail.
The skill explicitly supports URL input, which implies fetching remote content, but it does not warn users that doing so may disclose IP/request metadata, contact untrusted hosts, or send content to external services. In agent workflows, hidden remote fetch behavior can create privacy, SSRF, and data-handling risks, especially if users supply internal or sensitive URLs.
The comments say the script uses the built-in LLM tool and is currently just creating a mock response, implying a harmless demonstration path. However, the code above these comments fully reads source content and personal/configuration data and interpolates them into a prompt string, so the implementation is not merely a self-contained mock example.
The script reads user-related configuration data such as voice, platform, user, and LLM settings without any visible notice to the user at runtime. While local config access is common, silently consuming identity and brand metadata can create privacy and transparency issues, especially if users do not expect those fields to influence generated output or be forwarded elsewhere. Here the impact is limited because the script only reads local configuration, but it contributes to unclear data handling.
The script creates an output directory and later writes generated content files, and may additionally copy one result to the clipboard. These behaviors affect user data handling, but the help text does not explicitly warn that outputs will be persisted on disk and potentially copied to the clipboard.
No suspicious patterns detected.