T09 · Insecure Skill Coding Practices
- Location
SKILL.md:79- Finding
Plaintext SMTP Credential Storage in Agent-Readable Configuration
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a plausible X-to-Kindle helper, but it can email any readable local file and its setup guidance encourages unsafe plaintext email credential storage.
Review before installing. Use only with tightly controlled generated files, keep SMTP credentials in a proper secret store or environment mechanism, do not place app passwords in TOOLS.md or shared project files, and require explicit confirmation of the exact source path and recipient before sending anything to Kindle.
SKILL.md:79Plaintext SMTP Credential Storage in Agent-Readable Configuration
send_to_kindle.py:20Unrestricted Local File Read and Email Transmission
SKILL.md:19Unescaped Third-Party Content in Generated HTML Documents
{tweet_text}
{timestamp}
``` ``` ### Technical Analysis The documented template interpolates fields obtained from the third-party FxTwitter API directly into HTML text and attribute contexts. It does not require HTML escaping, sanitization, or URL-scheme validation. An attacker-controlled post could contain HTML metacharacters or markup that changes the resulting document structure. The `original_url` placeholder is used in an `href` attribute without validation, creating an additional risk of deceptive or unsafe links if a value outside the expected X/Twitter URL format reaches the template. The final effect depends on how the Kindle delivery pipeline or another downstream HTML renderer processes active markup. Even where scripts are disabled, injected formatting and links can still misrepresent the source content. ### Attack Path 1. An attacker publishes a post containing crafted text or metadata with HTML markup. 2. A user asks the Agent to convert the attacker's post. 3. The Agent retrieves the post through `api.fxtwitter.com`. 4. The returned author, title, text, timestamp, or URL fields are inserted into the documented template without context-appropriate encoding. 5. The generated HTML contains attacker-controlled elements, attributes, or links. 6. The document is emailed and processed or displayed by a downstream renderer. 7. The recipient may ...[truncated 685 chars]The documented behavior says the skill converts X posts to Kindle format, but the defined tool is a generic local file sender that can email arbitrary files. This mismatch is dangerous because it hides a broader data-exfiltration capability behind a narrow user-facing description, making misuse or unauthorized file transmission more likely.
The skill uses environment-based secrets and describes network/email operations, but it declares no explicit tool scope or permissions. This weakens reviewability and can allow the skill to access sensitive capabilities without clear limitation, increasing the chance of overbroad execution or secret exposure.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
https://api.fxtwitter.com/status/<tweet_id>
twitter.com/*/status/<id> or x.com/*/status/<id>Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
https://api.fxtwitter.com/status/<tweet_id>
twitter.com/*/status/<id> or x.com/*/status/<id>The skill instructs users to place an SMTP app password in TOOLS.md, a markdown documentation/config file that may be broadly readable, synced, or committed. Storing reusable email credentials this way creates a direct credential-compromise risk that could lead to unauthorized email sending or account abuse.
The documentation normalizes placing sensitive SMTP credentials into a markdown file without warning about handling or exposure risks. This encourages insecure operational practices and increases the likelihood of accidental disclosure through source control, logs, backups, or sharing.
The instructions direct storage of live email credentials in a plain-language shared config file, creating a straightforward secret leakage path. In this skill's context, those credentials can be used to send mail externally, so compromise enables spam, impersonation, or broader account abuse.
The package manifest description materially broadens the advertised capability from sending X/Twitter links to Kindle to also handling local files. In an agentic environment, this kind of scope expansion can cause the skill to be invoked on sensitive local content, increasing the risk of unintended file access and exfiltration beyond the user-expected domain.
The script accepts an arbitrary local file path from the command line and emails that file to the configured Kindle address without validating that the input is an X/Twitter URL, a generated article, or even a file produced by this skill. In the context of a skill advertised as handling X/Twitter posts, this creates a capability mismatch that can be abused to exfiltrate any readable local file accessible to the agent runtime, including secrets, tokens, configs, or user data.
The example mandates the confirmation text Sent to Kindle 📚, which is a fixed English response. The policy requires avoiding language or locale constraints unless the user is given a choice or the limitation is justified.
No suspicious patterns detected.