Back to skill

Security audit

Auto Proteomics

Security checks for vulnerabilities and agentic risk

Overview

The main proteomics workflow is coherent, but bundled release tooling contains an under-scoped recursive delete path that warrants review before use.

Install only if you need the DDA LFQ processed-table workflow, and avoid running the release helper scripts unless you first review or patch stage_release.py to restrict deletion to a managed staging directory. Use an isolated Python environment and pin PyYAML if setting up the router.

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)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/release/stage_release.py:39
Finding

Unrestricted Recursive Deletion Through User-Controlled Staging Path

Content
View full analysis
argparse.Namespace: parser = argparse.ArgumentParser(description='Stage a clean public release directory') parser.add_argument('--output-dir', default=str(DEFAULT_STAGE_DIR), help='Stage directory path') return parser.parse_args() def main() -> int: args = parse_args() stage_dir = Path(args.output_dir).resolve() patterns = load_patterns(IGNORE_FILE) if stage_dir.exists(): shutil.rmtree(stage_dir) stage_dir.mkdir(parents=True, exist_ok=True) ``` ### Technical Analysis The `--output-dir` argument accepts an arbitrary filesystem path. The supplied path is resolved to an absolute path and recursively deleted with `shutil.rmtree()` if it already exists. Resolving the path does not establish that it is safe. The implementation does not verify that the target is: - Under the intended `dist/release` staging directory. - Distinct from the repository root. - Distinct from the invoking user's home directory. - Distinct from a filesystem root or other sensitive directory. - A directory created by a previous execution of this utility. There is also no confirmation prompt, staging marker, or explicit destructive-operation flag. Consequently, a command-line mistake or attacker-influenced invocation can convert a release-staging operation into arbitrary directory deletion. ### Attack Path 1. An attacker, malicious instruction, or defective automation provides a command such as: ```bash python3 scripts/release/stage_release.py --output-dir /path/to/valuable/directory ``` 2. A user with write permission to that directory executes the command while preparing a release. 3. `Path.resolve()` produces the absolute target but performs no authorization or containment check. 4. Because the tar ...[truncated 963 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
references/RUNTIME_REQUIREMENTS.md:13
Finding

Unpinned Third-Party Dependency Installation

Content
View full analysis
Remediation
View remediation
\ --hash=sha256: ``` The actual version and hashes must be selected from artifacts validated by the project maintainers rather than copied from an unverified source. ]]>
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (22)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The description says this is a public skill for routing and downstream analysis of processed DDA LFQ proteomics inputs, specifically suggesting MaxQuant-style proteinGroups.txt and a clear two-group workflow. The code instead is a standalone DIA-oriented prototype script (workflow: dia-quant) that only accepts a narrow contract family (header-sample-matrix-v1) or alias, validates exact sample-sheet/header conformance, builds a sample-by-feature matrix, computes basic QC, filters by missingness, and produces preview normalization/log2 outputs plus diagnostics. It repeatedly states it is a prototype, internal, not shipped, and does not support differential statistics or biological interpretation. This is a material purpose mismatch, not just an implementation detail.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about proteomics downstream analysis and routing for LFQ protein quantification data, but the supplied code does not perform any data analysis, token routing, or proteomics-specific processing. Instead, it is a release engineering script whose primary purpose is to package files into a distributable .skill archive. This is a materially different purpose from the declared skill behavior, so the description does not accurately represent this code chunk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared purpose describes a proteomics analysis skill for downstream LFQ data processing, but the supplied code does not perform any proteomics analysis, routing, or handling of protein quantification tables. Instead, it validates a packaged skill archive during release by scanning ZIP contents for disallowed residue files. This is a materially different primary purpose and introduces undeclared capabilities related to release packaging and archive inspection.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about proteomics downstream analysis of LFQ protein quantification tables, but the supplied code does not analyze scientific data or implement any workflow related to MaxQuant, proteinGroups.txt, routing, or two-group comparison. Instead, it is a build/release helper script whose primary purpose is to stage a clean release directory by reading ignore patterns and copying files. This is a materially different purpose and includes undeclared filesystem/package staging capabilities.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description promises a downstream analysis skill for processed DDA LFQ proteomics data, aimed at users with protein-level quantification tables and a two-group workflow. The supplied code does not perform that function. It is only a minimal CLI utility that validates an input path, reads a tab-delimited file, and prints basic metadata plus the first row. There is no analysis logic, no statistical workflow, no grouping, no routing behavior, and no meaningful ID mapping beyond selecting a column name for display. This is a material purpose mismatch rather than a minor implementation detail.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description promises a downstream analysis skill for already processed protein-level LFQ tables, focused on two-group analysis. The supplied code does not perform any analysis or routing logic; it merely echoes placeholder text for a DDA identification scaffold and mentions integration with upstream search tools. This is a materially different primary purpose and scope from the declared downstream proteomics analysis skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The mismatch is substantial. The declared description says this is a public skill for downstream analysis of processed DDA LFQ protein quantification inputs like MaxQuant proteinGroups.txt in a two-group workflow. The actual code is a DIA-specific prototype wrapper (dia_quant.sh) that validates one narrow wide-table contract family (header-sample-matrix-v1), builds a quant matrix, and produces basic QC plus preview-only filtering and median-scaling normalization outputs. The script repeatedly states it is a prototype, not publicly shipped, and explicitly says it does not perform scientific normalization or differential statistics. That means its primary purpose and supported inputs differ materially from the declaration.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description promises a concrete proteomics-oriented routing and downstream analysis skill for processed DDA LFQ protein quantification inputs. The supplied code does not implement such functionality. Instead, it merely echoes placeholder text for a multi-omics integration planning scaffold and mentions future route selection. This is a materially different primary purpose and lacks the declared analysis behavior, so it should be flagged as a mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The declared description says the skill is for downstream analysis of processed DDA LFQ proteomics inputs at the protein level (e.g., MaxQuant proteinGroups.txt) in a two-group workflow. The supplied code instead is a minimal shell scaffold explicitly labeled for phosphoproteomics differential work, expects phosphosite tables and related metadata, and only echoes placeholder guidance. This is a material purpose/input mismatch, not just an implementation detail.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared description promises a usable downstream analysis skill for processed DDA LFQ proteomics data, including support for protein-level quantification tables such as MaxQuant proteinGroups.txt and a two-group analysis workflow. The supplied code does not implement such functionality. It merely echoes scaffold messages indicating a future protein enrichment step and expected differential protein list input. This is a materially different and much narrower purpose than the declared end-to-end downstream analysis workflow, so the description does not accurately represent the code.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 101)May include surrounding context.

