Back to skill

Security audit

H-ear

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent H-ear audio classification tool, but it includes an under-documented RTSP capture command that records and uploads audio by default, so it should go to Review.

Before installing, verify that users are allowed to send audio, local files, URLs, location metadata, and webhook payloads to H-ear. Treat `h-ear capture`/`listen` as sensitive: it can record from an RTSP source and upload the recording by default, and RTSP URLs should not contain credentials that may appear in logs. Use webhook create/update/delete only with explicit operator intent because those commands change persistent enterprise integrations.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
src/cli.ts:246
Finding

Undocumented RTSP Audio Capture Uploads Sensitive Audio by Default

Content
View full analysis
] [--duration 15] [--no-classify]', '', 'Capture audio from an RTSP camera and (by default) classify it.', '', 'Flags:', ` ${pad('--rtsp ', 24)}RTSP source URL (or set LISTEN_RTSP_URL).`, ` ${pad('--duration ', 24)}Capture length in seconds (default 15).`, ` ${pad('--no-classify', 24)}Capture only, do not submit for classification.`, '', 'Examples:', ' h-ear capture --duration 30', ' LISTEN_RTSP_URL=rtsp://cam:554/stream h-ear capture', ].join('\n')); return; } const rtspUrl = parsed.parsed.flags.rtsp ?? process.env.LISTEN_RTSP_URL; if (!rtspUrl) { console.error('Error: RTSP URL required. Pass --rtsp or set LISTEN_RTSP_URL'); process.exit(1); } const duration = parseInt(parsed.parsed.flags.duration ?? '15', 10); const classifyAfter = !parsed.parsed.bools['no-classify']; console.error(` Capturing ${duration}s audio from ${rtspUrl}...`); const { buffer, fileName } = captureAudio(rtspUrl, duration); console.error(` Captured ${(buffer.length / 1024).toFixed(0)} KB`); if (classifyAfter) { const { client } = createSkill(); const tmpFile = join(tmpdir(), 'h-ear-listen', fileName); writeFileSync(tmpFile, buffer); try { console.log(await classifyFileCommand( client, tmpFile, { threshold: 0.3 ...[truncated 2867 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
src/cli.ts:177
Finding

Predictable Shared Temporary Files Allow Symlink-Based File Overwrite

