Back to skill

Security audit

Channel Reminders

Security checks for vulnerabilities and agentic risk

Overview

The skill is for Telegram reminders, but it asks users to install persistent messaging rules that can send Telegram messages from future system events without validation.

Install only if you understand and accept that this skill modifies persistent agent behavior and can send Telegram messages through configured bot accounts. Before use, replace the hardcoded Chat ID, avoid storing Chat IDs in general memory, add explicit recipient/account allowlists and event validation, and keep an auditable record instead of suppressing all output with NO_REPLY.

Vulnerability Patterns
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • 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
  • 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 (4)

T02 · Agent Memory Poisoning

Error
Location
SKILL.md:296
Finding

Persistent Modification of Main-Agent Heartbeat Instructions

Content
View full analysis
", "target": "", "message": "" } ``` Ничего больше не отвечай после отправки (NO_REPLY). ``` ### Technical Analysis The skill directs the user or agent to add durable behavioral rules to the main agent's `HEARTBEAT.md`. These rules survive the immediate skill invocation and instruct future agent sessions to recognize specially formatted system events, invoke the privileged `message` tool, and suppress ordinary output by returning `NO_REPLY`. The persistent rule does not require authentication of the event producer or verification that the event originated from an authorized reminder job. Consequently, any actor or compromised component capable of introducing a matching system event could potentially trigger the durable relay behavior. Although persistent configuration is relevant to the intended reminder functionality, placing an unrestricted tool-execution rule in shared agent instructions expands the security boundary beyond an individual reminder. ### Attack Path 1. The skill's instructions are followed and the supplied rule is added to the main agent's persistent `HEARTBEAT.md`. 2. An attacker gains the ability to create, alter, or inject a system event into the main agent's event stream. 3. The attacker formats the event with the expected `📤 ОТПРАВИТЬ Н ...[truncated 939 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:313
Finding

Unvalidated System-Event Fields Are Passed to a Privileged Messaging Tool

Content
View full analysis
", "target": "", "message": "" } ``` Ничего больше не отвечай после отправки (NO_REPLY). ``` ### Technical Analysis The instructions copy all security-sensitive message parameters directly from free-form system-event text into the `message` tool call. The selected bot identity, destination, and message body are therefore controlled by the event. No origin verification, authorization check, recipient binding, account allowlist, schema validation, or confirmation step is specified. The marker and field names function only as a parsing convention and do not provide authentication. The instruction to return `NO_REPLY` after sending further weakens operational transparency because an unauthorized or incorrectly routed delivery may not appear in the ordinary chat response. ### Attack Path 1. An attacker obtains a path to inject or modify a system event, cron payload, or other input consumed by the heartbeat handler. 2. The attacker supplies the recognized marker followed by a bot account available to the agent, an attacker-selected Telegram Chat ID, and arbitrary message content. 3. The main agent parses the values according to the documented format. 4. The agent calls the privileged `message` tool without independently verifying the account, recipient, event origin, or reminder owner. 5. Telegram sends the attacker-controlled content using the selected bot identity. 6. The handler suppresses its normal response with `NO_REPLY`. ### Impact Assessment An attacker could potent ...[truncated 466 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:76
Finding

User Telegram Chat ID Is Directed into Long-Term Agent Memory

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:225
Finding

Copy-Ready Examples Contain a Concrete Telegram Recipient ID

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill is built around delivering reminder contents to Telegram, a third-party service, but does not include a user-facing warning that reminder text and routing data will be transmitted externally. Even expected transmissions should be disclosed when they may contain personal or sensitive content.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The entire skill description and prescribed message formats are written in Russian, including fixed example reminder texts and HEARTBEAT instructions. There is no indication that the user can opt into another language or that this is a region-specific skill with a documented justification.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly tells the agent to persist the user's Telegram Chat ID in memory files. Storing persistent user identifiers is unnecessary for many reminder flows and increases privacy risk, especially if memory is shared, retained indefinitely, or later reused for unrelated messaging.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill directs storing a user's Telegram Chat ID in memory without any privacy notice, consent language, or retention guidance. Because chat IDs are user-linked identifiers, silent persistence creates an avoidable privacy and compliance risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill instructs retrieving Telegram chat IDs via direct Bot API queries, expanding data-access scope beyond simply scheduling reminders. This can expose message metadata and user identifiers from bot updates, and encourages broader API/data access than is necessary for the core task.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
85% confidence
Finding

The skill includes explicit instructions to use curl against the Telegram Bot API, which is an external transmission path not strictly required for the reminder logic itself. Combined with the getUpdates endpoint, this can reveal broader message/update data and normalize unnecessary outbound data access in the agent workflow.

Content

Scanner excerpt · SKILL.md (reported line 151)May include surrounding context.

Где взять:

bash
curl "https://api.telegram.org/bot<BOT_TOKEN>/getUpdates" | jq '.result[].message.chat.id'

Или из metadata сообщения — в заголовке Telegram сообщения виден id:XXXXXXXX

Static analysis

No suspicious patterns detected.