Back to skill

Security audit

Daily News Digest

Security checks for vulnerabilities and agentic risk

Overview

This news skill is mostly purpose-aligned, but it stores user profiles and can set up automated third-party delivery without enough privacy and content-safety boundaries.

Review before installing if you are comfortable with a local news profile being kept under ~/daily-news-digest/ and with scheduled briefings being sent through external channels. Prefer disabling automation and voice until you have confirmed the timezone, delivery channel, archive behavior, and deletion expectations; HTTPS-only sources and explicit untrusted-content handling would materially improve this skill.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
sources.md:69
Finding
Plaintext HTTP Used for RSS Feed Retrieval## Vulnerability Details **File Location**: `sources.md:69` **Vulnerability Type**: Unencrypted external content retrieval **Risk Level**: Medium ### Vulnerable Code ```text BBC World: http://feeds.bbci.co.uk/news/world/rss.xml ``` ### Technical Analysis The configured BBC World RSS feed uses plaintext HTTP rather than HTTPS. HTTP provides neither transport confidentiality nor server authenticity, and it does not protect content integrity. An attacker able to intercept or modify network traffic—such as a malicious wireless access point, compromised proxy, or on-path network operator—could replace RSS headlines, summaries, or article links. Because the retrieved feed is subsequently treated as news content, tampered data could be incorporated into briefings or cause the agent to follow attacker-selected links. This issue does not directly grant additional operating-system privileges. Its security significance is the ability to manipulate externally retrieved data consumed by the agent. ### Attack Path 1. The skill requests the configured BBC World RSS feed over HTTP. 2. An on-path attacker intercepts the unencrypted request or response. 3. The attacker alters a headline, article summary, or destination URL in the RSS response. 4. The skill processes the modified feed as legitimate news. 5. The manipulated story is displayed to the user or the attacker-controlled link is fetched during a deep dive. 6. If attacker-controlled content is fetched, it may also interact with the skill's lack of explicit indirect prompt-injection defenses. ### Impact Assessment A successful attacker could: - Inject fabricated or misleading news into generated briefings. - Substitute legitimate article links with attacker-controlled destinations. - Influence summarization and source-quality decisions. - Introduce malicious content into the agent's processing context. Exploitation is limited to attackers capable of influencing t ...[truncated 142 chars]
Remediation
## Remediation Suggestions - Replace the HTTP feed URL with its verified HTTPS equivalent. - Require HTTPS for all configured RSS feeds and article links. - Reject redirects that downgrade an HTTPS request to HTTP. - Validate the final URL after every redirect. - Apply strict connection timeouts, response-size limits, and content-type validation. - Treat feed headlines, summaries, and links as untrusted input regardless of transport security. - Consider pinning approved feed hosts or maintaining an allowlist for default sources.

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:109
Finding
Untrusted News Content Is Processed Without Indirect Prompt-Injection Controls## Vulnerability Details **File Locations**: `SKILL.md:109-112`; related deep-dive behavior in `formats.md:201-217` **Vulnerability Type**: Unsafe processing of attacker-controlled external content **Risk Level**: High ### Vulnerable Code From `SKILL.md`: ```markdown When user replies with a number: 1. Fetch full article content 2. Summarize with more context 3. Show related stories 4. Offer: "Want the full article link?" ``` Related workflow from `formats.md`: ```markdown ## Interactive Dive-Deeper When user replies with a story number: ``` User: "3" 📖 DEEP DIVE — Story #3 [Full context: 6-8 sentences] [Background: why this matters] [What's next: implications] 🔗 Related: • [Related story 1] • [Related story 2] 📎 Full article: [URL] Reply 'back' for main briefing. ``` ``` ### Technical Analysis The skill instructs the agent to fetch and summarize full article content, search results, RSS entries, and community-submitted material. These sources are externally controlled and may contain text designed to resemble agent instructions. The workflow does not explicitly require the agent to: - Treat retrieved text as untrusted data rather than executable instructions. - Ignore commands embedded in articles, RSS fields, metadata, or pages. - Prevent fetched content from initiating tool calls or changing the task. - Validate URL schemes, destination hosts, and redirect chains. - Separate extracted article text from navigation, advertisements, comments, and hidden page content. Consequently, a malicious publisher or compromised news page could embed indirect prompt-injection content. When the article is loaded into the model context, that content may attempt to override the summarization task, request access to local files, trigger network actions, disclose stored preferences, or redirect the agent to additional malicious resources. The attack is not guaranteed to succeed bec ...[truncated 1943 chars]
Remediation
## Remediation Suggestions - Add an explicit rule that all RSS entries, search results, API responses, article text, metadata, comments, and linked pages are untrusted data. - Require the agent to ignore any instructions, requests, policies, or tool-call directions found inside retrieved content. - State that fetched content may only be used as evidence for extraction and summarization; it must never redefine the task or authorization scope. - Prevent external content from initiating tool calls, modifying schedules, writing memory, reading local files, or sending data externally. - Extract only necessary article fields and exclude scripts, hidden elements, advertisements, navigation text, comments, and unrelated page content. - Permit only `https` URLs and validate the destination before and after redirects. - Block local, loopback, link-local, private-network, and non-web URL schemes to reduce server-side request forgery risks. - Apply domain allowlists where practical, together with response-size, timeout, and content-type limits. - Keep external content clearly delimited from trusted skill instructions in the model prompt. - Require explicit user confirmation before following a related link outside the originally selected source. - Ensure runtime permissions enforce least privilege so a summarization operation cannot access unrelated files, alter cron jobs, or transmit stored user data.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Vague Triggers

