Back to skill

Security audit

SenseAudio Floating Audio Assistant

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to be a legitimate audio assistant wrapper, but it needs Review because starting it can capture and send system audio and it runs external workspace scripts without integrity checks.

Install only if you trust the surrounding AudioClaw workspace and the external realtime_interpreter toolchain. Before use, verify those external scripts are from a trusted source and protected from modification, and only start the assistant when everyone affected has consented to system-audio capture and SenseAudio processing. Avoid using it around sensitive meetings, private notifications, or protected media unless that data may be captured, stored in workspace state, and sent to SenseAudio.

Vulnerability Patterns
  • Tool Hijacking and SpoofingModifies or replaces tools so legitimate-looking calls execute attacker logic
  • 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)

T07 · Tool Hijacking and Spoofing

Warning
Location
scripts/start-senseaudio-floating-audio-assistant.sh:7
Finding

Execution of Mutable External Workspace Scripts Without Trust Validation

Content
View full analysis

Vulnerability Details

File Location: scripts/common.sh:4-8, scripts/start-senseaudio-floating-audio-assistant.sh:4-24, scripts/stop-senseaudio-floating-audio-assistant.sh:4-14, and scripts/check-senseaudio-floating-audio-assistant-setup.sh:4-49
Vulnerability Type: Untrusted external tool delegation
Risk Level: Medium

Vulnerable Code

scripts/common.sh:4-8:

bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
WORKSPACE_DIR="$(cd "$SKILL_DIR/../.." && pwd)"
TOOL_DIR="$WORKSPACE_DIR/tools/realtime_interpreter"
STATE_DIR="$WORKSPACE_DIR/state/realtime_interpreter"

scripts/start-senseaudio-floating-audio-assistant.sh:7-24:

bash
START_SCRIPT="$TOOL_DIR/start_system_subtitle_overlay.sh"
ENV_FILE="$WORKSPACE_DIR/.env"

if [ ! -f "$START_SCRIPT" ]; then
  echo "SenseAudio floating audio assistant launcher not found: $START_SCRIPT" >&2
  exit 1
fi

if ! command -v swiftc >/dev/null 2>&1; then
  echo "swiftc not found. Install Xcode Command Line Tools before launching the native overlay." >&2
  exit 1
fi

if [ ! -f "$ENV_FILE" ]; then
  echo "Warning: $ENV_FILE is missing. SenseAudio ASR/TTS/music features may not work until SENSEAUDIO_API_KEY is configured." >&2
fi

exec bash "$START_SCRIPT" "$@"

scripts/stop-senseaudio-floating-audio-assistant.sh:7-14:

bash
STOP_SCRIPT="$TOOL_DIR/stop_system_subtitle_overlay.sh"

if [ ! -f "$STOP_SCRIPT" ]; then
  echo "SenseAudio floating audio assistant stop script not found: $STOP_SCRIPT" >&2
  exit 1
fi

exec bash "$STOP_SCRIPT" "$@"

scripts/check-senseaudio-floating-audio-assistant-setup.sh:7,45-49:

bash
CHECK_SCRIPT="$TOOL_DIR/check_system_audio_setup.sh"

if [ -f "$CHECK_SCRIPT" ]; then
  bash "$CHECK_SCRIPT"
else
  echo "Audio setup checker not found: $CHECK_SCRIPT" >&2
  exit 1
fi

Technical Analysis

The Skill's start, stop, and setup-check entry points delegate execution to shell scripts under the su ...[truncated 2587 chars]

Remediation
View remediation

Remediation Suggestions

  1. Prefer package-local, reviewed implementations. Bundle the start, stop, and setup-check logic inside the Skill package rather than executing mutable workspace scripts.

  2. Pin external toolchain integrity. If external delegation is required, publish expected SHA-256 hashes or verify a signed manifest before every execution. Reject missing, changed, or unsigned targets.

  3. Validate canonical paths. Resolve each target with a canonical-path operation and verify that it remains under one explicitly approved toolchain directory. Reject symbolic-link redirection and unexpected path traversal.

  4. Enforce trusted ownership and permissions. Before execution, verify that the target and every parent directory are owned by the expected account and are not writable by untrusted users or groups.

  5. Avoid check-then-execute races. Integrity and metadata checks followed by pathname-based execution can be raced. Where practical, use a trusted immutable installation directory or platform-supported code-signing verification.

  6. Minimize inherited secrets. Launch the external toolchain with an allowlisted environment containing only variables required for the requested feature. Do not expose unrelated workspace credentials.

  7. Fail closed with clear diagnostics. If ownership, path, signature, or hash checks fail, stop without executing the external script and report which trust check failed.

  8. Document the trust boundary. State that the external realtime interpreter toolchain is executable code that must be installed from a trusted source and protected from modification.

Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (17)

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/senseaudio_api_smoke.py (reported line 23)May include surrounding context.

python
def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Diagnostic smoke test for SenseAudio integration used by this skill.")
    parser.add_argument("--env-file", default="", help="Optional .env file. Defaults to workspace/.env discovered from this skill.")
    parser.add_argument("--live-tts", action="store_true", help="Make a tiny real SenseAudio TTS request and report chunk metadata.")
    parser.add_argument("--voice-id", default="female_0006_a")
    parser.add_argument("--text", default="SenseAudio floating audio assistant smoke test.")

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/status-senseaudio-floating-audio-assistant.sh (reported line 25)May include surrounding context.

sh
def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Diagnostic smoke test for SenseAudio integration used by this skill.")
    parser.add_argument("--env-file", default="", help="Optional .env file. Defaults to workspace/.env discovered from this skill.")
    parser.add_argument("--live-tts", action="store_true", help="Make a tiny real SenseAudio TTS request and report chunk metadata.")
    parser.add_argument("--voice-id", default="female_0006_a")
    parser.add_argument("--text", default="SenseAudio floating audio assistant smoke test.")

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/status-senseaudio-floating-audio-assistant.sh (reported line 28)May include surrounding context.

