Back to skill

Security audit

Duckduckgo Search Backup

Security checks for vulnerabilities and agentic risk

Overview

This DuckDuckGo search skill is not malicious, but it needs review because it grants broad Python and package-install authority for a simple search workflow.

Install only if you are comfortable allowing this skill to run Python and package installation commands in your agent environment. Prefer using it in a constrained virtual environment, pinning the duckduckgo-search package version, and reviewing commands before execution.

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

Warning
Location
SKILL.md:24
Finding
Unpinned Third-Party Package Installation Creates Supply-Chain Risk<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 24-27 and 403-407 **Vulnerability Type**: Unpinned third-party dependency installation **Risk Level**: Medium ### Vulnerable Code ```bash # SKILL.md:24-27 uv pip install duckduckgo-search # Or install with pip pip install duckduckgo-search ``` ```bash # SKILL.md:403-407 # Ensure pip is the latest version pip install --upgrade pip pip install duckduckgo-search # Or use uv uv pip install duckduckgo-search ``` ### Technical Analysis The Skill instructs the Agent to install `duckduckgo-search` without specifying an exact version or verifying package integrity with cryptographic hashes. Consequently, the package resolver selects whichever compatible release is current when installation occurs, rather than the release reviewed when the Skill was published. Python package installation and subsequent import can execute third-party code with the privileges of the Agent process. If a future package release or its publishing account is compromised, the effective behavior of this Skill can change without any modification to the audited project. The instruction to upgrade `pip` is also unnecessary for the Skill's core search behavior and introduces an additional mutable dependency change. The project does not contain an embedded malicious script, and the reviewed instructions do not demonstrate malicious intent. The issue is the avoidable supply-chain exposure created by installing mutable, unverified dependencies at runtime. ### Attack Path 1. An attacker compromises the upstream package, its publisher account, or the relevant package distribution path. 2. The attacker publishes a malicious release under the expected package name. 3. A user or Agent follows the Skill instructions and runs `pip install duckduckgo-search` or `uv pip install duckduckgo-search`. 4. Because no exact version or integrity hash is required, the resolver downloads the attacker-controlled release. 5. Malicious code e ...[truncated 774 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin `duckduckgo-search` to a specific version that has been reviewed and tested: ```bash python -m pip install "duckduckgo-search==<audited-version>" ``` 2. Generate and enforce cryptographic hashes through a locked requirements file: ```text duckduckgo-search==<audited-version> \ --hash=sha256:<verified-package-hash> ``` Install it with: ```bash python -m pip install --require-hashes -r requirements.txt ``` 3. Include and pin all transitive dependencies using a reproducible lockfile generated from a trusted environment. 4. Install dependencies in an isolated virtual environment or disposable sandbox with minimal filesystem, credential, and network access. 5. Remove the automatic `pip install --upgrade pip` instruction. Package-manager upgrades should be handled separately through an audited environment-maintenance process. 6. Configure the installer to use a trusted package index and disable unexpected fallback indexes where practical. 7. Periodically review the pinned package version for known vulnerabilities and update the lockfile only after testing and integrity verification. ]]>
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Context-Inappropriate Capability

Medium
Confidence
98% confidence
Finding
Granting general Python execution is broader than the documented search functionality and effectively allows arbitrary scripting under the skill. In context, this makes the skill materially more dangerous because a 'search' skill could be repurposed to read/write files, invoke subprocesses, or make unrelated network requests beyond DuckDuckGo queries.

Context-Inappropriate Capability

Medium
Confidence
98% confidence
Finding
Granting general Python execution is broader than the documented search functionality and effectively allows arbitrary scripting under the skill. In context, this makes the skill materially more dangerous because a 'search' skill could be repurposed to read/write files, invoke subprocesses, or make unrelated network requests beyond DuckDuckGo queries.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The skill body is written in Chinese while the manifest description is in English, and the document does not state that Chinese output is optional or limited to a specific locale. This creates a language/locale policy issue because the skill appears to impose one language without explicit user opt-in.

Description-Behavior Mismatch

Low
Confidence
87% confidence
Finding
The manifest presents the skill as one that retrieves real-time information via DuckDuckGo search, which implies fetching and returning results. The documented example additionally persists results to a local JSON file, introducing local file-write behavior that is not described in the manifest.

Static analysis

No suspicious patterns detected.