Back to skill

Security audit

Transit Jakarta

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed TransJakarta transit CLI that fetches public bus data and stores local route cache data, with no evidence of hidden persistence, credential access, or harmful behavior.

Install this if you are comfortable with a CLI tool contacting transit.oyenza.com and keeping public TransJakarta route and stop metadata in a local cache. The main improvement would be narrower activation wording so ordinary bus questions do not invoke it unexpectedly.

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
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (7)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description says to trigger on asking about bus ETAs, stop locations, route details, or 'any TransJakarta live data,' which is broad and lacks clear boundaries for when the skill should not activate. This can overlap with ordinary conversation about buses or route planning without explicitly requiring the CLI/API use case.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The natural-language instructions, examples, and operational guidance are presented entirely in Indonesian, effectively imposing a language/locale preference without any opt-in or explanation. Under the stated policy, language constraints should either be user-selectable or clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger section includes generic keywords like 'bus,' 'halte,' 'kapan,' 'datang,' and even stop names, which are common in everyday speech and not specific enough on their own. The file does not provide negative examples or contextual limits to prevent accidental activation.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

Setup (one-time)

bash
# Buat file config jika belum ada
mkdir -p ~/.qclaw-oversea/skills/transit-jakarta
# Config auto-generated on first run

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Multiple docstrings and formatted user-visible strings are written only in Indonesian, such as arrival/age formatting outputs and function descriptions, with no indication that the user can choose another language. Under the policy, forcing a specific language or locale without opt-in is a natural-language policy violation unless clearly justified and documented.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code performs outbound HTTP requests to a third-party transit service and writes returned data to local cache files, but it provides no user-facing logging, prompt, or warning about those actions. The module docstring identifies the API host, yet it does not disclose that runtime use will persist fetched data locally under a cache directory.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code's user-facing help, usage, errors, and command descriptions are consistently presented in Indonesian, but there is no indication that the skill is intentionally region-locked or that users can opt into another language. Under the natural-language policy criteria, forcing a specific language without user choice can be a policy violation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.