Back to skill

Security audit

Pharma Intelligence

Security checks for vulnerabilities and agentic risk

Overview

This looks like a real pharma-research skill bundle, but several helper scripts are overbroad enough that users should review it before installing.

Review before installing in sensitive environments. Use it only in a sandboxed agent runtime with limited filesystem write access and no access to internal network services. Keep requests to the documented public biomedical sources, avoid untrusted use of base_url, path, query_path, and raw_output_path, and do not run it where prompts or retrieved content can steer tool inputs without user oversight.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
skills/chembl-skill/scripts/rest_request.py:63
Finding

Unrestricted HTTP Client Enables SSRF and Arbitrary Data Transmission

Content
View full analysis
str: if path.startswith(("http://", "https://")): return path return base_url.rstrip("/") + "/" + path.lstrip("/") ``` ```python def parse_input(payload: Any) -> dict[str, Any]: if not isinstance(payload, dict): raise ValueError("Input must be one JSON object.") base_url = _require_str("base_url", payload.get("base_url"), required=True) path = _require_str("path", payload.get("path"), required=True) method = (_require_str("method", payload.get("method")) or "GET").upper() if method not in {"GET", "POST"}: raise ValueError("`method` must be GET or POST.") json_body = payload.get("json_body") form_body = payload.get("form_body") if json_body is not None and form_body is not None: raise ValueError("Provide only one of `json_body` or `form_body`.") response_format = ( _require_str("response_format", payload.get("response_format")) or "auto" ).lower() if response_format not in {"auto", "json", "text"}: r ...[truncated 3943 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
skills/chembl-skill/scripts/rest_request.py:137
Finding

Caller-Controlled Raw Output Path Enables Arbitrary File Overwrite

Content
View full analysis
str: path = Path(raw_output_path or f"/tmp/{_service_name(base_url)}-raw.{suffix}") path.parent.mkdir(parents=True, exist_ok=True) path.write_text(raw_output, encoding="utf-8") return str(path) ``` ClinicalTrials implementation: ```python def _save_raw(data: Any, raw_output_path: s ...[truncated 2456 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
skills/gnomad-graphql-skill/scripts/gnomad_graphql.py:66
Finding

Arbitrary Local File Read Is Transmitted as a GraphQL Query

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (130)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The supplied code does not implement a pharmaceutical intelligence skill. It is a generic HTTP requester utility that can call arbitrary REST endpoints and lightly format the response. While such a helper could support a pharma-focused skill, this code chunk itself contains no domain-specific data sources, search logic, evidence synthesis, biomedical analysis, or region-specific handling. It also exposes broader undeclared capability by allowing arbitrary outbound requests to user-specified URLs and optional raw-output file writing. Therefore the declared description materially overstates and misrepresents what the code actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The code chunk is a generic HTTP client wrapper, not a pharmaceutical intelligence or biomedical research skill. Its primary purpose is to send configurable REST requests, parse JSON/text responses, optionally extract records by path, compact output, and save raw results locally. There is no evidence of pharma-specific endpoints, data models, search workflows, synthesis logic, target discovery, clinical trial analysis, patent analysis, or regional regulatory intelligence. This is a substantial description-behavior mismatch because the declared purpose is highly domain-specific while the actual code is infrastructure-level and domain-agnostic.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description presents a domain-specific pharmaceutical intelligence and synthesis capability, implying specialized biomedical search/analysis across regulatory and scientific sources. The supplied code does not implement any pharma-specific search, synthesis, target discovery, clinical evidence review, patent analysis, or bioactivity analysis. Instead, it is a reusable generic REST request utility that can call any HTTP endpoint with configurable headers, params, and bodies, parse JSON/text, and optionally persist raw outputs. This is a materially different primary purpose and exposes undeclared generic network-access capability. While such a client could support a pharma skill as an internal helper, this code chunk by itself does not accurately represent the declared end-user functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a comprehensive pharma/biomedical intelligence capability spanning many domains and regions, including regulatory status, patents, targets, genetics, and compound bioactivity. The supplied code instead implements a simple HTTP client for ClinicalTrials.gov v2 endpoints such as studies, metadata, enums, search areas, and stats. While clinical trial retrieval is one subset of the declared scope, the code does not support the vast majority of the claimed functions or regional coverage, and it relies solely on the ClinicalTrials.gov API. Therefore the description materially overstates and misrepresents the actual behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

There is a clear description-behavior mismatch. The declared purpose presents a comprehensive pharma intelligence skill for drug, clinical, regulatory, pipeline, and target research across multiple geographies. The supplied code instead implements a focused utility for querying ClinVar and NCBI Variation endpoints about genetic variants and identifiers (search, VCV, RCV, SCV, RefSNP). While the description briefly mentions genetic associations, that is only a minor overlap; the actual code does not support the broad set of declared use cases and has a materially different primary purpose and resource set.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The description presents a domain-specific pharmaceutical intelligence and analysis skill, but the supplied code is only a generic HTTP client utility. It does not contain pharma-specific logic, source selection, ontology/search behavior, evidence synthesis, region-specific handling, target discovery, or bioactivity analysis. Instead, it enables arbitrary REST requests with configurable headers and bodies, response parsing, and optional raw-output persistence. This is a materially different primary purpose and exposes broader network/file-handling capabilities than the description suggests.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a domain-specific pharmaceutical research and synthesis capability covering approvals, trials, regulatory and scientific evidence across multiple regions. The supplied code does not implement any pharma-specific logic, source selection, search strategy, synthesis, target discovery, repurposing, or evidence analysis. Instead, it is a reusable, domain-agnostic HTTP client for arbitrary REST endpoints with basic formatting of responses. This is a materially different primary purpose and includes undeclared generic network access and raw-output file saving. Therefore the description does not accurately represent the code's actual behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a wide-ranging pharma intelligence skill covering approvals, trials, submissions, pipeline assets, patents, competitive intelligence, target discovery, clinical evidence, and bioactivity across multiple regions. The supplied code does something much narrower and different: it is a generic client for the gnomAD GraphQL API at gnomad.broadinstitute.org, handling request execution, input validation, response summarization, and optional file I/O. While gnomAD may relate loosely to genetic associations, the code does not contain domain-specific workflows for the declared pharma/regulatory use cases, nor any multi-region intelligence aggregation or synthesis. Its primary purpose and accessed resource are materially different from the description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description presents a domain-specific pharmaceutical intelligence skill focused on drug approvals, trials, targets, evidence review, and related biomedical analysis across regions. However, the supplied code is a generic REST request wrapper with no built-in pharmaceutical logic, no fixed data sources, no search/synthesis workflow, and no domain constraints. Its primary purpose is to fetch arbitrary HTTP resources and compact responses. That is a materially different purpose and includes undeclared broad network-access capability. This is not merely implementation detail: the code exposes a reusable general API client, whereas the description claims a specialized pharma research skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description claims a comprehensive pharmaceutical intelligence skill spanning approvals, trials, regulatory submissions, pipelines, patents, competitive intelligence, target/genetic associations, and bioactivity across multiple regions. The supplied code does something much narrower: it sends a GET request to the NCBI Gene Clinical Tables endpoint, validates input, returns the response in compacted form, and optionally writes the raw JSON to disk. Its primary purpose is gene lookup/search, not broad pharma intelligence or multi-region evidence synthesis. This is a material purpose mismatch. Additionally, the optional file-writing behavior is not reflected in the declared permissions/capabilities.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a broad pharmaceutical intelligence and synthesis capability across approvals, clinical trials, regulatory submissions, pipeline assets, patents, competitive intelligence, target discovery, genetics, and bioactivity, with explicit regional coverage. The supplied code does none of that directly. It is a thin wrapper around NCBI Entrez E-Utilities, providing request execution, response parsing, record extraction, and optional raw response saving. While NCBI can support some biomedical literature/database retrieval, this code itself is only a generic retrieval helper and lacks the specialized domain logic, source integration, regional regulatory coverage, synthesis, or analysis implied by the description. Therefore the description materially overstates and misrepresents the actual behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a comprehensive pharmaceutical intelligence capability spanning multiple regions and many research tasks such as approvals, trials, patents, targets, and bioactivity. The provided code does none of that. It is a compact utility focused solely on sending a GET request to the NCBI PMC Open Access endpoint, parsing the XML response, compacting the result, and optionally saving the raw XML. While PMC articles may support literature review in a limited sense, this script by itself does not conduct the broad searches, synthesis, regional coverage, or domain-specific analyses claimed. The primary purpose is therefore materially different from the declared description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description claims a comprehensive pharma intelligence skill for many domains and jurisdictions, but the code implements only a specific Open Targets disease-association retrieval script. Its primary purpose is to fetch associated disease rows and datasource scores for a target from the Open Targets API and format them as a matrix/heatmap. That is only a small subset of the declared target-discovery/genetic-association space and does not support the broad drug/regulatory/clinical/patent/competitive-intelligence functions described. Additionally, the script can write raw output to disk, which is an undeclared capability. Therefore the declared description materially overstates and misrepresents the actual behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description promises a broad, source-grounded pharma intelligence skill spanning many domains and regions, including approvals, trials, submissions, patents, pipeline assets, competitive intelligence, clinical evidence, and bioactivity. The supplied code does not implement that broad workflow. Instead, it is a generic wrapper around a single endpoint: the Open Targets GraphQL API. It validates input, accepts either inline GraphQL or a local query file, posts the query with variables, optionally writes raw JSON output to disk, and returns a compacted summary. While Open Targets is relevant to targets/genetics and possibly some drug/indication associations, this code alone does not provide the claimed multi-region coverage or the wide range of intelligence functions described. Its primary behavior is narrower and materially different from the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a domain-specific pharmaceutical intelligence capability covering approvals, trials, regulatory intelligence, target discovery, bioactivity, and multi-region evidence synthesis. The supplied code does not implement any of that domain functionality. Instead, it is a reusable generic REST wrapper for making GET/POST requests to arbitrary endpoints, parsing JSON or text, extracting record paths, and optionally writing raw output to /tmp. This is a materially different primary purpose and grants undeclared general network-access capability beyond a specialized pharma research skill.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

This code does not implement pharma intelligence, drug repurposing, target discovery, clinical evidence review, or any biomedical analysis workflow. Instead, it is a domain-agnostic HTTP utility for making arbitrary REST requests and lightly summarizing responses. That is a materially different primary purpose from the declared description. The ability to contact arbitrary services with caller-supplied URLs and headers is also an undeclared capability inconsistent with a specialized pharma research skill. While such a client could be used as infrastructure for a pharma skill, the supplied code chunk itself contains no domain-specific data sources, search logic, synthesis, or analysis tied to pharmaceutical intelligence.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises a domain-specific pharmaceutical intelligence and evidence synthesis capability focused on approvals, trials, regulatory data, targets, and bioactivity across regions. The supplied code does not implement pharma-specific logic, biomedical analysis, evidence synthesis, target discovery, or any region-specific data handling. Instead, it is a generic compact REST requester that can call essentially any HTTP endpoint using configurable URLs, headers, params, and bodies, then summarize the response. This is a materially different primary purpose and includes undeclared generic network access and file-saving behavior. While such a client could support a pharma skill, this code chunk itself does not substantiate the declared specialized functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The code does not contain any pharmaceutical-domain logic, data-source selection, search/synthesis workflow, regional intelligence handling, target discovery, clinical evidence review, or bioactivity analysis. Instead, it is a reusable low-level REST request utility for arbitrary services. Its primary purpose is materially different from the declared description: generic network access and response handling versus specialized pharma intelligence. The ability to contact any base_url and save raw output are also undeclared capabilities not implied by the description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description presents a domain-specific pharmaceutical intelligence and synthesis skill, implying specialized biomedical search, analysis, and evidence gathering across multiple regulatory regions. The supplied code, however, is only a generic HTTP client utility. It contains no pharma-specific endpoints, source integrations, search logic, ontology handling, synthesis routines, or analysis functions tied to drugs, targets, clinical trials, approvals, patents, or bioactivity. Its primary purpose is materially different: making arbitrary REST requests and formatting the response. That is an implementation utility, not the declared end-user skill behavior. Therefore the description does not accurately represent what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description presents a domain-specific pharmaceutical intelligence and analysis skill, but the code implements only a reusable generic HTTP request wrapper. It does not contain any pharma-specific data source integrations, search logic, synthesis workflows, target discovery methods, clinical evidence review, or bioactivity analysis. Instead, it can call arbitrary REST endpoints with caller-supplied URLs and headers, making its actual capability much broader and materially different from the declared purpose. The optional raw output file writing is also undeclared. This is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description presents a specialized pharmaceutical intelligence and analysis skill. The supplied code does not implement any pharma-specific search, source selection, synthesis, target discovery, clinical review, or bioactivity analysis. Instead, it is a reusable generic REST request wrapper for arbitrary APIs, with support for custom URLs, headers, parameters, GET/POST methods, response parsing, record extraction, and raw output saving. This is a materially different primary purpose and exposes broader network-access capability than the description suggests.

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 28)May include surrounding context.

md
Read the relevant sub-skill's `SKILL.md` before invoking it, then run its bundled script.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill’s declared behavior is limited to EFO ontology lookups against OLS4, but the surrounding manifest context claims much broader pharmaceutical intelligence capabilities. This scope mismatch can cause an orchestrator or user to rely on the skill for regulatory, clinical, pipeline, or competitive-intelligence tasks it cannot actually perform, leading to unsafe over-trust, incorrect decisions, and possible omission of necessary evidence gathering.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

This code gives the caller direct control over where raw output is written on disk via raw_output_path, with automatic directory creation. In an agent environment, that is a strong arbitrary file write primitive that can be abused to tamper with local state, corrupt configuration, or drop attacker-chosen content for later consumption by other components.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill content defines a QuickGO-only ontology lookup tool, but the declared metadata says the skill is for broad pharmaceutical intelligence across approvals, trials, patents, targets, and regional regulatory research. This scope mismatch can cause the agent to route sensitive pharma queries to an incapable skill, leading to incorrect tool use, missing evidence, or fabricated answers when users expect comprehensive, source-grounded analysis.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.