Back to skill

Security audit

Bmkg Weather

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward BMKG weather and earthquake lookup helper, with expected network calls to BMKG and no evidence of hidden persistence, credential access, or destructive behavior.

Install this if you want an agent to answer Indonesian weather and earthquake questions using BMKG data. Be aware it will contact BMKG public endpoints with the relevant region code or requested location context, and ambiguous weather requests in Indonesian may activate it.

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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill instructs use of shell commands and outbound network access (python scripts/..., curl ...) but does not declare any explicit tool scope or permissions. This creates a governance gap where an agent may execute capabilities broader than reviewers or policy expect, increasing the chance of unintended command execution or network use.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger language is very broad, covering generic weather and Indonesian terms, so the skill may activate for loosely related prompts and cause unintended external lookups. Over-broad invocation expands the situations in which network actions or scripted lookups occur without the user specifically asking for BMKG data.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

2. Peringatan Dini / Nowcast

text
GET https://data.bmkg.go.id/peringatan-dini-cuaca/
  • Early warning hingga level kecamatan
  • Format: XML (CAP)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

2. Peringatan Dini / Nowcast

text
GET https://data.bmkg.go.id/peringatan-dini-cuaca/
  • Early warning hingga level kecamatan
  • Format: XML (CAP)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

2. Peringatan Dini / Nowcast

text
GET https://data.bmkg.go.id/peringatan-dini-cuaca/
  • Early warning hingga level kecamatan
  • Format: XML (CAP)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

2. Peringatan Dini / Nowcast

text
GET https://data.bmkg.go.id/peringatan-dini-cuaca/
  • Early warning hingga level kecamatan
  • Format: XML (CAP)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

2. Peringatan Dini / Nowcast

text
GET https://data.bmkg.go.id/peringatan-dini-cuaca/
  • Early warning hingga level kecamatan
  • Format: XML (CAP)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

2. Peringatan Dini / Nowcast

text
GET https://data.bmkg.go.id/peringatan-dini-cuaca/
  • Early warning hingga level kecamatan
  • Format: XML (CAP)

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
def test_kode(kode: str) -> dict | None:
    """Test apakah kode valid dengan hit API BMKG."""
    url = f"https://api.bmkg.go.id/publik/prakiraan-cuaca?adm4={kode}"
    try:
        req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
        with urllib.request.urlopen(req, timeout=10) as response:

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
def test_kode(kode: str) -> dict | None:
    """Test apakah kode valid dengan hit API BMKG."""
    url = f"https://api.bmkg.go.id/publik/prakiraan-cuaca?adm4={kode}"
    try:
        req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
        with urllib.request.urlopen(req, timeout=10) as response:

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
def test_kode(kode: str) -> dict | None:
    """Test apakah kode valid dengan hit API BMKG."""
    url = f"https://api.bmkg.go.id/publik/prakiraan-cuaca?adm4={kode}"
    try:
        req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
        with urllib.request.urlopen(req, timeout=10) as response:

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/kode-wilayah.md (reported line 192)May include surrounding context.

md
def test_kode(kode: str) -> dict | None:
    """Test apakah kode valid dengan hit API BMKG."""
    url = f"https://api.bmkg.go.id/publik/prakiraan-cuaca?adm4={kode}"
    try:
        req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
        with urllib.request.urlopen(req, timeout=10) as response:

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/cari_wilayah.py (reported line 83)May include surrounding context.

python
def test_kode(kode: str) -> dict | None:
    """Test apakah kode valid dengan hit API BMKG."""
    url = f"https://api.bmkg.go.id/publik/prakiraan-cuaca?adm4={kode}"
    try:
        req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
        with urllib.request.urlopen(req, timeout=10) as response:

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/cari_wilayah.py (reported line 110)May include surrounding context.

python
def test_kode(kode: str) -> dict | None:
    """Test apakah kode valid dengan hit API BMKG."""
    url = f"https://api.bmkg.go.id/publik/prakiraan-cuaca?adm4={kode}"
    try:
        req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
        with urllib.request.urlopen(req, timeout=10) as response:

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The instruction "Always mention 'Sumber: BMKG' in responses" mandates a specific language form in all outputs. This can violate language/locale policy expectations when the user is interacting in another language and no opt-in or alternative localized wording is offered.

Content

No source excerpt is available for this finding.