Back to skill

Security audit

地动仪气候模型 Dizhenyi Climate Model

Security checks for vulnerabilities and agentic risk

Overview

The skill is a local climate-analysis toolkit, but it overstates some forecasting capabilities and uses unsafe fixed temporary output files.

Review this skill before installing if you need reliable climate guidance. Treat outputs as illustrative research calculations, not authoritative forecasts or warnings. Run it in a dedicated virtual environment as an unprivileged user, pin numpy if possible, and avoid running the scripts on multi-user systems until the fixed /tmp output paths are corrected.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T08 · Insecure Dependencies

Note
Location
requirements.txt:1
Finding
Unpinned Third-Party Dependency Permits Unreviewed Package Changes## Vulnerability Details **File Location**: `requirements.txt:1`; installation instructions at `README.md:53` and `SKILL.md:171-177` **Vulnerability Type**: Unpinned third-party dependency **Risk Level**: Low **Complete Code Snippet**: ```text numpy ``` The associated installation instructions use: ```bash pip install numpy ``` ### Technical Analysis The project declares `numpy` without a fixed version or integrity hash. Following the documented installation procedure therefore causes `pip` to resolve a mutable package version at installation time rather than a release that was reviewed with this Skill. This does not demonstrate that the legitimate NumPy package is malicious. However, it weakens dependency reproducibility and exposes installations to future upstream compromise, repository-account compromise, unsafe index configuration, or incompatible package changes. No lock file, package hash, or explicit package index is provided to constrain resolution. ### Attack Path 1. A user follows the documented `pip install numpy` instruction or installs from `requirements.txt`. 2. `pip` contacts its configured package index and resolves the dependency at that time. 3. If the configured index, package metadata, maintainer account, or selected release has been compromised, an attacker-controlled distribution may be downloaded. 4. Installation hooks or imported package code execute with the permissions of the user running the installation or Skill. 5. The malicious dependency could access any files, credentials, or network resources available to that account. This path is conditional on compromise or unsafe configuration of the dependency source; the audited repository itself does not retrieve a remote payload directly. ### Impact Assessment Successful supply-chain exploitation could result in arbitrary code execution under the installing user's account. The accessible scope would include that user's files, envir ...[truncated 314 chars]
Remediation
## Remediation Suggestions 1. Pin NumPy to a reviewed version or narrowly bounded compatible range. 2. Generate a hash-locked requirements file, for example with `pip-compile --generate-hashes`. 3. Install with hash enforcement: ```bash python3 -m pip install --require-hashes -r requirements.txt ``` 4. Document use of the official Python Package Index or an organization-controlled package mirror. 5. Install dependencies inside a dedicated, non-privileged virtual environment. 6. Add automated dependency vulnerability and update review, rather than accepting new releases implicitly.

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/febe_solver.py:117
Finding
Predictable Shared Temporary Files Allow Symlink-Based File Overwrite## Vulnerability Details **File Location**: `scripts/febe_solver.py:117-118` and `scripts/orbital_forcing.py:116-117` **Vulnerability Type**: Unsafe temporary-file creation **Risk Level**: Medium **Complete Code Snippets**: `scripts/febe_solver.py:117-118`: ```python with open('/tmp/febe_results.json', 'w') as f: json.dump(out, f, indent=2) ``` `scripts/orbital_forcing.py:116-117`: ```python with open('/tmp/orbital_forcing_results.json', 'w') as f: json.dump(result, f, indent=2) ``` ### Technical Analysis Both scripts write results to fixed, predictable names in the shared `/tmp` directory. Python's ordinary `open(..., 'w')` call follows symbolic links and truncates an existing target. It does not request exclusive creation, reject symbolic links, verify file ownership, or create a private temporary directory. A local attacker who can create either predictable path before the victim runs the script may replace it with a symbolic link to another file writable by the victim. When the script opens the path, the linked target can be truncated and replaced with JSON output. Platform protections such as Linux `fs.protected_symlinks` may prevent some cross-user attacks in sticky directories, but they are configuration-dependent and do not make this file-creation pattern safe or portable. Repeated runs also overwrite previous output without warning. ### Attack Path 1. The attacker observes the documented fixed output filename. 2. Before the victim runs the relevant script, the attacker creates a symbolic link, for example: ```bash ln -s /path/writable/by/victim /tmp/febe_results.json ``` 3. The victim runs: ```bash python3 scripts/febe_solver.py ``` 4. `open('/tmp/febe_results.json', 'w')` follows the symbolic link. 5. The linked target is truncated and replaced with generated JSON. 6. The same method applies to `/tmp/orbital_forcing_results.json`. Exploitation requires ...[truncated 811 chars]
Remediation
## Remediation Suggestions 1. Avoid fixed names in a shared temporary directory. Use Python's `tempfile` module: ```python import json import tempfile with tempfile.NamedTemporaryFile( mode='w', encoding='utf-8', prefix='febe_results_', suffix='.json', delete=False ) as f: json.dump(out, f, indent=2) output_path = f.name ``` 2. Prefer accepting an explicit user-selected output path and refuse to overwrite an existing file unless the user supplies an explicit overwrite option. 3. If a stable destination is required, write to a securely created temporary file in the destination directory and atomically rename it after successful serialization. 4. On supported platforms, use exclusive creation and no-follow semantics such as `O_CREAT | O_EXCL | O_NOFOLLOW`, then verify that the resulting descriptor references a regular file owned by the current user. 5. Create result files with restrictive permissions, such as mode `0600`, when output could become sensitive. 6. Apply the same correction consistently to both `febe_solver.py` and `orbital_forcing.py`. 7. Document the output location rather than silently writing to a global shared path.
Vulnerability Patterns
  • 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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (31)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The English description similarly overstates the implemented scope, including long-term prediction, FEBE, extreme-event warning, paleoclimate backtracking, and delayed glaciation testing. This is a true trust and integrity issue because the mismatch can deceive reviewers, users, or agents into over-permitting or over-relying on the skill.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The English description similarly overstates the implemented scope, including long-term prediction, FEBE, extreme-event warning, paleoclimate backtracking, and delayed glaciation testing. This is a true trust and integrity issue because the mismatch can deceive reviewers, users, or agents into over-permitting or over-relying on the skill.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The English description similarly overstates the implemented scope, including long-term prediction, FEBE, extreme-event warning, paleoclimate backtracking, and delayed glaciation testing. This is a true trust and integrity issue because the mismatch can deceive reviewers, users, or agents into over-permitting or over-relying on the skill.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The English description similarly overstates the implemented scope, including long-term prediction, FEBE, extreme-event warning, paleoclimate backtracking, and delayed glaciation testing. This is a true trust and integrity issue because the mismatch can deceive reviewers, users, or agents into over-permitting or over-relying on the skill.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The script prints specific regional disaster impacts and quantified extreme-risk statements that are not derived from any computation in the model. Because this skill presents itself as a forecasting tool, users may mistake these hard-coded claims for model-backed risk assessments, which is dangerous in policy, preparedness, or public-communication contexts.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The final conclusions assert exact attribution such as '100% of the driver' and claim effects on event frequency/intensity that the script never calculates. In the context of a climate-analysis skill, this overclaiming can create false confidence, encouraging users to make decisions based on unsupported causal conclusions.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding
