Back to skill

Security audit

MTA Commuter

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent NYC transit helper, but it asks agents to store sensitive home/work locations and create recurring background track-watch jobs without enough scoping, cancellation, or privacy controls.

Install only if you are comfortable with the agent saving precise personal locations locally and creating recurring track-watch cron jobs. Before using saved locations or track watches, ask for explicit confirmation, keep addresses minimal, review or delete data/locations.json when no longer needed, and verify/cancel any openclaw cron jobs after the notification window passes.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unpinned Automatically Installed Dependency Creates Supply-Chain Risk

Content
View full analysis
=1.0 ``` The Skill documentation states that this dependency may be installed automatically: ```text Requires the `gtfs-realtime-bindings` pip package (auto-installed via ClawHub; otherwise `pip install -r requirements.txt`). ``` ### Technical Analysis The version constraint accepts every current or future `gtfs-realtime-bindings` release at or above version 1.0. No lock file, exact version, package hash, or controlled package index is specified. As a result, installation is not reproducible. A package version published after the Skill was reviewed can be selected automatically without the Skill source changing. Python packages may execute code during installation and whenever their modules are imported. This project imports the dependency through: ```python from google.transit import gtfs_realtime_pb2 ``` This finding does not establish that the current package is malicious. It establishes that the dependency policy permits an unreviewed future package release to enter the execution environment. ### Attack Path 1. An attacker compromises the dependency publisher account, upstream repository, release process, or package-distribution infrastructure. 2. The attacker publishes a malicious version satisfying `>=1.0`. 3. ClawHub or a user installs the Skill without a previously locked dependency environment. 4. The package resolver selects the attacker-controlled release. 5. Malicious package code executes during installation or when the imported module is loaded. 6. The code operates with the privileges of the user or Agent process that performed the installation or invoked the Skill. ### Impact Assessment Successful exploitation could provide arbitrary code execution under the Agent's operating-system account. The resulting scop ...[truncated 333 chars]
Remediation
View remediation
``` 2. Generate and verify cryptographic package hashes, such as through a hash-pinned requirements file: ```text gtfs-realtime-bindings== --hash=sha256: ``` 3. Maintain a lock file generated through a controlled dependency-resolution process. 4. Configure installation to use a trusted package index and disable unexpected fallback indexes. 5. Review dependency release notes and package contents before updating the pinned version. 6. Run installation and Skill execution under a minimally privileged account or isolated environment. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/gtfs.py:151
Finding

Subway Feed Is Downloaded over Plaintext HTTP Without Integrity or Resource Limits

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • 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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (25)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

This mismatch hides materially relevant behavior: persistent storage of user-defined locations and file I/O are beyond a simple transit-query description. Concealing or under-describing retention of location data can mislead users and calling agents about privacy exposure, leading to collection and storage of sensitive home/work location information without informed consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

This mismatch hides materially relevant behavior: persistent storage of user-defined locations and file I/O are beyond a simple transit-query description. Concealing or under-describing retention of location data can mislead users and calling agents about privacy exposure, leading to collection and storage of sensitive home/work location information without informed consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

This mismatch hides materially relevant behavior: persistent storage of user-defined locations and file I/O are beyond a simple transit-query description. Concealing or under-describing retention of location data can mislead users and calling agents about privacy exposure, leading to collection and storage of sensitive home/work location information without informed consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

This mismatch hides materially relevant behavior: persistent storage of user-defined locations and file I/O are beyond a simple transit-query description. Concealing or under-describing retention of location data can mislead users and calling agents about privacy exposure, leading to collection and storage of sensitive home/work location information without informed consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

This mismatch hides materially relevant behavior: persistent storage of user-defined locations and file I/O are beyond a simple transit-query description. Concealing or under-describing retention of location data can mislead users and calling agents about privacy exposure, leading to collection and storage of sensitive home/work location information without informed consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

