T09 · Insecure Skill Coding Practices
- Location
scripts/bilibili_pipeline.mjs:34- Finding
Shell Command Injection Through Attacker-Controlled Video URL
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly aligned with Bilibili transcription, but a crafted URL could cause unsafe command execution or non-Bilibili network access.
Install only if you are comfortable running local yt-dlp commands and sending audio to SiliconFlow for ASR. Until the URL handling is fixed, avoid using untrusted or user-supplied links, because non-Bilibili URLs or crafted URLs may exceed the skill's intended behavior.
scripts/bilibili_pipeline.mjs:34Shell Command Injection Through Attacker-Controlled Video URL
scripts/bilibili_pipeline.mjs:34Unrestricted URL Processing Enables Server-Side Requests Outside the Declared Bilibili Scope
Referenced artifact was not completely inspected
3. 运行 `scripts/bilibili_pipeline.mjs`。
The skill advertises QQbot automatic push of processing results but does not clearly warn users that transcripts or summaries may be automatically transmitted to an external messaging endpoint. Because the skill processes user-supplied video content and may generate full transcripts, silent forwarding increases the risk of unintended disclosure of potentially sensitive content.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
// Fetch official subtitles from B站 API
if (result.bvid && info.cid_comments) {
const apiUrl = `https://api.bilibili.com/x/player/v2?bvid=${encodeURIComponent(result.bvid)}&cid=${encodeURIComponent(info.cid_comments || info.cid)}`;
const subResp = await fetchJson(apiUrl);
const subtitleItems = subResp.json?.data?.subtitle?.subtitles ?? [];
result.subtitles = subtitleItems.map((item) => ({
The SiliconFlow endpoint use is a true external-data-transfer issue because the script uploads user-derived media content to a non-Bilibili service. While this appears to be intended functionality rather than malicious exfiltration, the skill context makes it moderately risky because users may not realize their downloaded audio is being transmitted externally for processing.
form.append("file", new Blob([buffer], { type: ext }), `audio.${filePath.endsWith(".m4a") ? "m4a" : "mp3"}`);
form.append("model", model);
const response = await fetch("https://api.siliconflow.cn/v1/audio/transcriptions", {
method: "POST",
headers: { Authorization: `Bearer ${apiKey}` },
body: form,
The SiliconFlow endpoint use is a true external-data-transfer issue because the script uploads user-derived media content to a non-Bilibili service. While this appears to be intended functionality rather than malicious exfiltration, the skill context makes it moderately risky because users may not realize their downloaded audio is being transmitted externally for processing.
form.append("file", new Blob([buffer], { type: ext }), `audio.${filePath.endsWith(".m4a") ? "m4a" : "mp3"}`);
form.append("model", model);
const response = await fetch("https://api.siliconflow.cn/v1/audio/transcriptions", {
method: "POST",
headers: { Authorization: `Bearer ${apiKey}` },
body: form,
The script uploads downloaded audio to SiliconFlow for transcription, but there is no explicit user-facing disclosure or consent step at the point of transfer. Because audio may contain personal data, private speech, or copyrighted content, silently sending it to a third-party service creates a real privacy and compliance risk rather than a purely cosmetic issue.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
- **Windows**: `winget install OpenJS.NodeJS.LTS` or download from https://nodejs.org/
- **macOS**: `brew install node`
- **Ubuntu/Debian**: `sudo apt-get install -y nodejs npm`
### yt-dlp
The natural-language instructions and usage description are entirely Chinese, which can amount to forcing a specific language without user opt-in. No note explains that the skill is intentionally region-specific or offers alternative language support.
Multiple user-facing strings, including duration formatting and the generated markdown summary, are fixed in Chinese. This forces a specific language/locale for output without any opt-in or configuration path, which matches the policy's language-choice concern.
Detected: suspicious.dangerous_exec