Back to skill

Security audit

语音 Excel 编辑助手

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its stated Excel voice-editing purpose, but it needs review because it can auto-install Python packages and can send audio plus an API key to a configurable network endpoint.

Install only in an isolated or managed environment where dependencies are preinstalled or pinned. Confirm SENSEAUDIO_API_BASE is the intended SenseAudio HTTPS endpoint before use, treat uploaded audio as shared with an external ASR provider, and review generated operation plans before allowing destructive workbook edits or arbitrary formulas.

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 (3)

T08 · Insecure Dependencies

Warning
Location
scripts/main.py:32
Finding

Automatic Installation of Unpinned Runtime Dependencies

Content
View full analysis
None: pip_name = pip_name or import_name try: importlib.import_module(import_name) return except ImportError: print(f"缺少 {pip_name},正在自动安装...", file=sys.stderr) result = subprocess.run( [sys.executable, "-m", "pip", "install", pip_name], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, ) if result.returncode != 0: raise RuntimeError( f"自动安装 {pip_name} 失败,请手动执行: {sys.executable} -m pip install {pip_name}\n" f"{result.stderr.strip()}" ) importlib.import_module(import_name) ensure_python_package("requests") ensure_python_package("openpyxl") ``` ### Technical Analysis The script automatically invokes `pip install` when either `requests` or `openpyxl` is unavailable. Installation occurs during normal script startup, without user confirmation, package version pinning, hash verification, or isolation from the invoking Python environment. Although the package names are legitimate and no dependency confusion or typosquatting is directly present in the repository, the installation source is determined by the runtime pip configuration. A compromised package index, malicious mirror, dependency-chain compromise, or future compromised package release could introduce executable code after the Skill has already passed review. Python package installation can execute package build logic, and importing the newly installed package immediately afterward executes its initialization code. This makes the effective runtime code dependent on mutable external package sources. ### Attack Path 1. The script runs in an environment where `r ...[truncated 1122 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/main.py:140
Finding

Configurable API Endpoint Can Receive the Audio File and Bearer Credential

Content
View full analysis
bool: return bool(self.api_key) @property def headers_auth_only(self) -> Dict[str, str]: if not self.api_key: raise APIError(missing_key_message()) return {"Authorization": f"Bearer {self.api_key}"} def auth_check(self) -> Dict[str, Any]: if not self.configured: raise APIError(missing_key_message()) return { "configured": True, "api_base": self.api_base, "message": "已检测到 `SENSEAUDIO_API_KEY`。当前 auth-check 只做本地配置检查。", } def transcribe( self, *, audio_path: Path, language: Optional[str], output_dir: Optional[Path] = None, ) -> TranscriptionResult: if not audio_path.exists(): raise APIError(f"音频文件不存在: {audio_path}") if audio_path.stat().st_size > MAX_AUDIO_SIZE_MB * 1024 * 1024: raise APIError( f"音频文件大于 {MAX_AUDIO_SIZE_MB}MB,当前 Skill 不自动切片,请先拆分后再处理。" ) data: List[Tuple[str, str]] = [ ("model", DEFAULT_ASR_MODEL), ("response_format", "verbose_json"), ("enable_itn", "true"), ("enable_punctuation", "true"), ] if language: data.append(("language", language)) with audio_path.open("rb") as audio_file: files = {"file": (audio_path.name, audio_file, guess_mime_type(audio_pat ...[truncated 2368 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/main.py:565
Finding

Unrestricted Excel Formula Injection into Generated Workbooks

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (19)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 55)May include surrounding context.

md
- `scripts/main.py`:统一 CLI

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 82)May include surrounding context.

md
- `scripts/main.py`:统一 CLI

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 95)May include surrounding context.

md
- `scripts/main.py`:统一 CLI

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 108)May include surrounding context.

md
- `scripts/main.py`:统一 CLI

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 147)May include surrounding context.

md
- `scripts/main.py`:统一 CLI

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 166)May include surrounding context.

md
- `scripts/main.py`:统一 CLI

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 243)May include surrounding context.

md
- `scripts/main.py`:统一 CLI

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill invokes shell commands, reads and writes files, accesses environment variables, and calls an external network service, but it does not declare any explicit tool scope or permission boundary. In an agent runtime, that omission weakens least-privilege controls and can allow broader-than-expected execution against user files and secrets, especially because the workflow processes arbitrary uploaded Excel and audio inputs.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill description states it converts an Excel file plus a Chinese voice instruction, which imposes a language constraint in natural-language instructions. The file does not offer the user a language choice or clearly justify the locale restriction as a region-specific or compliance-bound requirement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The transcribe command includes --language zh, which hard-codes a specific language/locale. No nearby text indicates this is optional, user-selected, or required for a clearly documented region-specific reason.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document is written as a mandatory instruction set in Chinese and states that the agent must follow this protocol, but it does not provide any language or locale opt-in. Under the policy, forcing a specific language without user choice is a natural-language policy violation unless the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The prompt explicitly requires converting normalized Chinese Excel commands and all examples/instructions are written only for Chinese input. This imposes a language-specific constraint without documenting user choice or an opt-in, which matches the locale-policy violation criteria.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Automatically installing Python dependencies during execution is unsafe for a document/audio-processing skill because it causes unreviewed code from package repositories to be fetched and installed on demand. This creates a supply-chain and environment-manipulation risk that is unrelated to the core business logic and can lead to arbitrary code execution under the current user.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The code auto-installs packages via pip after only printing a stderr message, without requiring affirmative user approval. This can surprise users and administrators by modifying the environment and executing package installation workflows, which increases operational and supply-chain risk.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
92% confidence
Finding

The script invokes pip at runtime to install packages automatically, which executes external package-management behavior inside the skill process. Even though the package names are hardcoded and not shell-interpolated, this still expands the trust boundary to the local Python/pip configuration and remote package indexes, enabling unexpected code execution or supply-chain compromise if the environment or package source is malicious.

Content

Scanner excerpt · scripts/main.py (reported line 40)May include surrounding context.

python
except ImportError:
        print(f"缺少 {pip_name},正在自动安装...", file=sys.stderr)

    result = subprocess.run(
        [sys.executable, "-m", "pip", "install", pip_name],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill sends user-supplied audio to a remote transcription service, but the code does not present an explicit user-facing consent or warning at the point of transfer. Because audio may contain sensitive business or personal information, silent transmission to a third party creates a privacy and data-governance risk, especially in enterprise contexts.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The value written to the sheet is fixed as "平均值", which forces a specific language in user-visible output. For a non-region-specific skill artifact, this is a natural-language locale policy concern because no user opt-in or configurable language choice is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The skill presents its name and short description in Chinese while the operational prompt is fixed in English. This can create a language/locale mismatch without any explicit user opt-in or documented language-selection behavior, which fits the policy category for forced or implicit language choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The file sets DEFAULT_LANGUAGE to "zh", and CLI commands use that default for transcription unless the user overrides it. This imposes a specific language/locale behavior by default rather than prompting for or neutrally detecting user preference.

Content

No source excerpt is available for this finding.