T09 · Insecure Skill Coding Practices
- Location
scripts/main.py:96- Finding
Arbitrary API endpoint can receive the bearer token and sensitive academic content
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it claims, but it handles sensitive recordings with under-scoped network and runtime-install behavior that users should review carefully.
Install only if you are comfortable uploading recordings and generated summaries to SenseAudio and storing raw transcripts locally. Use it with non-confidential material or approved recordings, avoid setting SENSEAUDIO_API_BASE except to a trusted official endpoint, and prefer an environment where dependencies are preinstalled rather than allowing runtime pip installation.
scripts/main.py:96Arbitrary API endpoint can receive the bearer token and sensitive academic content
scripts/main.py:22Unpinned dependency is installed automatically during program startup
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
Referenced artifact was not completely inspected
14. 不要绕到其他 TTS skill 或手工拼路径回复。会议摘要语音必须通过本 skill 的 `scripts/main.py tts` 或 `scripts/main.py run` 生成。
The skill invokes shell commands, reads/writes local files, uses environment variables, and makes network calls, but it does not declare any tool scope restrictions such as allowed-tools or permissions. That creates an overly broad execution surface where the agent may use more capabilities than users expect, increasing the chance of unintended command execution, file exposure, or external data transmission.
This skill processes potentially sensitive academic discussion recordings and writes transcripts, diarized text, LLM input files, and audio summaries to local storage, but it does not prominently warn the user about that data handling. Users may unknowingly expose unpublished research, advisor feedback, personal data, or confidential institutional information through persistent local artifacts and external API submission.
The skill explicitly instructs the agent to persist raw transcripts, diarized transcripts, verbose ASR JSON, and llm_meeting_input.txt, all of which may contain highly sensitive meeting content. Persisting these artifacts by default increases the risk of local disclosure, accidental reuse by other tools, and retention of more data than is necessary for the user’s immediate task.
The instructions prescribe --language zh in the standard execution flow and repeatedly describe the workflow as producing a final Chinese summary text, without offering a user choice of language or documenting a justified region-specific limitation. This is a natural-language locale policy issue because the skill effectively forces a specific language by default.
The default delivery instructions tell the agent to return paths to raw transcript files, encouraging disclosure and continued access to sensitive discussion content beyond the summarized result. Even if the path is only local, surfacing it normalizes retention and may expose confidential research discussions to anyone with filesystem access or later tool runs.
The default prompt is written in English and directs a specific output behavior even though the skill metadata and intended users are Chinese-speaking. This mismatch can cause the skill to respond in the wrong language or apply role/summary assumptions without user opt-in, which may distort academic content and reduce user awareness of what processing is being performed.
The skill enables implicit invocation without any trigger constraints, so the agent may auto-select it in contexts the user did not clearly intend. Because this skill processes recordings and produces summaries, unintended invocation could cause privacy-sensitive academic discussions to be transcribed or summarized without sufficiently explicit user consent.
The prompt explicitly requires the final spoken summary to be in Chinese and gives Chinese-only phrasing conventions. This is a natural-language locale constraint, and the file does not offer opt-in, fallback, or user choice for language.
Auto-installing Python packages at runtime is a real supply-chain risk and is unrelated to the stated purpose of meeting transcription and summary packaging. It allows the skill to modify the host environment and fetch executable code from external infrastructure without prior approval, which is especially risky in agent or shared execution contexts.
The script automatically executes pip install at runtime when requests is missing. Although it does not invoke a shell, it still causes code from an external package index to be fetched and installed during execution, which expands the trust boundary and can lead to arbitrary code execution through dependency confusion, malicious mirrors, or compromised package distribution. In a skill that processes academic recordings, this behavior is not necessary for core functionality and makes the environment materially less safe.
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,
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
},
}
try:
response = requests.post(
f"{self.api_base}{TTS_API_PATH}",
headers=self.headers_json,
json=payload,
The transcribe and run commands default --language to zh, and the file-level instructions and prompts are written to process content in Chinese-specific meeting contexts. This imposes a language/locale choice by default rather than offering a neutral default or explicit user opt-in, which matches the language/locale policy violation category.
The stated scope is converting small academic discussions into minutes and extracting role-specific discussion points. The implementation additionally requests enable_sentiment from the ASR service and injects sentiment labels into diarized output, which expands behavior beyond the manifest's described outputs.