This mismatch hides materially relevant behavior: persistent storage of user-defined locations and file I/O are beyond a simple transit-query description. Concealing or under-describing retention of location data can mislead users and calling agents about privacy exposure, leading to collection and storage of sensitive home/work location information without informed consent.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README says the skill is triggered by 'natural-language intent' and that users can 'talk to it the way you'd talk to a commuter friend,' which describes a very broad invocation model without defining clear limits. This can overlap with ordinary conversation and does not provide exclusion conditions or precise trigger scope, increasing the risk of unintended activation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README states that the agent will create an openclaw cron job that polls a network API every 20 seconds and deletes itself later, but it does not prominently warn users about background job creation or ongoing network activity. Silent or under-disclosed scheduled execution can surprise users, consume resources, and create privacy or operational risk in managed, shared, or policy-restricted environments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README describes saving common locations such as home and office addresses, but does not clearly warn that sensitive location data will be persisted locally. Storing home/work addresses without explicit disclosure and consent can expose highly sensitive personal information if the host, logs, backups, or shared environment are accessed by others.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill instructs use of shell execution, network access, and file read/write, but does not declare any explicit tool scope or permissions boundaries. This creates an overprivileged integration surface where an agent may invoke sensitive capabilities without clear least-privilege constraints, increasing the risk of unintended file modification, command execution, or data access.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases are very broad, including generic expressions like 'commute', 'get me to', and 'how do I get to', which can cause the skill to activate in contexts where the user did not intend transit handling. Overbroad invocation increases the chance of unnecessary data collection, unnecessary network calls, or accidental use of file-writing/setup flows.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation expands the skill from transit lookup into persistent location storage and address handling, which introduces privacy-sensitive behavior outside the manifest's apparent scope. Home, work, and frequent-destination data are highly sensitive and can expose routines and physical locations if stored or accessed improperly.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill authorizes web-search geocoding of user-provided addresses, sending sensitive home/work location data to third-party services without explicit necessity or consent controls. Because addresses are then written to local storage, this combines external disclosure with persistent retention of highly sensitive personal data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill instructs saving home and work addresses to a local JSON file without a clear privacy warning, consent language, or retention policy. These locations are extremely sensitive personal data, and storing them silently or casually can expose the user's residence, workplace, and travel patterns to other tools, users, or processes on the same system.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The guidance to infer transit intent from mention of saved locations encourages the agent to expand scope based on prior stored personal data rather than current explicit user intent. This can lead to privacy-invasive behavior and unintended activation, especially when home/work labels are reused in non-transit conversations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Cron-based notifications add persistence and autonomous future execution that are not described in the manifest. Undisclosed scheduled execution can surprise users, create lingering processes, and expand the blast radius if commands are misconfigured or later abused.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill writes user-defined locations, including address and precise latitude/longitude, to a local JSON file even though the skill description is focused on transit lookup and trip planning rather than persistent storage of personal location data. Persisting home/work-style locations increases privacy risk because it creates a durable record of sensitive user data that could be exposed to other components, future runs, or local file access beyond the user's immediate request.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · tests/test_check_track.py (reported line 56)May include surrounding context.

python
"check_track.fetch_arrivals = lambda s, sys='lirr': _DATA; "
            "check_track.main()"
        )
        return subprocess.run(
            [sys.executable, "-c", stub] + args,
            cwd=str(SCRIPT.parent),
            capture_output=True, text=True, timeout=10,

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · tests/test_check_track.py (reported line 61)May include surrounding context.

python
cwd=str(SCRIPT.parent),
            capture_output=True, text=True, timeout=10,
        )
    return subprocess.run(
        [sys.executable, str(SCRIPT)] + args,
        capture_output=True, text=True, timeout=10,
    )

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · tests/test_mta_cli.py (reported line 10)May include surrounding context.

python
def _run(args, timeout=30):
    return subprocess.run(
        [sys.executable, MTA_PATH] + args,
        capture_output=True, text=True, timeout=timeout,
    )

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · tests/test_mta_cli.py (reported line 137)May include surrounding context.

python
f"sys.argv = ['mta.py'] + {list(args)!r}; "
            "mta.main()"
        )
        return subprocess.run(
            [sys.executable, "-c", stub],
            cwd=str(Path(MTA_PATH).parent),
            capture_output=True, text=True, timeout=10,

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
91% confidence
Finding

The dependency is specified with a lower-bound only version constraint, which allows future unreviewed releases of gtfs-realtime-bindings to be installed. This creates supply-chain risk because a compromised, breaking, or malicious upstream release could be pulled into the skill environment without explicit approval or testing.

Content

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

text
gtfs-realtime-bindings>=1.0

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The trip-planning path accepts --near-origin and --near-dest, resolves them to latitude/longitude, and uses that location data for route computation, but the code provides no disclosure that sensitive location information is being processed. Because location data can be privacy-sensitive, a brief user-facing warning or notice would improve transparency.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The nearby-stations command accepts a saved location or raw latitude/longitude and then searches for nearby transit stops, but there is no explicit warning that precise location data is being used. Even if expected for the feature, the current file does not disclose any privacy considerations around handling that location input.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The function invokes subway.fetch_alerts(), which implies a network call to retrieve service alerts, but this file provides no confirmation prompt, log/print, or inline warning about transmitting request metadata or contacting an external service. For a code file, outbound network activity should have some visible disclosure unless already clearly documented elsewhere as part of the skill behavior.

Content

No source excerpt is available for this finding.