Back to skill

Security audit

Browser Audio Capture

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it says by capturing browser-tab audio, but it asks for powerful browser access and can continuously capture meeting audio with limited consent and privacy safeguards.

Review carefully before installing. Use only with browser profiles and meetings you are authorized to capture, keep the receiver bound to localhost, avoid sensitive tabs in a CDP-enabled browser, and be aware that audio plus tab URL/title are posted to the local receiver every few seconds. Disable or avoid watch mode unless continuous auto-capture is explicitly intended.

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

T08 · Insecure Dependencies

Note
Location
SKILL.md:32
Finding
Unpinned Third-Party Dependency Installation## Vulnerability Details **File Location**: `SKILL.md:32` **Vulnerability Type**: Unpinned dependency installation **Risk Level**: Low **Vulnerable Code**: ```markdown Python 3.9+ with aiohttp: `pip install aiohttp` ``` ### Technical Analysis The installation instruction asks users to install `aiohttp` without specifying a reviewed version, dependency lockfile, or package integrity hash. Consequently, package resolution is mutable: the version installed depends on what the package index serves when the command is executed. No evidence indicates that `aiohttp` itself is malicious or that the project uses dependency confusion, typosquatting, or an untrusted package index. The risk is instead that a future compromised, malicious, or incompatible release could be installed automatically without further project changes or review. Transitive dependencies are likewise not locked. ### Attack Path 1. An attacker compromises the relevant package publishing account, package-index delivery path, or a transitive dependency. 2. The attacker publishes a malicious release that satisfies the unrestricted package request. 3. A user follows the documented prerequisite and runs `pip install aiohttp`. 4. Pip resolves and installs the attacker-controlled release or dependency. 5. Malicious package installation hooks or imported runtime code execute with the privileges of the user running the command. This exploitation path is conditional on an upstream supply-chain compromise; the audited repository does not itself retrieve or execute a known malicious package. ### Impact Assessment Successful exploitation could execute arbitrary Python code under the installing or invoking user's account. The resulting scope could include access to files, environment variables, browser-debugging interfaces, local network services, and other resources available to that account. Administrative privileges are not inherently obtained unless the user runs p ...[truncated 41 chars]
Remediation
## Remediation Suggestions - Pin `aiohttp` and all transitive dependencies to reviewed versions in a requirements or lock file. - Require package hashes, for example through a hash-locked `requirements.txt` installed with `pip install --require-hashes -r requirements.txt`. - Configure and document the expected trusted package index instead of relying on ambient pip configuration. - Use an isolated virtual environment and avoid installing dependencies with administrative privileges. - Add automated dependency vulnerability and provenance monitoring. - Periodically update pinned versions through a controlled review and testing process rather than using an unrestricted latest release.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (16)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
Requiring Chrome remote debugging and Runtime.evaluate introduces a powerful control surface over the browser that is materially more sensitive than simple media capture, yet this is not transparently disclosed in the skill summary. In context, a browser-audio skill is more dangerous because users reasonably expect audio-only handling, not broad inspection and execution against open tabs.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
Requiring Chrome remote debugging and Runtime.evaluate introduces a powerful control surface over the browser that is materially more sensitive than simple media capture, yet this is not transparently disclosed in the skill summary. In context, a browser-audio skill is more dangerous because users reasonably expect audio-only handling, not broad inspection and execution against open tabs.

Missing User Warnings

High
Confidence
95% confidence
Finding
capture_tab can start audio interception and streaming to a local receiver without any user-facing disclosure or confirmation in the Python layer about what will be captured, where it will be sent, and what metadata accompanies it. Although the browser picker may appear for getDisplayMedia, the skill also attempts fallback capture paths and programmatic injection, so relying on implicit browser UX is not sufficient consent for continuous audio collection and transmission.

Missing User Warnings

