Back to skill

Security audit

Western Blot Quantifier

Security checks for vulnerabilities and agentic risk

Overview

This skill is not malware, but it materially overstates its Western blot analysis capability and installs broad unpinned dependencies, so users should review it carefully before use.

Install only in an isolated virtual environment or container, and do not rely on this skill for scientific Western blot quantification until the implementation actually reads real images, validates inputs, performs documented normalization, exports documented results, and uses pinned audited 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:1
Finding

Unpinned and Excessive Third-Party Dependencies

Content
View full analysis

Vulnerability Details

File Location: requirements.txt:1-6
Vulnerability Type: Unpinned third-party dependencies and unnecessarily broad supply-chain exposure
Risk Level: Medium

Vulnerable Code

text
matplotlib
numpy
opencv-python
pandas
scikit-image
scipy

The installation instructions in SKILL.md:168 and SKILL.md:258 direct users to install these dependencies:

text
pip install -r requirements.txt

Technical Analysis

All six packages are specified without exact versions or integrity hashes. Consequently, installation resolves whatever distributions currently satisfy these unrestricted names through the user's configured Python package index. The resulting environment is not reproducible and may receive newly compromised, malicious, or incompatible releases without any source-code change or renewed audit of this project.

The executable implementation imports only NumPy at scripts/main.py:8. The other five direct dependencies are unused by the reviewed code, unnecessarily expanding the package-installation and native-binary attack surface. Several listed packages commonly distribute compiled components, increasing the consequences of installing an untrusted artifact.

This is a supply-chain weakness rather than evidence that any listed package is currently malicious. The audited files do not specify an untrusted index, dependency-confusion package, or typosquatted name.

Attack Path

  1. A user follows the documented installation procedure and runs pip install -r requirements.txt.
  2. pip queries the package index configured in the user's environment.
  3. Because versions and hashes are unrestricted, pip selects currently available matching distributions rather than previously reviewed artifacts.
  4. If a selected release or package-index response has been compromised, the malicious distribution is downloaded and installed.
  5. Malicious installation behavior ...[truncated 755 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove matplotlib, opencv-python, pandas, scikit-image, and scipy unless corresponding reviewed functionality is implemented and requires them.
  2. Pin every necessary direct and transitive dependency to an exact, reviewed version.
  3. Generate and verify cryptographic hashes for every accepted distribution, then install with pip --require-hashes.
  4. Use a lock file produced by a dependency-management tool and commit it for reproducible installations.
  5. Configure a trusted package index or controlled internal mirror rather than relying on arbitrary environment-specific indexes.
  6. Scan locked dependencies for known vulnerabilities and repeat the review before updating versions.
  7. Perform installation and execution in an isolated, non-privileged virtual environment or container.
  8. Separate optional image-processing and visualization packages into extras so users do not install unnecessary components.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (14)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

This skill claims scientifically meaningful Western blot quantification, but the described implementation appears insufficient to perform the advertised analysis correctly. A misleading analytical skill can produce false quantitative results that users may trust for research or decision-making, creating integrity and downstream safety risks even without classic code-execution abuse.

Content

No source excerpt is available for this finding.

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.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill claims normalized densitometric analysis relative to loading controls, but the implementation only divides every band intensity by the first detected band in the designated control lane. This can produce scientifically misleading results because it does not match target bands to loading controls, does not handle multiple bands per lane correctly, and can cause users to trust invalid normalization in research or reporting workflows.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The advertised skill behavior says it automatically identifies bands from a provided image, but the executable path never processes the --image input and only operates on synthetic demo data. This is dangerous because users may believe the tool analyzed real experimental data when it did not, leading to silent failure, incorrect conclusions, and misuse in scientific decision-making.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency list leaves matplotlib unpinned, which makes builds non-reproducible and allows future installs to pull in unexpected or vulnerable releases. While this file alone does not prove exploitation, lack of version pinning weakens supply-chain control and can expose deployments to dependency breakage or known flaws.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
matplotlib
numpy
opencv-python
pandas

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
98% confidence
Finding

numpy is unpinned, so installations may resolve to different versions over time, including versions with known defects or security advisories. This creates a software supply-chain risk and undermines reproducibility for the skill.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
matplotlib
numpy
opencv-python
pandas
scikit-image

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
92% confidence
Finding

The manifest does not pin numpy, so it is impossible to verify whether the installed version avoids the known advisories listed by the scanner. In practice this is a real supply-chain hygiene issue: the environment may resolve to a vulnerable release, and there is no manifest-level assurance otherwise.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
98% confidence
Finding

opencv-python is unpinned, which is more concerning than some pure-Python packages because it processes complex binary image data and has had memory-safety issues historically. An unconstrained install could bring in a vulnerable or incompatible build, increasing attack surface when handling untrusted images.

Content

Scanner excerpt · requirements.txt (reported line 3)May include surrounding context.

text
matplotlib
numpy
opencv-python
pandas
scikit-image
scipy

Unverifiable Dependency: opencv-python has 16 known advisory(ies) (CVE-2017-12864 (Integer Overflow or Wraparound in OpenCV); CVE-2017-12598 (Out-of-bounds Read in OpenCV ); CVE-2019-14493 (NULL Pointer Dereference in OpenCV.) +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
95% confidence
Finding

opencv-python has known advisories and is not pinned, so the deployment could resolve to a vulnerable OpenCV build without visibility. Given this skill processes image inputs, parser and memory-safety issues in OpenCV are more relevant and potentially more dangerous than generic library drift.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

pandas is unpinned, allowing dependency resolution to vary across environments and over time. This can introduce vulnerable or unexpected versions and makes the deployment harder to audit and reproduce.

Content

Scanner excerpt · requirements.txt (reported line 4)May include surrounding context.

text
matplotlib
numpy
opencv-python
pandas
scikit-image
scipy

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
88% confidence
Finding

Because pandas is unpinned, the manifest cannot demonstrate whether a safe release is being installed with respect to the known advisory. This is a weaker direct risk than OpenCV in this context, but it still represents unverifiable dependency exposure and poor supply-chain control.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

scikit-image is unpinned, so the package version can drift and pull in unreviewed code changes during installation. In an image-processing skill, that increases supply-chain uncertainty and may expose the system to parser-related vulnerabilities indirectly through transitive components.

Content

Scanner excerpt · requirements.txt (reported line 5)May include surrounding context.

text
numpy
opencv-python
pandas
scikit-image
scipy

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

scipy is unpinned, which creates the same reproducibility and supply-chain risks as other unpinned dependencies. Because scipy includes compiled components, version drift can also introduce binary-level bugs or vulnerable builds more abruptly than expected.

Content

Scanner excerpt · requirements.txt (reported line 6)May include surrounding context.

text
opencv-python
pandas
scikit-image
scipy

Unverifiable Dependency: scipy has 4 known advisory(ies) (CVE-2013-4251 (SciPy creates insecure temporary directories); CVE-2013-4251 (The scipy.weave component in SciPy before 0.12.1 creates insecure temporary dire); CVE-2023-25399 (A refcounting issue which leads to potential memory leak was discovered in scipy) +1 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

scipy has known advisories, and without a pinned version there is no way to know from this manifest whether installs are affected. This creates avoidable uncertainty in a scientific-computing package with compiled components and historical security issues.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.