Back to skill

Security audit

Robinhood for Agents

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for Robinhood trading, but it gives an unpinned third-party package access to OAuth tokens, sensitive account data, and live trade execution.

Install only if you trust the robinhood-for-agents package and its publisher. Treat outputs as sensitive financial records, avoid logging raw account JSON, require explicit human confirmation for every order or cancel action, and revoke the Robinhood session if package integrity or machine access is uncertain.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Error
Location
SKILL.md:6
Finding
Unpinned Third-Party Package Executes with Access to Financial Credentials and Trading Functions## Vulnerability Details **File Location**: `SKILL.md:6-9`; related execution and authentication workflow at `setup.md:14-22` **Vulnerability Type**: Unpinned third-party dependency with access to sensitive OAuth tokens and financial operations **Risk Level**: High ### Vulnerable Code `SKILL.md:6-9`: ```yaml install: - kind: node package: robinhood-for-agents bins: [robinhood-for-agents] ``` `setup.md:14-22`: ```bash ### Step 2: Browser Login ```bash bunx robinhood-for-agents login ``` This opens Chrome to the real Robinhood website: 1. Chrome opens to robinhood.com/login 2. User enters email and password 3. Robinhood handles MFA natively (push notification, SMS, etc.) 4. Token captured automatically and saved securely 5. Chrome closes when login is complete ``` ### Technical Analysis The Skill installs and executes `robinhood-for-agents` without specifying an exact package version or integrity hash. The `bunx` authentication command may therefore resolve and execute whichever package version the registry currently serves. This dependency occupies a highly privileged trust position. According to the documented workflow, it intercepts Robinhood OAuth traffic, captures an authenticated token, stores or restores that token through the operating-system keychain, reads sensitive financial information, and exposes methods capable of placing or cancelling stock, option, and cryptocurrency orders. The audited project contains only Markdown instructions and API documentation; it does not include the dependency source, a lockfile, package integrity metadata, or a reproducible build record. Consequently, the dependency's implementation, outbound destinations, token handling, and enforcement of order safeguards cannot be verified from the audited artifact. A malicious or compromised future release could execute before any reviewed version boundary protects the user. Network access and possession o ...[truncated 2470 chars]
Remediation
## Remediation Suggestions 1. Pin `robinhood-for-agents` to an exact, reviewed version rather than resolving the latest registry release. 2. Commit a lockfile containing cryptographic integrity values and require frozen-lockfile installation so dependency resolution cannot drift. 3. Prefer a vendored or otherwise locally reviewable implementation for the authentication and trading client, especially the browser interception and keychain code. 4. Publish signed release artifacts, package provenance, and reproducible build instructions. Verify signatures and integrity before execution. 5. Audit all transitive dependencies and use automated dependency monitoring for publisher changes, known vulnerabilities, and unexpected release activity. 6. Restrict outbound network access to explicitly documented Robinhood domains during authentication and API use. Deny arbitrary third-party destinations where the execution environment supports egress controls. 7. Separate authentication, read-only portfolio access, and trade execution into distinct capabilities. Do not expose order methods to workflows that only require research or portfolio retrieval. 8. Enforce confirmation and account-selection requirements in a trusted wrapper outside the third-party dependency, rather than relying only on Markdown instructions. 9. Avoid printing complete account-profile, account-number, or portfolio responses unless specifically required. Redact sensitive fields before presenting results or retaining logs. 10. Document token revocation procedures and advise users to revoke the Robinhood session immediately if dependency integrity is uncertain.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Credential Access

High
Category
Privilege Escalation
Content
## Security Warning
After successful login, **always** remind the user:

> **Robinhood OAuth tokens are stored in the OS keychain (macOS Keychain Services, Linux libsecret, Windows Credential Manager) via Bun.secrets. No tokens are written to disk. Tokens expire after ~24 hours. Anyone with access to this machine's keychain can read them.**

## Notes
- No credentials (username/password) pass through the tool layer — login happens on the real Robinhood website
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The example retrieves highly sensitive financial data, including holdings, account details, cash, and crypto positions, and immediately prints the full JSON payload to stdout. In an agent setting, stdout is often logged, surfaced to users, stored in transcripts, or forwarded to other tools, which can expose account numbers and portfolio information without any privacy warning, minimization, or redaction guidance.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The browser login tool explicitly states that it opens Chrome and captures OAuth tokens automatically, but provides no warning about sensitive credential material, token scope, storage, logging, or handling requirements. In an agent ecosystem, undocumented automatic token capture is dangerous because integrators may expose or persist tokens insecurely, enabling account takeover and unauthorized access to brokerage and personal financial data.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This reference documents live order placement and cancellation capabilities for stocks, options, and crypto without any explicit warning that these actions can trigger real financial transactions, losses, tax consequences, or partially irreversible market effects. In an agent skill, exposing trading primitives without prominent safety and confirmation guidance increases the risk that an LLM or downstream integrator invokes them casually, misunderstands them as simulation-only, or executes harmful trades on behalf of a user.

Missing User Warnings

Low
Confidence
83% confidence
Finding
The workflow and example show retrieving holdings and open option positions from a Robinhood session, which exposes sensitive financial account data. The markdown describes how to do this but does not include any explicit warning or privacy disclosure around accessing brokerage holdings/positions.

Missing User Warnings

Low
Confidence
83% confidence
Finding
This markdown file includes executable code that restores a Robinhood session and makes multiple API requests, which implies use of authenticated account context and network transmission. The surrounding skill description does not warn the user that running the snippet will access their broker session and fetch remote data.

Static analysis

No suspicious patterns detected.