sh
def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Diagnostic smoke test for SenseAudio integration used by this skill.")
    parser.add_argument("--env-file", default="", help="Optional .env file. Defaults to workspace/.env discovered from this skill.")
    parser.add_argument("--live-tts", action="store_true", help="Make a tiny real SenseAudio TTS request and report chunk metadata.")
    parser.add_argument("--voice-id", default="female_0006_a")
    parser.add_argument("--text", default="SenseAudio floating audio assistant smoke test.")

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/check-senseaudio-floating-audio-assistant-setup.sh (reported line 8)May include surrounding context.

sh
# shellcheck source=common.sh
source "$SCRIPT_DIR/common.sh"
RUNS_DIR="$STATE_DIR/runs"
ENV_FILE="$WORKSPACE_DIR/.env"

echo "SenseAudio Floating Audio Assistant"
echo

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/senseaudio_api_smoke.py (reported line 116)May include surrounding context.

python
# shellcheck source=common.sh
source "$SCRIPT_DIR/common.sh"
RUNS_DIR="$STATE_DIR/runs"
ENV_FILE="$WORKSPACE_DIR/.env"

echo "SenseAudio Floating Audio Assistant"
echo

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/start-senseaudio-floating-audio-assistant.sh (reported line 8)May include surrounding context.

sh
# shellcheck source=common.sh
source "$SCRIPT_DIR/common.sh"
RUNS_DIR="$STATE_DIR/runs"
ENV_FILE="$WORKSPACE_DIR/.env"

echo "SenseAudio Floating Audio Assistant"
echo

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/status-senseaudio-floating-audio-assistant.sh (reported line 8)May include surrounding context.

sh
# shellcheck source=common.sh
source "$SCRIPT_DIR/common.sh"
RUNS_DIR="$STATE_DIR/runs"
ENV_FILE="$WORKSPACE_DIR/.env"

echo "SenseAudio Floating Audio Assistant"
echo

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill advertises executable commands, environment-variable use, file access, and network-backed API operations, but it does not declare any explicit tool scope such as allowed tools or permissions. That mismatch can cause an agent runtime or reviewer to underestimate what the skill may do, increasing the risk of unintended command execution, access to secrets in environment variables, or outbound network use without clear policy visibility.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill's title, trigger phrases, and all operational instructions are written exclusively in Chinese, with no indication that users may interact in another language or choose a preferred locale. Under the stated policy, a language constraint should be optional or explicitly justified; here it appears imposed by default.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The instruction '请基于转录文本输出' sets the template content in Chinese, which effectively mandates a specific language for the skill output. The file does not offer a user language choice or explain a justified region-specific constraint, so it conflicts with the language/locale policy criteria.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The operator notes describe capturing system output audio, local/remote ASR, and translation, but they do not present a clear, explicit privacy warning that third-party processing may receive audio content and derived transcripts. This can lead operators to enable the assistant without informed consent, increasing the risk of unintended disclosure of sensitive meeting audio, notifications, or copyrighted content to the SenseAudio service.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The quickstart says to use the skill when the user wants broad categories like 'recent projects' or 'music workshop,' which can match requests unrelated to audio capture or the floating assistant. Over-broad invocation guidance increases the chance an agent triggers scripts that alter system audio routing or start audio capture in contexts where the user did not clearly consent to those side effects.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The documented runtime flow states that the tool switches macOS output to a Multi-Output Device and captures system audio, but the quickstart does not foreground these behaviors as user-facing warnings. Omitting this warning can lead to users unknowingly enabling interception of all system audio and changing device routing, creating privacy, consent, and operational risks.

Content

No source excerpt is available for this finding.

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/senseaudio_integration.md (reported line 15)May include surrounding context.

md
from pathlib import Path


TTS_URL = "https://api.senseaudio.cn/v1/t2a_v2"
ASR_WS_URL = "wss://api.senseaudio.cn/ws/v1/audio/transcriptions"
MUSIC_CREATE_URL = "https://api.senseaudio.cn/v1/music/song/create"
DEFAULT_TTS_MODEL = "SenseAudio-TTS-1.0"

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/senseaudio_integration.md (reported line 16)May include surrounding context.

md
from pathlib import Path


TTS_URL = "https://api.senseaudio.cn/v1/t2a_v2"
ASR_WS_URL = "wss://api.senseaudio.cn/ws/v1/audio/transcriptions"
MUSIC_CREATE_URL = "https://api.senseaudio.cn/v1/music/song/create"
DEFAULT_TTS_MODEL = "SenseAudio-TTS-1.0"

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/senseaudio_api_smoke.py (reported line 13)May include surrounding context.

python
from pathlib import Path


TTS_URL = "https://api.senseaudio.cn/v1/t2a_v2"
ASR_WS_URL = "wss://api.senseaudio.cn/ws/v1/audio/transcriptions"
MUSIC_CREATE_URL = "https://api.senseaudio.cn/v1/music/song/create"
DEFAULT_TTS_MODEL = "SenseAudio-TTS-1.0"

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/senseaudio_api_smoke.py (reported line 15)May include surrounding context.

python
from pathlib import Path


TTS_URL = "https://api.senseaudio.cn/v1/t2a_v2"
ASR_WS_URL = "wss://api.senseaudio.cn/ws/v1/audio/transcriptions"
MUSIC_CREATE_URL = "https://api.senseaudio.cn/v1/music/song/create"
DEFAULT_TTS_MODEL = "SenseAudio-TTS-1.0"

Static analysis

No suspicious patterns detected.