Back to skill

Security audit

Feishu Voice (NoizAI)

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Feishu voice-message workflow, but users should review its external TTS dependency and privacy/authentication caveats before installing.

Install only if you trust the noizai-tts dependency and are comfortable sending the spoken text to NoizAI and the resulting audio to Feishu. Avoid sensitive content unless the dependency version, account mode, and data-handling behavior are clear.

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

Warning
Location
SKILL.md:24
Finding

Unpinned External TTS Dependency Is Executed Without Integrity Verification

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:24-26; scripts/voice.py:24-25, 52-76
Vulnerability Type: Supply-chain risk caused by an unpinned executable dependency
Risk Level: Medium

The documented installation process retrieves noizai-tts without specifying an immutable version, cryptographic digest, signature, or trusted publisher identity:

bash
# Install the underlying dependency first
clawhub install noizai-tts

# Then install this Skill
clawhub install lubo-feishu-voice

The Skill locates that dependency at predictable relative paths and executes its tts.py script with the current Python interpreter:

python
SCRIPT_DIR = Path(__file__).parent
TTS_SCRIPT = SCRIPT_DIR.parent / "noizai-tts" / "scripts" / "tts.py"
WORKSPACE_MEDIA = Path.home() / ".openclaw" / "workspace" / "media"
python
# Find TTS script
if not TTS_SCRIPT.exists():
    # Try alternate path
    alt = SCRIPT_DIR.parent.parent / "noizai-tts" / "scripts" / "tts.py"
    if alt.exists():
        tts_script = alt
    else:
        print(f"Error: tts.py not found at {TTS_SCRIPT} or {alt}", file=sys.stderr)
        sys.exit(1)
else:
    tts_script = TTS_SCRIPT

# Build command
cmd = [
    python, str(tts_script),
    "-t", text,
    "--voice-id", voice_id,
    "--format", "opus",
    "-o", str(output)
]

# Run — capture stderr separately so it doesn't pollute stdout
result = subprocess.run(
    cmd,
    capture_output=True,
    text=True,
    encoding="utf-8",
    errors="replace"
)

Technical Analysis

noizai-tts is an executable third-party component, not merely passive data. The installation command selects it by a mutable package name, while the wrapper performs no version enforcement or integrity validation before execution. It also accepts either of two relative filesystem locations solely on the basis that tts.py exists.

Consequently, the effe ...[truncated 2310 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin noizai-tts to a specific, reviewed, immutable release rather than installing it only by package name.
  2. Record and verify a cryptographic SHA-256 digest or trusted signature for the dependency before installation or execution.
  3. Verify the package publisher through a trusted registry identity and reject unsigned, unexpectedly republished, or mismatched artifacts.
  4. Use a dependency lockfile or trusted manifest that records the exact dependency version and integrity metadata.
  5. Resolve the dependency through an authenticated package-management mechanism instead of searching multiple relative paths.
  6. Before execution, canonicalize the script path and ensure it resides in the expected installation directory; reject symlinks or unexpected ownership and permission states where practical.
  7. Vendor the reviewed TTS integration into the Skill when licensing permits, thereby making the executable code part of the auditable artifact.
  8. Run the TTS dependency in a restricted environment with only the filesystem and network access necessary for synthesis. Avoid passing unrelated secrets through its environment.
  9. Document the exact reviewed dependency release and establish a controlled update process requiring renewed code review and integrity metadata.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill is advertised as a complete Feishu voice-delivery workflow, but the file only documents manual TTS generation and tells the agent to use a separate message tool to send audio. This can mislead operators into granting permissions or invoking the skill under the assumption that it implements end-to-end behavior, creating opportunities for unintended tool use, overbroad triggering, and bypass of normal user confirmation around outbound messaging.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'shell' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The trigger guidance is broad enough to match common requests like 'speak' or 'reply with audio,' which can cause the skill to activate in many ordinary conversations. In a skill that can send outbound messages and upload text to a third-party TTS service, overbroad activation increases the risk of unintended disclosure, accidental message sending, and use without clear user consent for external transmission.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The documentation claims the service is free and requires no API key, while the manifest declares NOIZ_API_KEY as the primary environment variable. Conflicting security and authentication guidance can cause users to misconfigure secrets, misunderstand when authenticated traffic is used, and trust the skill’s privacy claims more than warranted.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest describes a workflow that sends voice messages to Feishu, but this file only invokes a local TTS helper and prints the resulting output path. There is no Feishu API call, upload, or message-delivery logic anywhere in the implementation shown.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/voice.py (reported line 76)May include surrounding context.

python
]

    # Run — capture stderr separately so it doesn't pollute stdout
    result = subprocess.run(
        cmd,
        capture_output=True,
        text=True,

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

For a skill whose stated purpose is sending voice messages to Feishu using NoizAI TTS, invoking a separate executable process is an extra execution capability beyond straightforward TTS/network/file handling. The manifest mentions network and filesystem permissions, but not process execution or shell-style orchestration.

Content

No source excerpt is available for this finding.

Lp4

Low
Category
MCP Least Privilege
Confidence
65% confidence
Finding

Declared permissions with no matching code capability may indicate removed functionality or pre-staging for future abuse.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The natural-language instructions are predominantly in Chinese, which effectively imposes a specific language on users reading the skill documentation. The file does not indicate that Chinese is optional, provide an alternate language version, or document a justified locale restriction.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The security notes assert that guest mode sends no identity information, but elsewhere the manifest suggests API-key-based operation is part of the skill. Even if not malicious, this can create a false sense of privacy and cause users to send sensitive text to a remote service without understanding whether requests may be linked to an account.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.