Back to skill

Security audit

nutrigenomics

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed local genetic-nutrition report generator; it handles sensitive DNA data and leaves local outputs, but I found no hidden data transmission or purpose-mismatched behavior.

Use this only with genetic files you intend to analyze in the local skill environment. The generated report contains genotype calls and health-related inferences, and the output directory remains on disk until deleted; avoid shared or synced folders, review results with a qualified clinician, and prefer an isolated Python environment with reviewed dependencies.

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

Unverified and Mutably Resolved Third-Party Dependencies

Content
View full analysis
=2.2,<3.0 numpy>=1.26,<3.0 matplotlib>=3.8,<4.0 seaborn>=0.13,<1.0 ``` `README.md:52-59`: ```markdown 1. **Clone this repository**: ```bash git clone https://github.com/drdaviddelorenzo/nutrigenomics.git cd nutrigenomics ``` 2. **Install dependencies**: ```bash pip install -r requirements.txt ``` `repro_bundle.py:25-34`: ```python CONDA_ENV = """name: nutrigenomics channels: - conda-forge - defaults dependencies: - python=3.11 - pandas>=2.2,<3.0 - numpy>=1.26,<3.0 - matplotlib>=3.8,<4.0 - seaborn>=0.13,<1.0 """ ``` `repro_bundle.py:101-103`: ```python 1. Install the conda environment: conda env create -f environment.yml conda activate nutrigenomics ``` `openclaw.json:91-98`: ```json "packages": [ "pandas>=2.2,<3.0", "numpy>=1.26,<3.0", "matplotlib>=3.8,<4.0", "seaborn>=0.13,<1.0" ] ``` ### Technical Analysis The installation workflows allow pip or Conda to select any package release satisfying broad version ranges. The project does not provide cryptographic artifact hashes, exact package builds, or a reviewed lock file. Consequently, the dependency artifacts installed in the future may differ from those reviewed during this audit. The generated Conda environment also mixes the `conda-forge` and `defaults` channels without declaring strict channel priority or exact builds. This increases the variability of dependency resolution and may expose users to channel-priority or dependency-confusion scenarios. The listed packages are established packages from conventional repositories, and the re ...[truncated 2343 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (24)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The described purpose is local nutrigenomics analysis, but the finding indicates the code can also generate synthetic genetic data and invoke another script via subprocess. Description-behavior mismatches are dangerous because operators may approve the skill for a narrow health-analysis use case while the implementation has broader execution behavior than expected, especially where sensitive genetic data and shell execution are involved.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The described purpose is local nutrigenomics analysis, but the finding indicates the code can also generate synthetic genetic data and invoke another script via subprocess. Description-behavior mismatches are dangerous because operators may approve the skill for a narrow health-analysis use case while the implementation has broader execution behavior than expected, especially where sensitive genetic data and shell execution are involved.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The described purpose is local nutrigenomics analysis, but the finding indicates the code can also generate synthetic genetic data and invoke another script via subprocess. Description-behavior mismatches are dangerous because operators may approve the skill for a narrow health-analysis use case while the implementation has broader execution behavior than expected, especially where sensitive genetic data and shell execution are involved.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

These lines explicitly state that provenance.json, README_reproducibility.txt, and code documentation claimed that input file name/path were not recorded, while the implementation actually wrote the full argument namespace including the absolute input path. That is a direct contradiction between documented privacy guarantees and actual behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

The changelog section describes a consumer-facing genetic analysis skill and emphasizes local/privacy properties, but the surrounding historical context in this file shows repeated inaccuracies and omissions about what sensitive data generated outputs contain and persist. In a genetics context, insufficiently prominent privacy warnings are materially risky because reports and output bundles can include genotype-derived data and may be handled by non-expert users who assume 'local processing' means no sensitive persistence.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file tells users to upload raw genome files, which are highly sensitive personal data, but the invocation instructions do not warn users about the sensitivity of the material they are about to provide. Although later sections discuss privacy and medical disclaimers, there is no upfront disclosure near the upload step advising caution before sharing genetic data with the skill.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
85% confidence
Finding

