Back to skill

Security audit

nutrigenomics

Security checks for vulnerabilities and agentic risk

Overview

The skill handles sensitive genetic data, but its local processing, file outputs, and manual cleanup requirements are disclosed and aligned with its nutrigenomics purpose.

Install only in a trusted local environment, review the unpinned Python dependencies if reproducible installs matter, use an intentionally non-identifying input filename, and delete the generated output directory after use because it contains sensitive genotype-derived health information. Treat the recommendations as educational and discuss major diet or supplement changes with a qualified healthcare professional.

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
requirements.txt:4
Finding
Unpinned and Unverified Third-Party Dependencies<![CDATA[ ## Vulnerability Details **File Location**: `requirements.txt:4-7`; installation instruction at `README.md:51-60` **Vulnerability Type**: Dependency supply-chain integrity weakness **Risk Level**: Medium ### Vulnerable Code `requirements.txt:4-7`: ```text pandas>=2.2,<3.0 numpy>=1.26,<3.0 matplotlib>=3.8,<4.0 seaborn>=0.13,<1.0 ``` `README.md:51-60`: ```markdown 2. **Install dependencies**: ```bash pip install -r requirements.txt ``` 3. **Run analysis**: ```bash python openclaw_adapter.py \ ``` ### Technical Analysis The documented installation procedure directs users to install dependencies from the configured Python package index. The requirements specify broad version ranges rather than exact, reviewed versions and do not provide cryptographic hashes. Consequently, two installations at different times can resolve to different package artifacts. If an allowed future package release, dependency of one of these packages, configured package index, or package-distribution account is compromised, the installation may retrieve attacker-controlled code that was not included in this audit. Python packages can execute code during installation or when imported. This project imports these dependencies during figure generation, so a malicious resolved artifact could also execute when an analysis requests visualizations. This finding does not demonstrate that the currently named packages are malicious. It identifies the absence of controls needed to ensure that users install the same reviewed artifacts. ### Attack Path 1. An attacker compromises the publishing account, distribution artifact, transitive dependency, or package index associated with a dependency permitted by the declared version ranges. 2. The attacker publishes a malicious release whose version remains within the accepted range. 3. A user follows the documented `pip install -r requirements.txt` procedure. 4. The resolver selects and downloads the malicious artifact becau ...[truncated 961 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace broad dependency ranges with exact versions selected after review: ```text pandas==<reviewed-version> numpy==<reviewed-version> matplotlib==<reviewed-version> seaborn==<reviewed-version> ``` 2. Generate a lock file containing all transitive dependencies rather than locking only direct dependencies. 3. Record SHA-256 hashes for every permitted distribution and require hash verification during installation: ```bash python -m pip install --require-hashes -r requirements.lock ``` 4. Generate lock files separately for each supported Python version and platform where artifact hashes differ. 5. Use a trusted, explicitly configured package index or an internally controlled artifact mirror. Prevent fallback to untrusted indexes. 6. Add automated dependency vulnerability and provenance checks to the release process. Review all lock-file changes before publication. 7. Preserve the current version ranges only in a human-maintained source dependency file, if desired, while distributing and documenting installation from the fully pinned, hash-verified lock file. 8. Document that figure generation is optional and provide a standard-library-only execution path for environments that do not require plots, reducing unnecessary supply-chain exposure. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (22)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The description strongly emphasizes privacy and local processing, but the skill also states that reports, figures, and reproducibility artifacts persist on disk and include derived genotype information and the input filename. For genetic data, retention of identifiable or quasi-identifiable artifacts is a real privacy risk because those outputs are easy to share, back up, commit, or leave behind on multi-user systems.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The description strongly emphasizes privacy and local processing, but the skill also states that reports, figures, and reproducibility artifacts persist on disk and include derived genotype information and the input filename. For genetic data, retention of identifiable or quasi-identifiable artifacts is a real privacy risk because those outputs are easy to share, back up, commit, or leave behind on multi-user systems.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The description strongly emphasizes privacy and local processing, but the skill also states that reports, figures, and reproducibility artifacts persist on disk and include derived genotype information and the input filename. For genetic data, retention of identifiable or quasi-identifiable artifacts is a real privacy risk because those outputs are easy to share, back up, commit, or leave behind on multi-user systems.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The README encourages users to upload genome files before prominently warning that genetic data is highly sensitive personal data with long-term privacy implications. Even if processing is local, users should be clearly informed up front that raw DNA files can reveal uniquely identifying health and familial information, so the current presentation creates consent and privacy-risk gaps.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The suggested invocation phrase is overly broad and could cause the skill to activate whenever a user mentions a genome or nutrition report, without clear scoping or consent cues. In a skill that handles raw genetic files, accidental invocation increases the chance that highly sensitive biometric/genetic data is requested or processed in contexts where the user did not intend to use this specific tool.

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill declares capabilities to read/write files and invoke Python from the shell, but it does not define an explicit tool scope or permission boundary in the skill manifest. That increases the chance an orchestrator grants broader-than-necessary filesystem or shell access, which is especially sensitive here because the input and outputs contain genetic information.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The trigger phrases include broad health and nutrition terms that could cause the orchestrator to invoke this skill unintentionally for generic questions. Because the skill processes highly sensitive genetic data and writes persistent outputs, accidental routing can expose users to privacy-impacting actions they did not clearly request.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
This file is documented primarily as a random synthetic patient generator for demos, but the optional `--run` path invokes another Python program through `subprocess.run`. Spawning a separate process is a materially broader capability than just generating local demo data and is not inherently required for synthetic CSV creation.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
if args.no_figures:
                cmd.append("--no-figures")
            print(f"[generate_patient] Running: {' '.join(cmd)}")
            subprocess.run(cmd, check=True)


if __name__ == "__main__":
Confidence
70% confidence
Finding
subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Ae4

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

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The report gives individualized genetic-health recommendations, including supplement use, dosage-style targets, and behavior changes, while only providing a broad medical disclaimer. Because the content is derived from highly sensitive genetic data, users may over-trust the output, act without appropriate clinical validation, or misunderstand the uncertainty and limitations of nutrigenomic interpretation.

Skill Enumeration

Medium
Category
Agent Snooping
Content
## References

SNP-nutrient associations sourced from GWAS Catalog, ClinVar, and CPIC guidelines.
Full citations available in `skills/nutrigenomics/SKILL.md`.
Confidence
80% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Skill Enumeration

Medium
Category
Agent Snooping
Content
## References

SNP-nutrient associations sourced from GWAS Catalog, ClinVar, and CPIC guidelines.
Full citations available in `skills/nutrigenomics/SKILL.md`.
Confidence
80% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Ae4

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

Missing User Warnings

Medium
Confidence
90% confidence
Finding
This CLI processes highly sensitive genetic data and then generates a report plus a reproducibility bundle, but the file shown provides no explicit privacy warning, consent prompt, retention notice, or clear disclosure about what artifacts will be written to disk. In the context of nutrigenomics, local processing reduces network exposure, but persisted outputs can still leak uniquely identifying health-related information through shared devices, backups, logs, or accidental directory disclosure.

Intent-Code Divergence

Low
Confidence
98% confidence
Finding
This changelog entry documents that earlier versions persisted the absolute path to a user's genetic input file in reproducibility artifacts despite documentation claiming the opposite. In a genomics skill, leaking local filesystem paths can expose identifying information such as usernames, directory names, project names, or medical/genetic file labels, creating a real privacy issue even though the current file is only documenting a past defect.

Intent-Code Divergence

Low
Confidence
95% confidence
Finding
The entry says the `analyse_file` docstring called the default `output_dir` a temp directory, while the real behavior was creation of a persistent timestamped directory. That is an intent/documentation contradiction about data persistence and cleanup expectations.

Vague Triggers

Low
Confidence
82% confidence
Finding
The README suggests the activation phrase "Generate my personalised nutrition report" without any qualification about required user intent, file upload preconditions, or confirmation before processing highly sensitive genetic data. In an agent ecosystem, a broad trigger can cause the skill to activate too readily from casual conversation, increasing the chance of unintended handling of health/genetic information.

Description-Behavior Mismatch

Low
Confidence
90% confidence
Finding
The adapter writes sensitive derived outputs from genetic data to a persistent directory on disk and explicitly returns the absolute output path, while cleanup is manual only. In a hosted or multi-user OpenClaw environment, this increases the chance of unintended retention, disclosure to other processes/users, backup systems, logs, or operators; genetic-analysis results are especially sensitive health-adjacent data.

Unverifiable Dependency: pandas has 1 known advisory(ies) (CVE-2020-13091 (** DISPUTED ** pandas through 1.0.3 can unserialize and execute commands from an)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Unverifiable Dependency: numpy has 16 known advisory(ies) (CVE-2014-1859 (Numpy arbitrary file write via symlink attack); CVE-2021-41495 (NumPy NULL Pointer Dereference); CVE-2021-33430 (NumPy Buffer Overflow (Disputed)) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding
Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Natural-Language Policy Violations

Low
Confidence
77% confidence
Finding
The comments state the file was generated by 23andMe and refers to the 23andMe service agreement, while also stating the data is for testing only and not real patient data. This mixed provenance language can mislead users about the source and status of the dataset, which is a natural-language quality/policy concern in a data file header.

Static analysis

No suspicious patterns detected.