Back to skill

Security audit

morrisons

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its grocery-shopping purpose, but it can make real account changes, delete lists, use stored credentials, and send delivery-slot details to WhatsApp with weak opt-in and confirmation controls.

Review this skill carefully before installing. It is not obviously malicious, but it can alter a real Morrisons account, reserve delivery slots, delete shopping lists, add products to the basket, store or use reusable login state, and send delivery timing details through WhatsApp. Install only if you are comfortable with those actions, configure a Morrisons-specific WhatsApp target or disable messaging where possible, protect the credential/session files, and manually confirm destructive or purchase-adjacent actions before asking an agent to run them.

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 (2)

other

Warning
Location
morrisons-action.ts:2018
Finding

Automatic Disclosure of Delivery-Slot Metadata to an Implicit WhatsApp Recipient

Content
View full analysis
0) { return allowFrom[0]; } } } catch (err) {} return ''; } ``` ```ts function sendWhatsAppMessage(message: string) { const target = getWhatsAppTarget(); if (!target) { console.log('ℹ️ No WhatsApp target configured (set MORRISONS_GROUP_TARGET or WHATSAPP_TARGET). Skipping notification.'); return; } console.log(`Sending WhatsApp message to ${target}...`); try { const res = spawnSync('openclaw', [ 'message', 'send', '--channel', 'whatsapp', '--target', target, '--message', message ], { encoding: 'utf-8' }); if (res.status !== 0) { console.error('Failed to send WhatsApp message. Error output:', res.stderr); } else { console.log('WhatsApp message sent successfully.'); } } catch (err: any) { console.error('Failed to send WhatsApp message:', err.message); } } ``` ```ts if (success) { sendWhatsAppMessage( `🛒 *Morrisons Slot Booked!*\n\n` + `You have successfully reserved the slot: *${date}* at *${time}*.\n` + `⚠️ *IMPORTANT:* You only have *1 hour* to checkout, otherwise it will e ...[truncated 2007 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
morrisons-action.ts:1913
Finding

Credentials and Reusable Session Cookies Are Stored or Accepted Through Insecure Local Mechanisms

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (11)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The documented purpose is grocery shopping automation, but the skill also performs out-of-band actions including WhatsApp messaging and detached delayed follow-up processes. Hidden or under-disclosed secondary behaviors are dangerous because they can exfiltrate shopping/account context to third parties, continue acting after the original command ends, and surprise users with persistent automation they did not knowingly authorize.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

Booking a delivery slot is a real account-changing action with time-sensitive consequences, and this code executes it directly without a pre-action confirmation barrier. In this skill, successful booking also triggers external WhatsApp notifications and background follow-up scheduling, which compounds the impact of an accidental or malicious invocation.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

Deleting a shopping list is destructive and irreversible from the user's perspective, yet the code performs the mutation immediately after resolving a possibly fuzzy identifier. In a household shopping context, deleting the wrong list can disrupt planned purchases and shared workflows, especially where list names may be similar.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill documents capabilities that require environment access and networked automation, but it does not declare any tool scope or allowed-tools boundaries. This weakens least-privilege controls and makes it harder for users or a host platform to understand and constrain what the skill may access, increasing the risk of unintended data exposure or unauthorized external actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill exposes destructive deletion of shopping lists without warning, confirmation guidance, or mention of reversibility. In a commerce context, this can cause loss of curated shopping data and disrupt ordering workflows through accidental invocation or ambiguous list targeting.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Booking a delivery slot is a state-changing operation with downstream side effects, and the documentation does not prominently warn that it will reserve inventory/availability and trigger follow-up checkout reminders. In this context, that can create unintended reservations, fees, notification spam, or confusion if a user expected a read-only availability check.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill includes outbound WhatsApp messaging and delayed follow-up reminders, which extends it beyond straightforward grocery-site automation into unsolicited external communications. In this context, booking a delivery slot triggers notifications and a background reminder flow that may contact a WhatsApp target derived from local configuration, creating scope creep and a risk of unintended disclosure or user surprise.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill launches external subprocesses (openclaw message send and a detached bun process) that are not necessary for basic site automation and increase the trust boundary. This can lead to unreviewed side effects, persistence-like behavior through detached execution, and dependence on ambient local tooling and configuration outside the declared grocery workflow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The code automatically loads credentials from a local file and uses them to log in when session state is missing, without an inline user warning or consent checkpoint. In an agent-skill setting, silent credential use is risky because it performs account access using ambient secrets rather than an explicit authentication step initiated and understood by the user.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This function performs real basket modifications by adding products to the user's trolley based on search matching, without a confirmation step before committing the change. Because matching is heuristic and may select approximate products from top results, the absence of confirmation can cause unintended purchases or order manipulation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
75% confidence
Finding

The code performs full CRUD operations on shopping lists, including deletion, via GraphQL mutations. While 'managing shopping lists' broadly covers some modification, destructive list deletion and renaming are materially more powerful than simple viewing or adding items and are not spelled out in the manifest description.

Content

No source excerpt is available for this finding.