Back to skill

Security audit

DilemmAI Competition

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent DilemmAI browser-automation guide, but it under-scopes sensitive inbox and credential access.

Install only if you are comfortable supervising authentication and credential entry. Manually provide one-time login codes, explicitly choose any OpenRouter key yourself, prefer a dedicated limited-use key, and do not let the agent search broad inboxes or generic secret stores.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:53
Finding
Overbroad Credential Access and Third-Party Secret Submission<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 53–84 **Vulnerability Type**: Credential access exceeding least-privilege requirements **Risk Level**: Medium ### Vulnerable Code ```markdown 5. Choose authentication method: - Email: Enter email → retrieve 6-digit code from inbox → enter code - Google/Twitter/Discord: OAuth flow (may require human intervention) - Wallet: Connect wallet via Privy 6. Wait for redirect after successful auth 7. Verify login by checking for username in sidebar ``` **Email login specifics:** - After entering email, Privy sends 6-digit code - Code entry modal has 6 separate textboxes - Check email inbox for "Your login code for DilemmAI" - Enter code digit-by-digit ### Step 2: (Optional) Configure OpenRouter API Key **When:** Want access to more than 2 free models. **Default state:** - Without OpenRouter key: 2 free models available (currently Arcee AI & TNG) - With OpenRouter key: All models on OpenRouter available **For moltys:** Check secrets file for existing OpenRouter key before proceeding. If none exists, skip this step and use free models for initial proof-of-concept. **If adding key:** ``` 1. browser(action="navigate", targetUrl="https://dilemm.ai/dashboard") 2. browser(action="snapshot", refs="aria") 3. Find "OpenRouter API Key" textbox 4. Type key into textbox 5. Click "Save" button 6. Optional: Click "Test" to verify key works ``` ``` ### Technical Analysis The Skill instructs the agent to retrieve one-time authentication codes from an email inbox and to inspect an unspecified “secrets file” for an OpenRouter API key. No exact file path, credential identifier, access boundary, or user-confirmation requirement is defined. The generic instruction to check a secrets file violates least privilege because an implementation may search broadly through workspace or user-level secret stores. Those stores may contain credentials unrelated to DilemmAI. The Skill then directs the agent to su ...[truncated 2251 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the generic instruction to inspect a “secrets file.” 2. Require the user to provide or explicitly select the exact OpenRouter credential intended for DilemmAI. 3. If automated credential retrieval is necessary, specify: - The exact approved secret identifier. - The exact credential provider or file path. - A prohibition on recursive filesystem or unrelated secret-store searches. - Validation that the credential is an OpenRouter key intended for this account. 4. Display the destination domain and request explicit user confirmation immediately before submitting or saving the key. 5. Explain whether DilemmAI stores the key, how it is protected, and how the user can rotate or revoke it. 6. Prefer manual entry of email one-time codes. If inbox automation is retained, restrict it to the expected sender, subject, recipient, and recent delivery window without reading unrelated messages. 7. Require explicit user interaction before initiating OAuth authorization or wallet connection. 8. Never automate wallet signatures, permissions, purchases, or transactions without separate transaction-specific confirmation. 9. Recommend a dedicated, least-privileged OpenRouter key with usage limits and provide instructions for rotation if disclosure is suspected. ]]>
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 (2)

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill explicitly instructs the agent to access the user's email inbox to retrieve a 6-digit login code, but it does not require explicit user consent, scope limitation, or a privacy warning before accessing unrelated mailbox contents. That creates unnecessary exposure to sensitive personal data and could normalize broad inbox access for a narrow authentication task.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill tells the agent to check a secrets file for an existing OpenRouter API key without providing controls for secret minimization, masking, or user approval. This encourages direct credential access and reuse, which can lead to unauthorized disclosure, propagation into logs/browser fields, or use of credentials outside the user's intended scope.

Static analysis

No suspicious patterns detected.