High
Confidence
97% confidence
Finding
watch_meetings continuously monitors for meeting tabs and automatically initiates capture when one is detected, creating a stealthy auto-recording workflow. In the context of a browser audio skill, this substantially increases risk because sensitive conversations can be captured and streamed without a fresh per-meeting confirmation or obvious notice.

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill clearly performs network-related actions but does not declare any tool scope, permissions, or allowed-tools boundary in the skill manifest. That omission weakens reviewability and informed consent because operators cannot easily tell that the skill opens browser debugging access and streams captured data over HTTP.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill sends captured browser audio plus tab URL and title to a local HTTP endpoint without any visible privacy warning, consent language, retention guidance, or authentication expectations. This is sensitive data that may include meetings, calls, course content, and identifying metadata, so silent transmission meaningfully increases the risk of privacy breaches and unintended disclosure.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The injected JavaScript sends tabUrl and tabTitle together with audio to the receiver, expanding collection beyond what is required to process browser audio. URLs and titles can reveal sensitive meeting names, document paths, tokens in query strings, or browsing activity, so this is an unnecessary privacy exposure if the receiver is compromised, logs data, or forwards it onward.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
capture_status iterates across all tabs, injects status code, and returns URL/title details for any active capture, giving the skill visibility into browsing context outside a single explicitly selected tab. In a CDP-enabled browser environment this broadens surveillance scope and can expose sensitive cross-tab information unrelated to the core audio-capture function.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The watch mode is explicitly designed to auto-detect meeting tabs and initiate audio capture, but the CLI only prints operational status and does not present a clear privacy/consent warning or require explicit confirmation before monitoring likely real-time conversations. In this skill’s context, the capability targets meetings, webinars, and other potentially sensitive browser audio, which increases the risk of unauthorized recording, privacy violations, and noncompliance with consent laws or organizational policy.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The README instructs users to capture audio from meeting and media tabs and stream it to a local receiver, but it does not prominently warn about privacy, consent, or legal obligations around recording/transcribing other participants. In this context, the omission is security-relevant because it normalizes continuous interception of potentially sensitive communications and could lead users to deploy the tool in environments where recording is unauthorized or exposes confidential data.

Missing User Warnings

Medium
Confidence
83% confidence
Finding
This code initiates and manages browser tab audio capture while also storing and forwarding tab metadata such as the title and URL, but there is no evidence in this file of an explicit user-facing notice or consent confirmation at the point capture begins. In a skill designed to stream browser audio to AI agents, this increases the risk of users unknowingly exposing sensitive meeting content, media playback, or private browsing context, especially since tab metadata can reveal confidential information even beyond the audio itself.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The manifest requests tab audio capture capabilities and describes use in a transcription pipeline, but it provides no explicit user-facing disclosure about when audio is captured, whether speech is transcribed, or where that data is sent. In a browser extension handling potentially sensitive meeting, course, or webinar audio, lack of clear notice and consent creates a real privacy and misuse risk even if capture only occurs after user interaction.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The extension is advertised as streaming audio to any AI agent, but the implementation is hardcoded to POST only to a specific local service endpoint. This mismatch can mislead users about where sensitive captured audio is sent and reduces transparency and user control over data flow.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
Captured audio and tab metadata are transmitted over plain HTTP, which provides no transport security. Even though the target is localhost, unencrypted local transport can still expose sensitive data to local malware, debugging proxies, misconfigured software, or unintended services bound to that port; the absence of visible disclosure further increases the risk in this browser-capture context.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The code sends tab URL and tab title together with captured audio, which collects browsing metadata beyond what is required for audio capture. URLs and titles can contain sensitive information such as meeting names, document identifiers, query strings, or internal system names, increasing privacy and data exposure risk.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The popup explicitly promotes capturing browser-tab audio, transcription, and AI processing, but provides no in-UI notice about what data is collected, where it is sent, whether it leaves the device, or how long it is retained. For a browser extension handling potentially sensitive meeting, course, or media audio, this omission undermines informed consent and increases the risk of users exposing confidential content to downstream services without understanding the privacy implications.

Static analysis

No suspicious patterns detected.