Back to skill

Security audit

ai-podcast-voiceover

Security checks across malware telemetry and agentic risk

Overview

The podcast workflow is coherent, but the package also uses broad Beatra authorization and silent self-updating code that users should review before installing.

Install only if you are comfortable granting a shared Beatra device authorization stored in ~/.beatra, allowing Beatra registration/source metadata, and accepting package-owned silent self-updates by default. Review the paid-call confirmation cards carefully, and consider disabling automatic updates with the documented update --auto off command if you need explicit control over code changes.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (12)

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill exposes broad capabilities including file read/write, network, shell, and environment access without any declared permission boundary. That makes the effective trust surface much larger than the user-facing task suggests, and increases the chance that local files, credentials, or system state could be accessed or modified without informed consent.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill description presents a narrow podcast voiceover function, but the documented behavior also includes authentication flows, credential storage, generic remote tool invocation, file upload, telemetry/registration, uninstall cleanup, and package self-management. This mismatch is dangerous because users may approve the skill expecting simple TTS behavior while unknowingly granting a much broader operational and data-access footprint.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The skill contains a silent automatic update and package replacement mechanism that can modify installed files without separate confirmation. Even with integrity checks, this creates a code-execution supply-chain risk: compromise of the update channel, signing process, or vendor infrastructure could push new behavior onto the host under the guise of a podcast skill.

Description-Behavior Mismatch

High
Confidence
92% confidence
Finding
The client embeds a full package discovery, download, and self-update mechanism that is unrelated to the declared podcast voiceover purpose. Even with checksum and path validation, self-updating code expands the trust boundary to remote infrastructure and creates a persistent code-modification channel on the user machine.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
This section writes to installation paths, creates rollback journals, locks, probes writability, removes obsolete files, and replaces package files on disk. For a podcast-generation skill, local package mutation and installation-state management are unnecessary privileged behaviors that materially increase persistence and tampering risk if the update channel or package logic is ever compromised.

Description-Behavior Mismatch

Medium
Confidence
88% confidence
Finding
The code performs registration telemetry and maintains a persistent local inventory of installed skills and paths, which is not part of the stated voiceover functionality. This creates undisclosed persistence and metadata collection about the local environment that could expose user activity, installed components, or operational context.

Context-Inappropriate Capability

Medium
Confidence
85% confidence
Finding
The skill fingerprints its execution environment using environment variables and host metadata to derive a platform label. For a podcast voiceover tool, this is difficult to justify functionally and increases privacy and tracking risk, especially when later transmitted with tool calls and registration telemetry.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
Maintaining a local skill inventory file with slug, platform, install path, and timestamp is unrelated to generating podcast audio and creates a durable local tracking record. In the skill context, this broadens the behavior from content processing into software inventory collection, which is more dangerous because users would not expect it from the advertised capability.

Description-Behavior Mismatch

Medium
Confidence
86% confidence
Finding
The file implements shared credential and device-state uninstall logic that is unrelated to the advertised podcast voiceover functionality. Even if intended as lifecycle management, this introduces privileged access to cross-skill state and expands the skill's trust boundary beyond what users would reasonably expect from a content-generation skill.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
This code can revoke a shared device authorization token and remove shared local state, affecting other installed skills if inventory logic fails or is manipulated. For a podcast voiceover skill, possession of this capability is over-privileged and creates a denial-of-service risk against the broader Beatra environment.

Credential Access

High
Category
Privilege Escalation
Content
def _device_token(state_dir: Path) -> str | None:
    path = state_dir / "credentials.json"
    try:
        value = json.loads(path.read_text(encoding="utf-8"))
    except (OSError, ValueError):
Confidence
88% confidence
Finding
The function reads an access token from a shared credentials file and uses it to call a revocation endpoint. Direct skill-level access to bearer tokens is dangerous because any code execution within the skill package can potentially misuse, exfiltrate, or revoke credentials outside the skill's stated purpose.

Self-Modification

High
Category
Rogue Agent
Content
)
    update = subparsers.add_parser(
        "update",
        help="Check, install, or configure Beatra package self-updates",
    )
    update.add_argument(
        "--check",
Confidence
95% confidence
Finding
Exposing a self-update command confirms that the skill can modify its own installed code after deployment. In a skill whose purpose is podcast voiceover generation, self-modification is a dangerous overreach because it enables persistence and remote code replacement independent of the host's normal review and update controls.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.