Content
View full analysis
console.error(` ${msg}`), )); } finally { try { unlinkSync(tmpFile); } catch { /* best ef ...[truncated 2611 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
Findings (29)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented primarily as environmental audio intelligence, but it also exposes enterprise webhook administration operations including create, update, delete, ping, and delivery inspection. Those capabilities can modify outbound integrations and trigger network interactions, so omitting them from the high-level description can mislead users and agents about the skill’s actual authority and attack surface.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill is presented primarily as environmental audio intelligence, but it also exposes enterprise webhook administration operations including create, update, delete, ping, and delivery inspection. Those capabilities can modify outbound integrations and trigger network interactions, so omitting them from the high-level description can mislead users and agents about the skill’s actual authority and attack surface.

Content

No source excerpt is available for this finding.

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

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

md
metadata: {"openclaw": {"requires": {"env": ["HEAR_API_KEY", "HEAR_ENV"], "bins": []}, "primaryEnv": "HEAR_API_KEY"}}
---

<!-- Version: keep in sync with package.json. Runtime code reads from package.json
     via createRequire — this header is the static manifest the OpenClaw gateway
     parses at install/registration time. Bump both together. -->

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

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

md
## Commands

<!-- @doc-sync-ref gen:#openclaw-commands -->
| Command | Description |
|---------|-------------|
| `h-ear health` | Check H-ear API health and liveness (no auth required). |

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The README encourages users to submit audio URLs to a third-party classification service but does not warn that the referenced audio content may contain sensitive personal, workplace, or location-derived information and will be transmitted externally. In a messaging/automation skill context, this omission can lead to unintentional disclosure of private audio data or URLs pointing to protected internal resources.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The webhook documentation tells users they can create callbacks and notes that a signing secret is returned once, but it does not explain that exposing a webhook endpoint increases attack surface or that the secret must be securely stored and used to verify incoming requests. This can result in insecure deployments where webhook events are accepted without signature validation or secrets are mishandled, enabling spoofed callbacks or data leakage.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill declares environment-variable requirements but does not declare an explicit tool scope such as permissions or allowed-tools. That creates an authorization and transparency gap: the platform and user cannot clearly see or constrain what capabilities the skill expects, which increases the risk of unintended secret access or overly broad execution in agent environments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The command h-ear classify <fileOrUrl> implies submission of local files or remote URLs to an external service, but the skill does not clearly warn users that audio content leaves the local environment. This creates a real privacy and data-governance risk, especially for sensitive recordings, regulated data, or internal URLs that may be fetched and processed remotely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The webhook-delivery model routes asynchronous classification results through the OpenClaw gateway, but the skill does not provide a clear privacy and integrity warning about that intermediary path. Without that disclosure, users may incorrectly assume direct end-to-end delivery and may expose sensitive result data to an unexpected processing or routing layer.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The manifest describes transforming environmental audio into meaningful translations, which justifies classifying or interpreting provided audio. This CLI additionally acquires audio itself from RTSP sources by spawning ffmpeg, creating local files, and handling capture lifecycle, which is a separate device-ingestion capability not clearly justified by the stated skill purpose.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This code registers a webhook using a callback URL and subscribes to job completion events, which causes system event data to be sent over the network to an external endpoint. There is no confirmation prompt, user-facing disclosure, or explanatory comment in this file warning that registering the alert will send event data to the provided URL.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This code reads a local audio file from disk and uploads it to a remote service via submitClassifyFile or submitClassifyChunked. It also forwards callbackUrl, callbackSecret, and optional latitude/longitude metadata, but there is no confirmation prompt or explicit user-facing disclosure in this file warning that local data and metadata will be transmitted externally.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest describes a skill focused on transforming environmental audio into meaningful descriptions and actions, but this file implements enterprise webhook administration: listing, creating, updating, pinging, delivery inspection, and deletion. Managing outbound integration endpoints is not an obvious implementation detail of audio sensing or translation itself, so the code's behavior materially exceeds the stated functional scope.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Creating, updating, pinging, and deleting enterprise webhooks gives the skill control over where platform events are sent and how external integrations behave. That is a significant integration-management capability that is not justified by a description centered on describing and acting upon environmental audio, absent explicit manifest language covering webhook or enterprise integration administration.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This command deletes an enterprise webhook via client.deleteEnterpriseWebhook(webhookId) and returns a formatted result, but the file contains no confirmation prompt, warning comment, or user-facing disclosure around this destructive action. Deleting a webhook can disrupt event delivery and is an irreversible operational change, so some explicit warning or confirmation should be present unless documented elsewhere.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

All user-visible strings in this file are fixed in English, and there is no indication that users can opt into another language or locale. The policy explicitly calls for flagging language or locale constraints when a skill forces a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest description frames the skill as transforming environmental sound into actionable meaning, but this command surface includes listing, creating, updating, deleting, pinging, and auditing webhooks. Webhook lifecycle management is not an obvious implementation detail of environmental audio understanding; it materially expands the skill into general integration administration.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest exposes a permanent webhook delete action with no visible confirmation step, dry-run mode, or strong user warning before invoking deletion. In an agent or LLM-driven CLI context, ambiguous prompts or tool misuse could trigger irreversible removal of integrations, causing loss of event delivery and operational disruption.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 29)May include surrounding context.

json
"prepublishOnly": "npm run build"
  },
  "dependencies": {
    "@h-ear/core": "^1.0.0"
  },
  "devDependencies": {
    "@eslint/js": "^10.0.1",

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 32)May include surrounding context.

json
"@h-ear/core": "^1.0.0"
  },
  "devDependencies": {
    "@eslint/js": "^10.0.1",
    "@types/node": "^20.11.0",
    "typescript": "^5.9.3",
    "typescript-eslint": "^8.57.2"

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 33)May include surrounding context.

json
},
  "devDependencies": {
    "@eslint/js": "^10.0.1",
    "@types/node": "^20.11.0",
    "typescript": "^5.9.3",
    "typescript-eslint": "^8.57.2"
  },

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 34)May include surrounding context.

json
"devDependencies": {
    "@eslint/js": "^10.0.1",
    "@types/node": "^20.11.0",
    "typescript": "^5.9.3",
    "typescript-eslint": "^8.57.2"
  },
  "engines": {

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 35)May include surrounding context.

json
"@eslint/js": "^10.0.1",
    "@types/node": "^20.11.0",
    "typescript": "^5.9.3",
    "typescript-eslint": "^8.57.2"
  },
  "engines": {
    "node": ">=18"

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

The help text and command logic support LISTEN_RTSP_URL as an environment-provided camera source, and the command later consumes it for capture. Accessing deployment/environment configuration for camera endpoints is not an obvious requirement of a skill described only as translating environmental audio.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

This code performs a network-facing operation by connecting to an RTSP source and only emits a progress message when running, rather than a clear safety disclosure about contacting a remote camera/source. While the help text documents the flag, the runtime path lacks an explicit warning that invoking capture will initiate network access to the specified endpoint.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
src/cli.ts:191