Back to skill

Security audit

Groq Voice Transcriber

Security checks for vulnerabilities and agentic risk

Overview

The skill’s voice-to-LLM behavior is mostly disclosed, but it silently includes a hard-coded Groq API key fallback and uses externally processed Telegram audio.

Review before installing. This skill will process Telegram voice audio through Groq and pass transcripts to a chat model, and it currently contains a hard-coded Groq credential fallback that should be removed and rotated before use. Install only after the publisher pins dependencies, removes the embedded key, and clearly documents third-party data handling.

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

T09 · Insecure Skill Coding Practices

Error
Location
handler.py:5
Finding

Hard-Coded Groq API Credential Used as a Runtime Fallback

Content
View full analysis

Vulnerability Details

File Location: handler.py:5-7
Vulnerability Type: Hard-coded secret
Risk Level: High

Vulnerable Code:

python
def __init__(self):
    api_key = os.getenv("GROQ_API_KEY", "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")
    self.client = Groq(api_key=api_key)

Technical Analysis

The code embeds a Groq API credential as the default value passed to os.getenv. If GROQ_API_KEY is absent, the application silently authenticates with the exposed credential. This contradicts config.json, which declares the environment variable as required.

Secrets stored in source code are exposed to anyone who can download the skill, inspect source archives, read build artifacts, or access repository history. The key uses Groq's live credential format and must be treated as compromised regardless of whether it remains active.

Attack Path

  1. An attacker downloads or otherwise obtains the skill package.
  2. The attacker inspects handler.py.
  3. The attacker extracts the embedded Groq API key.
  4. The attacker submits requests directly to Groq using that credential.
  5. Requests consume the credential owner's quota and are attributed to the associated account until the key is revoked or disabled.

Impact Assessment

Successful exploitation does not directly grant host operating-system privileges, but it may grant unauthorized access to the Groq API permissions associated with the exposed key. An attacker could consume API quota, create billing or availability impact, and perform activity attributed to the credential owner. The scope is bounded by the permissions, quotas, and account controls attached to the key.

Remediation
View remediation

Remediation Suggestions

  1. Revoke and rotate the exposed credential immediately; removing it from the current file is insufficient because it may remain in distributed copies and source history.
  2. Remove the fallback value and require the environment variable explicitly:
    python
    api_key = os.environ["GROQ_API_KEY"]
    self.client = Groq(api_key=api_key)
    
  3. Catch missing configuration at startup and return a sanitized configuration error without printing secrets.
  4. Store production credentials in an approved secret manager or protected deployment environment.
  5. Review Groq account logs, quota consumption, and billing for unauthorized use.
  6. Add automated secret scanning to source-control, build, and release pipelines.
  7. Where history exists, purge the credential from repository history while still treating the original key as permanently compromised.

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unbounded and Integrity-Unpinned Third-Party Dependency

Content
View full analysis

Vulnerability Details

File Location: requirements.txt:1
Vulnerability Type: Unsafe dependency constraint
Risk Level: Medium

Vulnerable Code:

text
groq>=0.4.0

Technical Analysis

The dependency declaration accepts every groq release from version 0.4.0 onward and supplies no package hashes. Consequently, separate installations can resolve to materially different dependency versions. A future compromised, malicious, or incompatible release could be selected automatically without a corresponding change to this project.

Python packages can execute code during installation and subsequently when imported. Because handler.py imports Groq at module load time, code present in the resolved package runs with the privileges of the process installing or operating the skill.

This finding identifies supply-chain exposure caused by permissive dependency resolution. The reviewed files do not establish that the current Groq package itself is malicious.

Attack Path

  1. A future package release accepted by groq>=0.4.0 is compromised, malicious, or otherwise unsafe.
  2. An operator follows the documented installation process and runs pip install -r requirements.txt.
  3. The package resolver selects the unsafe newer release because there is no reviewed exact-version constraint or integrity hash.
  4. Attacker-controlled package code executes during installation or when handler.py imports groq.
  5. That code operates with the permissions available to the installer or skill runtime.

Impact Assessment

In a successful upstream compromise, the effective scope could include arbitrary code execution under the installation or runtime account. Depending on that account's privileges, this may expose application data, environment variables such as GROQ_API_KEY, accessible local files, and network resources. It could also alter application behavior or establish further compromise within the permissions ...[truncated 106 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin the dependency to an exact version that has been reviewed and tested, rather than using an open-ended lower bound.
  2. Generate and enforce cryptographic hashes for resolved artifacts, for example through a hash-locked requirements file.
  3. Use a lockfile or reproducible dependency-management process that records all transitive dependencies.
  4. Install only from trusted package indexes and disable unintended supplemental indexes to reduce dependency-confusion exposure.
  5. Run dependency vulnerability and provenance checks in continuous integration.
  6. Test and review dependency upgrades before deliberately regenerating the lockfile.
  7. Install and run the skill under a dedicated least-privileged account so that a dependency compromise has limited access.
Vulnerability Patterns
  • 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
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (9)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly states it intercepts Telegram audio, sends it to Groq Whisper for transcription, and then sends text to an LLM, but it does not warn users that their audio and derived text leave the local environment and are processed by third-party services. This creates a real privacy and consent issue because users may unknowingly transmit sensitive voice content, metadata, or personal information to external providers.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest description is written only in Russian ("Голосовые сообщения через Groq Whisper API"), which can constitute a language/locale policy violation if the skill is presented to a broader audience without offering a language choice. There is no indication in the file that the Russian-only locale is intentional, optional, or limited to a region-specific context.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The code uploads raw audio contents to Groq for transcription without any visible consent, warning, or minimization controls. Audio can contain sensitive personal, financial, or biometric information, so undisclosed third-party transmission creates a meaningful privacy and compliance risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill adds a second capability beyond transcription by sending transcribed user audio to a chat LLM and returning generated content. That expands data exposure and behavior beyond the apparent purpose of the skill, creating unnecessary privacy, prompt-injection, and output-risk surface for a transcription-focused handler.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The transcribed user content is forwarded to an external LLM service without separate notice or approval. This creates an additional disclosure channel for potentially sensitive speech-derived text and is more dangerous here because users may reasonably expect only transcription, not secondary model processing.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The system prompt explicitly instructs the assistant to always answer in Russian, regardless of user preference. This is a natural-language locale constraint with no opt-in or documented justification, which can violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The natural-language instructions and behavior description are presented solely in Russian, which can impose a language constraint on users without opt-in. The file does not mention that the skill is intentionally limited to Russian-speaking users or provide an alternative language.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The entrypoint appears to expose a simple voice handling interface, but it actually performs transcription and then content generation. This mismatch can mislead integrators and users about what data processing occurs, increasing the chance of unintended disclosure of sensitive spoken content to a second external service path.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
94% confidence
Finding

The dependency is specified with a lower-bound range (groq>=0.4.0) rather than an exact version, which makes builds non-reproducible and allows future package releases to be installed without review. If an upstream release is malicious, compromised, or simply introduces breaking behavior, the skill could pull it in automatically during installation.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
groq>=0.4.0

Static analysis

No suspicious patterns detected.