Back to skill

Security audit

Western Blot Quantifier

Security checks for vulnerabilities and agentic risk

Overview

The skill does not appear to steal data or persist, but its documentation claims real Western blot analysis that the shipped code does not implement.

Review this skill carefully before installing. Its biggest issue is not hidden system access, but that it appears unfinished or misleading for scientific use: it does not actually analyze provided Western blot images as described. Install only in an isolated environment, pin dependencies first, and do not rely on its quantification results until the implementation and documentation are corrected and validated.

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 Third-Party Dependencies Permit Unreviewed Supply-Chain Changes## Vulnerability Details **File Location**: `requirements.txt:1-6` **Related Installation Instructions**: `SKILL.md:112-116` and `SKILL.md:196-200` **Vulnerability Type**: Unpinned third-party dependencies **Risk Level**: Medium ### Vulnerable Code ```text matplotlib numpy opencv-python pandas scikit-image scipy ``` The documented installation command is: ```bash pip install -r requirements.txt ``` ### Technical Analysis All six dependencies are specified without exact versions or integrity hashes. Consequently, each installation resolves whatever package versions are available from the configured package index at that time. The installed code can therefore differ from the dependency set that was originally developed, tested, or audited. Python packages and their installation mechanisms may execute code with the privileges of the user performing the installation. If an upstream package release, distribution artifact, dependency account, or configured package index is compromised, following the documented installation procedure could introduce attacker-controlled code. The absence of hashes also prevents `pip` from verifying that downloaded artifacts match a previously reviewed set. This finding does not establish that any currently named package is malicious. It identifies a reproducibility and supply-chain control weakness that makes future installations dependent on mutable, unverified artifacts. ### Attack Path 1. An attacker compromises an upstream dependency release, its publishing account, its distribution artifact, or a package index used by the installer. 2. The attacker publishes a malicious version under one of the dependency names listed in `requirements.txt`, or causes the configured index to resolve an attacker-controlled artifact. 3. A user follows the documented command `pip install -r requirements.txt`. 4. Because no exact versions or hashes are enforced, `pip` resolves and downloads ...[truncated 860 chars]
Remediation
## Remediation Suggestions 1. Pin every direct dependency to an exact, reviewed version using `==`. 2. Generate and commit a deterministic lock file that includes resolved transitive dependencies. 3. Record cryptographic hashes for all approved artifacts and install with `pip install --require-hashes -r requirements.txt`. 4. Obtain packages only from an explicitly configured, trusted index; avoid dependency resolution against untrusted or mixed public/private sources. 5. Run dependency vulnerability and provenance checks in CI before accepting lock-file updates. 6. Review dependency updates through controlled pull requests and test them before deployment. 7. Install and execute the skill in an isolated virtual environment or sandbox under a non-privileged account with restricted filesystem and network access. 8. Update the installation documentation in `SKILL.md` to reference the locked, hash-verified dependency file.
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
The skill documentation claims automated Western blot quantification, densitometry, and normalization to loading controls, but the described behavior mismatch indicates the implementation may not read the actual image correctly, may use simplistic peak heuristics instead of true densitometric analysis, and may normalize against the wrong control signal. In a scientific analysis context, this can silently produce materially incorrect results that users may trust for research conclusions, making it an integrity and reproducibility risk rather than a classic code-execution issue.

Ae4

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

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The code does not perform true densitometric analysis or normalization to loading controls as described. It simply divides each band's intensity by the first detected band in a selected lane, which can produce scientifically misleading results and cause users to trust invalid quantitative conclusions.

Description-Behavior Mismatch

Medium
Confidence
98% confidence
Finding
The tool advertises automatic image-based Western blot analysis, but the executable path never reads or analyzes the user-supplied --image input and only operates on synthetic demo data. This creates a deceptive mismatch between claimed and actual behavior, which may lead users to rely on nonexistent analysis and make incorrect research or reporting decisions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
matplotlib
numpy
opencv-python
pandas
Confidence
97% confidence
Finding
The dependency list leaves matplotlib unpinned, which makes builds non-reproducible and can allow a future malicious, compromised, or breaking release to be installed unexpectedly. While this file alone does not prove exploitation, unpinned packages are a real supply-chain hygiene weakness because security posture depends on whatever version resolves at install time.

Unpinned Dependencies

Low
Category
Supply Chain
Content
matplotlib
numpy
opencv-python
pandas
scikit-image
Confidence
98% confidence
Finding
numpy is unpinned, so the installed version is uncontrolled and may vary across environments or over time. This creates supply-chain risk and prevents verification that the resolved version is free from known vulnerabilities or incompatible changes.

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
95% confidence
Finding
numpy has known advisories, and because no version is pinned, it is impossible to verify whether the installed release is affected. The danger is contextual rather than proof of compromise: unresolved version ambiguity can silently expose consumers to vulnerable builds.

Unpinned Dependencies

Low
Category
Supply Chain
Content
matplotlib
numpy
opencv-python
pandas
scikit-image
scipy
Confidence
98% confidence
Finding
opencv-python is unpinned, meaning deployments may pull different releases with different security properties. For a package that processes complex image inputs, uncontrolled version selection increases exposure to parser and memory-safety issues in underlying native code.

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
97% confidence
Finding
opencv-python has multiple known advisories, and the absence of a version pin means the environment could resolve to an affected release without visibility. In this skill's context, the package likely handles user-supplied image files, which makes image-decoding vulnerabilities more relevant than in a non-image-processing project.

Unpinned Dependencies

Low
Category
Supply Chain
Content
matplotlib
numpy
opencv-python
pandas
scikit-image
scipy
Confidence
96% confidence
Finding
pandas is unpinned, so dependency resolution may install an arbitrary future or outdated release. That weakens reproducibility and makes it difficult to assure that the package version in use does not contain known defects or security issues.

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
pandas has at least one advisory, and without version pinning there is no way to determine if installations are exposed. The skill description does not strongly suggest risky pandas features like unsafe deserialization are used, so the contextual danger appears limited but still represents poor dependency assurance.

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy
opencv-python
pandas
scikit-image
scipy
Confidence
96% confidence
Finding
scikit-image is unpinned, which permits non-deterministic installs and increases supply-chain uncertainty. In an image-processing skill, this matters because image parsing libraries can be affected by input-triggered vulnerabilities, and version ambiguity prevents meaningful risk verification.

Unpinned Dependencies

Low
Category
Supply Chain
Content
opencv-python
pandas
scikit-image
scipy
Confidence
96% confidence
Finding
scipy is unpinned, so the runtime may receive any resolver-selected release, including versions with known issues or incompatible behavior. This is a real but low-severity supply-chain control weakness rather than an immediately exploitable flaw by itself.

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
91% confidence
Finding
scipy has known advisories, and the missing version pin prevents verifying whether deployed versions are vulnerable. This is primarily a dependency governance issue; exploitability depends on whether affected components are actually used, which is not shown here.

Static analysis

No suspicious patterns detected.