Back to skill

Security audit

Cta Skill

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent Chicago transit helper that uses disclosed CTA APIs and a local GTFS cache without evidence of hidden data access or harmful behavior.

Install this only if you are comfortable providing CTA developer API keys and caching CTA GTFS schedule data under your home directory. The keys are sent as query parameters to CTA's official HTTPS APIs, and GTFS refresh downloads and extracts CTA's public zip feed locally.

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
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (34)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · CLAUDE.md (reported line 17)May include surrounding context.

md
## Key Design Decisions

- **Zero dependencies**: Keeps the skill lightweight and avoids supply chain risk. CSV parsing, .env loading, and timestamp parsing are all hand-rolled.
- **Central Time handling**: CTA APIs return timestamps in Central Time with no timezone suffix. We store these in a Date's UTC slots so `getUTCHours()`/`getUTCMinutes()` returns the Central Time values directly. See `parseCTATimestamp()`.
- **Embedded station data**: The `STATIONS` array provides fuzzy matching for ~50 key stations without requiring GTFS data. GTFS extends this when available.
- **GTFS cached locally**: Static schedule data downloads to `~/.cta/gtfs/` and is read on demand. Not bundled with the skill.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · README.md (reported line 36)May include surrounding context.

md
## Key Design Decisions

- **Zero dependencies**: Keeps the skill lightweight and avoids supply chain risk. CSV parsing, .env loading, and timestamp parsing are all hand-rolled.
- **Central Time handling**: CTA APIs return timestamps in Central Time with no timezone suffix. We store these in a Date's UTC slots so `getUTCHours()`/`getUTCMinutes()` returns the Central Time values directly. See `parseCTATimestamp()`.
- **Embedded station data**: The `STATIONS` array provides fuzzy matching for ~50 key stations without requiring GTFS data. GTFS extends this when available.
- **GTFS cached locally**: Static schedule data downloads to `~/.cta/gtfs/` and is read on demand. Not bundled with the skill.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/cta.mjs (reported line 25)May include surrounding context.

js
## Key Design Decisions

- **Zero dependencies**: Keeps the skill lightweight and avoids supply chain risk. CSV parsing, .env loading, and timestamp parsing are all hand-rolled.
- **Central Time handling**: CTA APIs return timestamps in Central Time with no timezone suffix. We store these in a Date's UTC slots so `getUTCHours()`/`getUTCMinutes()` returns the Central Time values directly. See `parseCTATimestamp()`.
- **Embedded station data**: The `STATIONS` array provides fuzzy matching for ~50 key stations without requiring GTFS data. GTFS extends this when available.
- **GTFS cached locally**: Static schedule data downloads to `~/.cta/gtfs/` and is read on demand. Not bundled with the skill.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · README.md (reported line 35)May include surrounding context.

Step 2: Set Environment Variables

bash
cp .env.example .env
# Then edit .env and add your keys:
# CTA_TRAIN_API_KEY=your-train-key-here
# CTA_BUS_API_KEY=your-bus-key-here

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Confidence
80% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

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

md
---
name: cta
description: Chicago CTA transit — real-time L train arrivals, bus predictions, service alerts, and route info. Use when the user asks about Chicago public transit, L train schedules, CTA bus times, service alerts, or nearby stops.
homepage: "https://github.com/brianleach/cta-skill"
license: MIT
metadata:
  clawhub:
    emoji: "🚇"
    tags: [transit, chicago, cta, transportation, bus, train, l-train, schedule]
    requires:
      bins: ["node", "unzip"]
      env: ["CTA_TRAIN_API_KEY", "CTA_BUS_API_KEY"]
    files: ["scripts/cta.mjs"]
    install:
      - id: npm-deps
        kind: shell

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
files: ["scripts/cta.mjs"]

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/cta.mjs:38