md
- `SKILL.md`: public entry and release boundary

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest says this skill is for processed DDA LFQ protein-level inputs and a two-group downstream workflow, but this file defines a dia-quant prototype for DIA quantification intake with a separate contract family and explicitly says it should not be described as public support. That is a substantive scope mismatch, not an implementation detail, because the document steers usage toward DIA intake rather than DDA downstream analysis.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file explicitly states the schema is for internal framework development and should not be described as public execution support yet. That contradicts the surrounding skill context, which presents auto-proteomics as a public skill for user-facing use.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest describes a skill for downstream analysis of processed DDA LFQ proteomics inputs such as MaxQuant-style proteinGroups.txt in a clear two-group workflow. This file instead implements a DIA-specific intake/validation pipeline, repeatedly labels the workflow as 'dia-quant', validates a DIA contract family, and produces matrix-building, filtering, and normalization preview outputs without any two-group analysis logic.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill manifest describes a workflow for processed DDA LFQ proteomics inputs and a two-group downstream workflow, but this script is explicitly a DIA quant intake prototype. Its help text, generated reports, and manifest all identify the workflow as "dia-quant" and implement DIA table validation, DIA-specific contract diagnostics, matrix extraction, filtering, and normalization preview rather than the manifest-described DDA LFQ downstream flow.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest promises a downstream workflow for users with processed protein-level quantification tables and implies a clear two-group analysis path. This script instead documents a technical prototype that validates one intake contract, generates QC artifacts, applies prototype filtering, and produces normalization previews while explicitly stating it does not perform differential statistics.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest describes a skill for downstream analysis of processed DDA LFQ proteomics inputs, specifically protein-level quantification tables and a clear two-group workflow. This script instead presents itself as a 'Multi-omics integration planning scaffold' and references proteomics plus transcriptomics/metabolomics integration, which is broader than the declared scope.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest describes a skill for downstream analysis of processed DDA LFQ proteomics inputs where users already have protein-level quantification tables such as MaxQuant-style proteinGroups.txt. This script instead announces a phosphoproteomics differential workflow expecting phosphosite-level inputs and related normalization/metadata, which is a distinct analysis scope from the stated protein-level workflow.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The file header explicitly sets the document context as "English | 中文," and the rest of the file is fully duplicated in those two languages without stating that users may choose another language or opt in to this locale constraint. Under the policy criteria, forcing a specific language/locale without user choice can be a natural-language policy violation unless the constraint is documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The file explicitly states "English | 中文" and then provides both English and Chinese sections, but it does not clarify whether the user may choose a preferred language or how language selection is handled. Because SQP-3 covers language or locale policy violations, this could be interpreted as a policy concern if organizational guidance requires explicit user opt-in for language selection.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

This code creates the output directory structure immediately and later overwrites numerous report, matrix, QC, and manifest files under the user-supplied output path. Although file generation is the script's purpose, there is no explicit warning in the usage/help text that existing contents in the output directory may be created or replaced.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.