The skill declares shell, file read, and file write capabilities but does not define an explicit permission or allowed-tools scope in the manifest. In a health/genetic-data skill, missing tool scoping increases the chance that an orchestrator grants broader-than-necessary access, enabling unnecessary filesystem or command execution around highly sensitive data.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · examples/generate_patient.py (reported line 277)May include surrounding context.

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


if __name__ == "__main__":

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The report provides individualized health and supplement guidance derived from genetic markers, including dosage-style or target-style recommendations such as maintaining 25(OH)D above a threshold and advising D3+K2 supplementation. Although there is a general disclaimer, it does not adequately warn about the limitations of nutrigenomic inference, uncertainty of SNP associations, or the risks of acting on supplement advice without clinical oversight, which can lead to harmful self-treatment or misuse of sensitive genetic information.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest describes a skill that generates a personalised nutrition report analyzing genes/SNPs across nutrient domains, but this output also includes a dedicated supplement interaction section and instructions referencing generated reproducibility files. Those are additional deliverables and advisory content not reflected in the manifest’s stated scope.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
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.

Content

Scanner excerpt · examples/output/nutrigx_report.md (reported line 270)May include surrounding context.

md
## References

SNP-nutrient associations sourced from GWAS Catalog, ClinVar, and CPIC guidelines.
Full citations available in `skills/nutrigenomics/SKILL.md`.

Skill Enumeration

Medium
Category
Agent Snooping
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.

Content

Scanner excerpt · generate_report.py (reported line 280)May include surrounding context.

python
## References

SNP-nutrient associations sourced from GWAS Catalog, ClinVar, and CPIC guidelines.
Full citations available in `skills/nutrigenomics/SKILL.md`.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

This code writes a nutrigenomics report and associated figures derived from genetic data to disk automatically, which creates a privacy risk because highly sensitive health/genetic inferences may persist on shared machines, backups, sync folders, or logs without an explicit warning or consent step in this code path. While the skill description says processing is local, local persistence of sensitive outputs is still exposure if users are not clearly informed and given control over storage location and retention.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This JSON manifest describes the skill's purpose and capabilities but does not define any explicit trigger phrases, invocation scope, or exclusion conditions. For manifest files, the absence of specific activation constraints can make it unclear when the skill should activate versus when a general health or nutrition request should not invoke it.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The adapter explicitly creates persistent output directories and writes reports plus a reproducibility bundle derived from highly sensitive genetic data, while the skill metadata promises processing stays local and implies stronger privacy expectations. Even if data never leaves the device, retaining genome-derived artifacts on disk increases exposure to other local users, backups, indexing, or later compromise.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The code creates persistent storage for genetic-analysis results before any user-facing warning or consent flow about retention of sensitive health/genome-derived data. In this skill context, that is more dangerous because users are likely to assume privacy-preserving local processing means transient handling, not durable report and bundle creation that survives until manual deletion.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The changelog says openclaw_adapter.py had a docstring describing the default output_dir as a temp directory, but the code actually created a persistent timestamped directory under the working directory. That is a direct docstring-versus-behavior contradiction affecting data persistence expectations.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document is framed as a personalised nutrition report, yet the input line explicitly says the report was generated from fixed synthetic data. This is a direct intent/documentation mismatch within the artifact because it presents itself as a user-facing personalised report while acknowledging it is a demo run.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

Returning the absolute output directory path reveals local filesystem layout information that is not necessary for most consumers of the API and may expose usernames, mount points, or application storage conventions. By itself this is limited, but in a multi-tenant or chained-attack scenario it can aid local reconnaissance around where sensitive genome reports are stored.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

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.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

This CSV includes human-readable header text, so natural-language policy review applies. The phrase 'your 23andMe Personal Genome Service® Agreement' addresses the reader as if they are an actual customer, which is inconsistent with a synthetic test-data artifact and may impose a real-user context without justification.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.