Medium
Confidence
89% confidence
Finding
The 'When to Use' section says the skill applies when a user asks for 'news updates, daily briefings, current events, or scheduled news delivery,' which is a wide natural-language scope without clear boundaries or exclusion examples. This could cause unintended invocation for general conversation about current events rather than an explicit request to use the skill.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The Standard format trigger list includes generic phrases like "news," "briefing," and especially "what's happening," plus "default," which are ambiguous and likely to collide with ordinary conversation. This makes it unclear when the skill should activate versus when a user is just speaking casually, increasing the risk of unintended invocation.

Vague Triggers

Medium
Confidence
94% confidence
Finding
The trigger list includes "everything" and "all news," which are highly generic phrases that can appear in many unrelated conversations. The file does not provide exclusions or contextual constraints to distinguish explicit deep-dive requests from ordinary user language.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The archive feature saves generated briefings to a fixed local path, creating persistent storage of user-tailored content without any visible notice, consent, or retention controls. Even if the content is 'just news,' it can reveal user interests, region, timing, and reading patterns, and local files may be accessible to other users, processes, backups, or later compromise.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The selection table maps short generic words such as "news," "brief," "full," "read," and "archive" directly to formats, but does not define required context or exclusions. These terms are common in everyday speech and may cause accidental format switching or invocation.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The template explicitly directs the system to record behavior-derived preferences and delivery details such as skipped topics, follow-up tendencies, schedule, geography, and voice settings, but provides no consent, minimization, retention, or user-control guidance. This creates a privacy risk because inferred user profiling is being persisted beyond the immediate interaction and could expose sensitive behavioral patterns if accessed, reused unexpectedly, or breached.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The example cron configuration hard-codes the timezone to Europe/Madrid before later guidance says to ask for the user's timezone first. This mismatch can cause schedules to run at unintended times, potentially triggering unwanted disclosures or unexpected outbound messages, especially for a skill that sends automated notifications.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill instructs scheduled delivery over third-party channels like Telegram, WhatsApp, Discord, and email without requiring any privacy notice, consent flow, or discussion of what data will be transmitted. Because news briefings are personalized and explicitly draw from memory.md preferences, the scheduled messages may reveal user interests, region, schedule, or other profile data to external services or to anyone with access to those channels.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The setup explicitly directs the agent to collect and persist user preferences including location, schedule, delivery channel, and activation behavior into a local file, but provides no user-facing notice, consent step, retention limits, or access controls. While this is not overtly malicious, it creates a privacy risk because sensitive behavioral and location data may be stored indefinitely and exposed to other local processes, users, backups, or later prompts.

Static analysis

No suspicious patterns detected.