Suspicious Unicode normalization or mixed-script content

Lp3

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding
The skill advertises executable scripts and installation commands but does not declare an explicit tool scope or permissions boundary. In agent environments, this can lead to broader-than-expected file-write or execution access, making it easier for a skill to modify workspace contents or operate outside least-privilege expectations.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The activation keywords are broad and loosely scoped, which can cause the skill to trigger in contexts beyond its intended domain. In an agent setting, overbroad activation increases the chance that an unneeded skill is invoked, potentially running scripts, influencing outputs, or overshadowing safer and more accurate tools.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding
Suspicious Unicode normalization or mixed-script content

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding
Suspicious Unicode normalization or mixed-script content

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding
Suspicious Unicode normalization or mixed-script content

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
This code file contains natural-language instructions, mode descriptions, and runtime messages exclusively in Chinese. Under the policy, forcing a specific language without user opt-in is a language/locale policy violation unless the locale constraint is explicitly justified, which is not present here.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding
Suspicious Unicode normalization or mixed-script content

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This code file contains natural-language descriptions and outputs that force a specific language/locale for all users. Under the policy, language constraints should either be optional for the user or clearly documented as a justified region-specific limitation.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding
Suspicious Unicode normalization or mixed-script content

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The manifest describes long-term climate prediction using coupled precession-obliquity-eccentricity dynamics plus the FEBE equation, near-term projections to 2100 with RCP/SSP scenarios, extreme-event warning, East Asian monsoon prediction, paleoclimate backcasting, and an 'ultimate glacial delay test'. In contrast, this file only implements a simplified La2004-style harmonic calculation of eccentricity, obliquity, precession, Q65 summer insolation, and derived transition points, then saves results to /tmp; none of the broader advertised modeling capabilities appear here.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding
Suspicious Unicode normalization or mixed-script content

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The code claims 'IPCC AR6 standard' CO₂ pathways, but actually uses simple polynomial approximations with hard-coded values. In a climate-prediction skill, this can mislead users into treating the outputs as scientifically authoritative, causing downstream decisions to rely on fabricated or overstated rigor.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This code emits all user-facing results and conclusions in a single fixed language. Under the natural-language policy rules, forcing a specific language without user opt-in is a locale/language policy violation unless the constraint is clearly documented and justified.

Natural-Language Policy Violations

Low
Confidence
92% confidence
Finding
The document is written almost entirely in Chinese, including the title, description, usage guidance, and disclaimer, with no indication that users may choose another language. Under the policy rule, a skill that effectively mandates one language without opt-in can be a natural-language policy violation unless the locale restriction is clearly justified.

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
The manifest description is written entirely in Chinese and presents the skill as-is, with no indication that users can select another language or locale. Under the policy scope for natural-language violations, this can be considered a language preference being imposed without opt-in.

Intent-Code Divergence

Low
Confidence
95% confidence
Finding
The feature heading says '古气候回溯(100 万年)' and the example runs `paleo_full 1000000`, but the manifest description earlier advertises '古气候回溯(10万年冰期模拟)'. This is an intent/documentation inconsistency about what the skill claims to model, which can mislead users about the actual scope.

Natural-Language Policy Violations

Low
Confidence
92% confidence
Finding
SQP-3 applies to all file types and covers natural-language policy violations such as forcing a specific language without user opt-in. This markdown file presents all instructional content in Chinese and does not indicate that the skill is region-specific or that users can choose another language.

Natural-Language Policy Violations

Low
Confidence
92% confidence
Finding
The entire skill content is written in Chinese and does not indicate that language selection is optional or that the skill is intentionally limited to a Chinese-speaking context. Under the policy rule for natural-language violations, forcing a specific language without opt-in can be a locale-policy issue.

Static analysis

No suspicious patterns detected.