Back to skill

Security audit

rxlocal-mcp

Security checks for vulnerabilities and agentic risk

Overview

The skill’s disclosed browser access and read-only safeguards fit its purpose of reading your RxLocal pharmacy account.

Install only if you trust fpx and ContextMint Bridge to handle your pharmacy session and health information. Approve pairing in the intended browser, retain the default RxLocal API destination, and keep raw account output private. The external CLI, extension and separately mentioned MCP server were not included in this review.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (1)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

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

md
RxLocal Patient (PioneerRx / RedSail Technologies) is a single-page app at
`https://patient.rxlocal.com`. There is no public API. Its own `/api/*` backend
is a Keycloak-protected Bearer API: the SPA holds a short-lived access token and
sends it as `Authorization: Bearer …`, a constant `portalid` header (the web
portal's public `patientPortalID`) and, where it has one, an `rxlocaluserid`
header. So every call here reads the live token from the signed-in tab and sends