Back to skill

Security audit

Bird Information

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward bird-information lookup tool, with disclosed network access to Dongniao and no evidence of hidden persistence, credential access, or destructive behavior.

Before installing, understand that bird lookups require contacting dongniao.net and that CLI use may require installing the Python requests package. Prefer installing dependencies in an isolated environment and pinning requests if you package this for broader use.

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
INTEGRATION_TEST.md:112
Finding
Unpinned Third-Party Dependency Installation## Vulnerability Details **File Location**: `INTEGRATION_TEST.md`, lines 112-119 **Vulnerability Type**: Unpinned dependency installation from the active Python package index **Risk Level**: Medium ### Vulnerable Code ```bash # Check the requests library python3 -c "import requests; print('OK')" # Test network connectivity curl -I https://dongniao.net/taxonomy.html # Install requests (if needed) python3 -m pip install requests ``` ### Technical Analysis The troubleshooting guide instructs users to install the `requests` package without specifying a reviewed version, verifying cryptographic hashes, using a lockfile, or explicitly selecting a trusted package index. Consequently, the package artifact is determined by the user's active pip configuration and the state of the configured repository at installation time. The executable imports this package in `scripts/bird_info_skill.py` and refuses to run from its command-line entry point when it is unavailable, even though `http_fetch()` contains a standard-library `urllib` fallback. This behavior encourages users to follow the unsafe installation instruction. An unpinned dependency is not inherently malicious, but this installation pattern weakens supply-chain integrity. Exploitation requires compromise or malicious control of a configured package source, a compromised upstream release, or another mechanism capable of supplying an attacker-controlled artifact under the expected package name. ### Attack Path 1. An attacker compromises the configured Python package source, an upstream package release, or a package mirror selected through the victim's pip configuration. 2. The user encounters the documented missing-dependency error. 3. The user follows the guide and runs `python3 -m pip install requests`. 4. Pip resolves and installs the attacker-controlled or compromised artifact without a pinned version or required hash. 5. Malicious code can execute during package installation or when the skill subsequentl ...[truncated 568 chars]
Remediation
## Remediation Suggestions 1. Prefer the existing Python standard-library `urllib` implementation and remove the command-line check that makes `requests` mandatory. 2. If `requests` remains required, pin it to a reviewed exact version in a dependency or lock file. 3. Require cryptographic hashes, such as through a hash-locked requirements file and `pip install --require-hashes`. 4. Install only from an explicitly trusted HTTPS package index rather than relying on ambient pip configuration. 5. Review and update the lockfile through a controlled dependency-management process. 6. Avoid installing packages with elevated privileges and use an isolated virtual environment with minimal permissions. 7. Keep the declared skill requirements synchronized with the executable dependency requirements.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The documented behavior claims use of web_fetch, but the finding indicates the implementation uses direct HTTP libraries and exposes a CLI path not reflected in the declared interface. This mismatch is dangerous because reviewers and policy controls may approve the skill based on the safer declared model while the real implementation bypasses those expectations and expands execution and network attack surface.

File System Enumeration

Medium
Category
Data Exfiltration
Content
**解决方案**:
```bash
# 1. 检查技能目录权限
ls -la ~/.openclaw/workspace/skills/bird-info/

# 2. 重启 OpenClaw Gateway
openclaw gateway restart
Confidence
60% confidence
Finding
Code scans file system directories looking for sensitive files. This could be reconnaissance for credential theft.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The auto-trigger guidance is broad enough to match ordinary conversation such as asking about an animal's distribution or conservation status, which can cause unintended skill invocations. Unintended activation may transmit user content to an external service without clear consent and can expand the agent's behavior beyond what the user expected.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The suggested skill description tells the model to use the skill whenever a user asks about bird details or related topics, but it does not define guardrails for ambiguity, consent, or external network use. In LLM-driven routing, this kind of broad instruction increases the chance of over-invocation and unnecessary disclosure of user prompts to third-party sites.

Natural-Language Policy Violations

Medium
Confidence
90% confidence
Finding
The instruction tells the user in Chinese to provide a bird name and says the assistant will help, but it does not offer any language or locale choice. Since the policy requires flagging language constraints unless they are optional or clearly justified, this is a natural-language policy violation.

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill declares network-related behavior but does not define any explicit tool scope such as allowed tools or permissions. In an agent environment, this weakens least-privilege controls and can let a seemingly simple knowledge skill make outbound requests without transparent authorization boundaries.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The README says users can 'Simply ask in natural language' and gives examples like '请帮我查一下…' and '查询 … 的信息', which are common conversational patterns rather than narrowly scoped trigger phrases. Without explicit boundaries or exclusion examples, this can make activation conditions ambiguous and increase the chance of unintended invocation.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The line 'Clear error messages in Chinese' indicates a fixed language behavior for user-facing output. This is a natural-language policy concern because the skill does not mention offering users a language choice or obtaining opt-in for Chinese-only responses.

Natural-Language Policy Violations

Medium
Confidence
82% confidence
Finding
The skill report and all user-facing examples are presented in Chinese, and the documented guidance emphasizes using Chinese or English bird names without stating that the user may choose their preferred interface language. This can indicate a language policy constraint without explicit opt-in or justification.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This code file contains user-facing strings and descriptions entirely in Chinese, including the module description and command usage. Under the policy, forcing a language without opt-in is a natural-language policy violation unless the skill offers a language choice or clearly documents a justified region-specific constraint, which it does not.

Missing User Warnings

Low
Confidence
85% confidence
Finding
This markdown file states that the skill queries dongniao.net and later includes direct network tests, but it does not warn users that their bird queries may be sent to an external website. For markdown files, SQP-2 applies when the description omits warnings about behaviors that could affect user data or privacy.

Static analysis

No suspicious patterns detected.