Back to skill

Security audit

deacon-install

Security checks for vulnerabilities and agentic risk

Overview

The skill installs a support widget with clearly disclosed customer data sharing, analytics, and browser storage that fit its purpose.

Install if you intend to share customer identity, support context, and website telemetry with Deacon. Minimize shared fields, preserve the escaping and sign-out handling, disclose browser storage, and review any CSP changes. The data-no-page-views option disables page-view and error collection on selected routes, while leaving the support widget active.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (1)

Unvalidated Output Injection

High
Category
Output Handling
Confidence
65% confidence
Finding

Model output is used without validation or sanitization. Unvalidated output injected into downstream contexts (SQL, shell, HTML) enables injection attacks and arbitrary code execution.

Content

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

md
{children}
      {session?.user && (
        <script
          dangerouslySetInnerHTML={{
            __html: `window.deaconUser = ${safe({
              id: session.user.id,
              email: session.user.email,