Back to skill

Security audit

Research

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a disclosed market-research workflow, but it can search prior sessions and sibling project source data without clear user consent or scope limits.

Review this skill before installing if your workspace includes confidential prior sessions or multiple private projects. Use it only where cross-project research is acceptable, or disable/avoid the session_search and codegraph/project_code_search tools unless you explicitly want the agent to consult that data. The public web and Reddit behavior is expected for market research, and docs/research.md file creation is expected.

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

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:113
Finding
Excessive Access to Prior Sessions and Sibling Project Source Data<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 23 and 113–120 **Vulnerability Type**: T05: Unauthorized Access and Privilege Escalation **Risk Level**: Medium ### Complete Code Snippet ```markdown - `session_search(query, project)` — find how similar research was done before ``` ```markdown 3. **Search knowledge base and past work:** - If MCP `kb_search` available: `kb_search(query="<idea keywords>", n_results=5)` - If MCP `session_search` available: `session_search(query="<idea keywords>")` — check if this idea was researched before - Otherwise: Grep for keywords in `.md` files - Check if `research.md` or `prd.md` already exist for this idea. 4. **Check existing portfolio** (if MCP codegraph tools available): - `codegraph_explain(project="<similar project>")` — architecture overview of related projects in the portfolio - `project_code_search(query="<relevant pattern>", project="<sibling>")` — find reusable code, patterns, infrastructure - `codegraph_query("MATCH (p:Project)-[:DEPENDS_ON]->(pkg:Package) WHERE pkg.name CONTAINS '<relevant tech>' RETURN p.name, pkg.name")` — find projects using similar tech ``` ### Technical Analysis The skill directs the agent to search historical sessions and inspect architecture, dependencies, and source patterns from sibling projects. These resources may contain confidential user context, proprietary source code, credentials inadvertently recorded in session history, or information belonging to projects outside the current research task. Although the MCP tools are included in the skill's declared tool list, the workflow does not require explicit user authorization before crossing current-project boundaries. Market research can be completed without accessing unrelated session history or sibling-project source data. This violates least-privilege principles and creates a risk of unintended cross-project disclosure. The issue does not prove that the skill obtains operating-sys ...[truncated 1785 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Disable `session_search`, `codegraph_explain`, `project_code_search`, and `codegraph_query` by default for ordinary market-research tasks. 2. Require explicit, informed user consent before searching prior sessions or any project other than the current one. 3. Restrict every query to an explicit allowlist of project and session identifiers authorized for the active user. 4. Enforce authorization in the MCP backend rather than relying solely on skill instructions. 5. Return only minimal metadata by default; source text and full session content should require separate approval. 6. Apply output filtering so retrieved secrets, credentials, personal information, and proprietary source fragments cannot be copied into `research.md`. 7. Record an audit log identifying which sessions and projects were queried. 8. Clearly label any output derived from prior sessions or sibling projects and request confirmation before writing it to disk. 9. Prefer current-project files and public web sources unless cross-project reuse is explicitly requested. ]]>

T08 · Insecure Dependencies

Note
Location
SKILL.md:75
Finding
Unpinned Third-Party PRAW Dependency Installation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, line 75 **Vulnerability Type**: T08: Insecure Dependencies **Risk Level**: Low ### Complete Code Snippet ```markdown **Method 4: PRAW** (Reddit Official API, for live search/user profiles) - [praw-dev/praw](https://github.com/praw-dev/praw) — Python Reddit API Wrapper - OAuth2 auth, built-in rate limiting, sync/async support - Best for: live subreddit search, user profiles, comment trees - `pip install praw` / `uv add praw` ``` ### Technical Analysis The skill documents installation of `praw` without a version constraint, lockfile, hash, or package-integrity verification. The command therefore resolves to whichever release and transitive dependency versions are current at execution time. This makes the effective dependency set mutable after the skill has been reviewed. Python package installation may execute build-system logic during installation, and the installed package later executes with the privileges of the agent process when imported. If the package index account, package release, distribution artifact, build dependency, or transitive dependency were compromised, the unpinned command could introduce attacker-controlled code. There is no evidence in the audited project that PRAW is currently malicious, typo-squatted, or automatically installed. The risk is conditional and supply-chain-oriented: the documented command permits installation of an unreviewed future dependency release. ### Attack Path 1. The primary Reddit access methods fail or the operator chooses the optional PRAW method. 2. The agent or operator executes `pip install praw` or `uv add praw`. 3. The package manager resolves the latest available PRAW release and its transitive dependencies from configured package sources. 4. A compromised, malicious, or unexpectedly changed release is downloaded because no reviewed version or artifact hash is enforced. 5. Package build or installation logic executes, or the package exe ...[truncated 1130 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Do not install PRAW automatically; require explicit user approval before changing the environment. 2. Pin PRAW and every transitive dependency to reviewed versions in a lockfile. 3. Require artifact hashes, such as with `pip install --require-hashes -r requirements.txt`. 4. Use a trusted, explicitly configured package index and disable unexpected fallback indexes. 5. Install the dependency in an isolated virtual environment or disposable container with minimal filesystem and network access. 6. Review package provenance, release signatures where available, maintainer changes, and published artifacts before updating. 7. Run vulnerability and dependency-integrity scanning on the locked dependency set. 8. Prefer existing WebSearch, WebFetch, or approved MCP integrations when they satisfy the task without adding local dependencies. ]]>
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)

External Transmission

Medium
Category
Data Exfiltration
Content
- Example: `old.reddit.com/r/indiehackers/comments/abc123/post_title/`

**Method 2: PullPush API** (for search/discovery)
- Endpoint: `https://api.pullpush.io/reddit/submission/search`
- Params: `q`, `subreddit`, `author`, `score` (e.g. `>10,<100`), `since`/`until` (unix timestamps), `size` (max 100)
- Rate limits: soft 15 req/min, hard 30 req/min, 1000 req/hr. Sleep 4 sec between requests.
- Returns JSON with full `selftext`, author, score, created_utc
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
- Example: `old.reddit.com/r/indiehackers/comments/abc123/post_title/`

**Method 2: PullPush API** (for search/discovery)
- Endpoint: `https://api.pullpush.io/reddit/submission/search`
- Params: `q`, `subreddit`, `author`, `score` (e.g. `>10,<100`), `since`/`until` (unix timestamps), `size` (max 100)
- Rate limits: soft 15 req/min, hard 30 req/min, 1000 req/hr. Sleep 4 sec between requests.
- Returns JSON with full `selftext`, author, score, created_utc
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Low
Confidence
95% confidence
Finding
This markdown skill clearly states that it produces a structured `research.md`, and later specifies writing to `docs/research.md`, but the user-facing description does not warn near the top that running the skill will create files in the current project. For markdown files, SQP-2 applies when behavior affecting user data or system integrity is not disclosed in the skill description.

Static analysis

No suspicious patterns detected.