Back to skill

Security audit

Agentic Loop Designer

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent loop-design guide, but several templates encourage automatic sharing or writing of internal, personal, and financial data without enough approval or scoping controls.

Before installing or using these templates, treat them as design examples that need stronger controls. Require human approval for outputs containing personnel, customer, revenue, or private engineering data; verify exact Slack channels, Notion databases, recipients, and connected accounts; use least-privilege credentials; and define what memory may store and when it is deleted.

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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:183
Finding
Automatic Transmission of Potentially Sensitive Organizational Data Without Human Approval<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 183–198, 242–255, and 270–285 **Vulnerability Type**: Unsafe approval-gate and outbound-message configuration **Risk Level**: Medium ### Vulnerable Code Snippets ```text **Gate:** Auto-send (low risk, read-only) **Output:** Slack message in #standup LOOP CONFIG: ───────────────────────────────────── Name: Weekly Standup Digest Trigger: cron("0 9 * * MON") Agent prompt: | Read all open Linear issues assigned to each team member. Read all open GitHub PRs by author. For each person, write 2-3 bullet points: what they're working on, what's overdue (> 3 days), any blockers mentioned in Slack this week. Format as a Slack message with @mentions. Gate: None (auto-send) Output: POST to #standup ``` ```text **Gate:** Auto-send if PR age > 48hr, Slack preview if 24-48hr **Output:** Slack message @mentioning overdue reviewers LOOP CONFIG: ───────────────────────────────────── Name: PR Review Reminder Trigger: cron("0 15 * * MON-FRI") Agent prompt: | Fetch all open PRs across [repos]. Find PRs with requested reviewers but no review in > 24 hours. Group by reviewer. For each reviewer, list their overdue PRs. Draft a friendly Slack message with PR links and ages. Gate: If any PR > 48hr → auto-send. If 24-48hr → preview + 30min timeout Output: #engineering Slack channel ``` ```text **Gate:** Auto-send (read-only financial data) **Output:** Slack message in #founders with sparkline context LOOP CONFIG: ───────────────────────────────────── Name: Weekly Revenue Snapshot Trigger: cron("0 17 * * FRI") Agent prompt: | Pull current MRR from Stripe. Compare to snapshot from 7 days ago (stored in memory). Calculate: MRR change ($, %), new customers, churned customers. Write 3-sentence narrative: what changed, why (if obvious), what to watch. Format for Slack with clear numbers. Gate: Auto-send Output: #founders Slack channel + update Notion metrics DB ``` ### Technical Analysis ...[truncated 2712 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit human approval before sending any output containing personnel, customer, engineering, or financial information. 2. Classify the entire workflow rather than only source access. Any Slack post, email, webhook request, or database update must be treated as a write operation. 3. Replace automatic timeout approval with a fail-closed default such as `Skip` or `Hold for review`. 4. Display the complete payload and exact destination workspace, channel, database, or recipient during approval. 5. Enforce allowlists for Slack workspace IDs, channel IDs, Notion database IDs, repositories, and other destinations. 6. Verify that destination channels do not include external guests or unauthorized groups before sending. 7. Minimize and redact sensitive fields, particularly customer identities, revenue values, personnel details, private links, and quoted internal messages. 8. Treat source content as untrusted input. Delimit it from agent instructions and prevent issue titles, messages, or pull-request text from changing the workflow's actions or recipients. 9. Use least-privilege credentials with access only to required repositories, channels, Stripe fields, and Notion databases. 10. Add audit logging for source records, generated output, approver identity, destination, transmission time, and delivery result. 11. Permit unattended sending only after explicit data classification, destination validation, and successful manual trial runs with non-sensitive output. 12. Revise the affected templates so their gates are consistent with the document's stated requirement that sensitive data and external messages receive human review. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (3)

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This template operationalizes outbound email drafting and CRM writes using lead form data and third-party enrichment without any explicit privacy, consent, or approval safeguards beyond a Slack approval step for sending. That creates a real risk of mishandling personal/business contact data, sending inappropriate outbound communications, or storing enriched lead profiles in systems without notice, minimization, or policy checks.

Missing User Warnings

Low
Confidence
84% confidence
Finding
The memory guidance recommends persisting user preferences and error logs, which can accumulate behavioral data, operational metadata, and potentially sensitive content from failed runs, but it provides no retention, access-control, or minimization guidance. In agent systems, seemingly harmless memory fields can become long-lived stores of sensitive context that are later reused or exposed unintentionally.

Missing User Warnings

Low
Confidence
88% confidence
Finding
The standup digest loop instructs the agent to read team Slack activity, GitHub PRs, and Linear issues to summarize blockers and work status, but it does not warn that this may expose employee activity, internal discussions, or sensitive project information to broader audiences. Even if the action is read-only, summarization can amplify private or context-sensitive information and redistribute it into a less restricted channel.

Static analysis

No suspicious patterns detected.