Back to skill

Security audit

Short Video Parser

Security checks for vulnerabilities and agentic risk

Overview

The skill largely does what it claims, but its URL handling can make unintended network requests and it keeps downloaded video/audio files by default.

Review before installing. Use it only with trusted video links, prefer the local parser, avoid untrusted --parse_result input, enable auto_cleanup_temp_files=true unless you explicitly need retained media, and run it in an environment with restricted network egress if possible.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/parser/__init__.py:132
Finding

Server-Side Request Forgery Through Weak URL and Redirect Validation

Content
View full analysis
VideoInfo: async with httpx.AsyncClient(follow_redirects=True) as client: response = await client.get(share_url, headers=self.get_default_headers()) response.raise_for_status() ``` `scripts/transcribe.py:137-151`: ```python def download_video(video_url, output_path): """ 下载视频文件到本地 """ print(f"正在下载视频: {video_url} -> {output_path}") headers = {"User-Agent": USER_AGENT} try: response = requests.get(video_url, headers=headers, stream=True, timeout=300) response.raise_for_status() with open(output_path, "wb") as f: for chunk in response.iter_content(chunk_size=8192): if chunk: f.write(chunk) print("视频下载完成") return True ``` `scripts/transcribe.py:247-254`: ```python # 使用外部 API parse_api_url = env_vars.get("parse_api_url", "") full_parse_url = f"{parse_api_url}{quote(video_url_to_parse)}" try: response = requests.get(full_parse_url, timeout=30) response.raise_for_status() parse_result = response.json() ``` ### Technical Analysis Platform detection searches for an allowed domain as a substring anywhere in the complete URL. It does not parse the URL and compare its actual hostname against the platform allowlist. Consequently, ...[truncated 3478 chars]
Remediation
View remediation
bool: hostname = hostname.rstrip(".").lower() allowed = allowed.rstrip(".").lower() return hostname == allowed or hostname.endswith("." + allowed) ``` 4. Resolve the hostname before connecting and reject every resolved loopback, private, link-local, multicast, unspecified, or reserved IP address using Python's `ipaddress` module. 5. Disable automatic redirects and validate the scheme, hostname, and resolved address of every redirect target before following it. 6. Apply the same validation to `video_url` values returned by local parsers, external parsing APIs, and `--parse_result`. 7. Restrict media downloads to documented platform/CDN domains where operationally possible. 8. Enforce response size limits by checking `Content-Length` and stopping streamed downloads after a configured maximum. 9. Validate expected media content types before writing and processing responses. 10. Apply network-level egress controls that deny access to loopback, private networks, and cloud metadata ranges as defense in depth. 11. Treat externally supplied parse results as untrusted input and validate their complete schema before use. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
scripts/transcribe.py:228
Finding

Sensitive Video and Audio Files Are Retained by Default

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (88)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

描述中的“多平台短视频链接解析”与代码基本一致,且代码确实支持多个平台的分享链接和视频ID解析。但代码仅展示了平台到解析器的映射,以及 parse_video_share_url / parse_video_id 两个入口,用于识别来源并调用对应解析器返回视频信息。没有任何语音识别、音频抽取、转录、文本生成或批量处理相关实现。因此,声明的关键能力之一——自动语音转文字——与实际代码行为明显不符,构成描述与行为不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

声明描述的是一个覆盖抖音、快手、B站等多个平台的短视频/图文解析与语音转文字技能。但提供的代码块只包含 AcFun 解析器,主要通过抓取 AcFun 页面并解析 HTML/嵌入 JSON 来获得视频播放地址、封面、标题和作者信息。代码没有任何音频下载、语音识别、转录流程,也没有体现抖音、快手、B站等平台的处理逻辑。虽然这可能只是整个项目中的一个子模块,但就该代码块本身而言,与声明的核心能力存在明显不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

从该代码片段看,实际功能是为短视频解析器提供基础类型和抽象接口,这与“短视频链接解析”方向部分一致,且支持的平台枚举也覆盖抖音、快手、B站等多个来源。但声明中的重要能力“自动提取语音内容转录为文字”完全没有体现,属于明显未实现的能力。此外,这段代码本身并未真正执行各平台链接解析,只是定义了 parse_share_url / parse_video_id 的抽象方法,因此若将声明理解为当前代码已具备完整解析能力,也存在夸大。未发现额外越权、无关资源访问或隐藏能力;主要问题是声明比代码实际行为更强。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

该代码的实际功能是一个面向 B 站的视频解析模块,主要通过 B 站公开 API 获取视频元数据和播放地址。它确实与“解析短视频链接、获取视频元数据”中的一部分目标相关,但范围明显更窄:只支持 B 站,不支持描述中列出的抖音、快手等多个平台;也没有任何语音识别、字幕抽取或音频转文字处理逻辑。此外,URL 解析只接受 b23.tv 跳转和 bilibili.com/video/BV... 形式,未体现图文内容支持。因此,描述对该代码片段的能力存在明显夸大和不准确之处。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

声明描述的是一个多平台短视频/图文解析并带有音频转写能力的技能。但该代码片段的实际行为非常有限,只针对逗拍平台调用固定接口获取视频元数据,返回字段也仅包括视频URL、封面、标题和作者信息。代码中没有任何语音下载、音频识别、转写流程,也没有显示支持抖音、快手、B站或图文内容解析。因此,代码实际能力明显小于且不同于声明的核心用途,属于描述与行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

代码核心行为是 DouYin 解析器,仅处理 www.iesdouyin.com、www.douyin.com 和 v.douyin.com 链接,提取 video_id,访问抖音页面或 slides API,解析视频/图集信息并返回 VideoInfo。它确实覆盖了“短视频/图文链接解析”和“提取元数据/媒体地址”的一部分,但范围明显小于声明:没有任何快手、B站或其他平台逻辑,也没有语音内容识别、字幕提取或转录文字相关实现。因此描述对能力范围和关键功能都有夸大,属于明显不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

声明描述的是一个多平台短视频/图文解析并带语音转写的综合技能,而当前代码块的实际功能明显更窄,仅是好看视频解析器的一个具体实现。它通过访问好看视频接口获取视频 URL、封面、标题和作者信息,属于视频元数据抓取;没有体现多平台支持、图文处理、批量能力,也没有任何语音识别或文本转录相关实现。因此,代码实际行为与声明用途存在显著不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

声明描述的是一个多平台短视频/图文解析并带语音转写的通用技能,但该代码块的实际功能是单一的虎牙视频元数据解析。它通过访问虎牙 API 获取指定视频的播放地址、封面、标题和作者信息,属于较窄的元数据提取功能。代码没有显示任何音频提取、ASR 转录、其他平台适配、图文内容处理或批量处理逻辑,因此与声明的核心能力存在明显不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

代码行为与描述存在明显不一致。该实现的核心功能是解析快手分享链接并提取结构化媒体信息,属于视频元数据/图集解析器的一部分。它没有表现出“自动提取语音内容转录为文字”的能力,也没有显示对抖音、B站等多平台支持的实现证据。虽然从整体项目角度可能存在其他平台解析器,但就所给代码片段而言,已能明确判断其实际能力显著少于描述中的关键承诺,尤其缺失语音转文字这一重要功能,因此应判定为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

该代码块的实际职责是一个特定站点解析器(梨视频)。它通过 pearvideo 的接口获取视频播放地址和封面,属于单平台、单视频基础元数据解析实现。相比之下,声明描述的是一个更广泛的多平台短视频/图文解析与语音转写技能,核心能力范围明显更大。这里不是简单的实现细节缺失,而是主要功能描述与当前代码实际行为存在实质性不一致,因此应判定为 mismatch。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

该代码块的实际功能是一个针对绿洲分享页的专用解析器,只做网页请求与 HTML 选择器提取,返回视频元数据。与声明中的“多平台短视频/图文解析”和“语音转文字”存在明显差异。虽然获取视频元数据这一点与声明部分重合,但核心能力范围被显著夸大,因此应判定为描述与行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

该代码块的核心用途是美拍视频页面解析:通过HTTP请求获取页面,再用CSS选择器提取视频封面、标题、作者信息,并从页面中的data-video字段经自定义解码得到真实视频URL。这与声明中的“多平台短视频/图文解析 + 语音转文字”存在明显差异。尤其是代码没有任何抖音、快手、B站适配逻辑,也没有音频下载、语音识别、文本输出等实现。因此描述显著夸大了能力,属于描述与实际行为不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

该代码块的核心功能是一个特定站点解析器:解析皮皮搞笑分享链接中的 post ID,调用 share.ippzone.com 接口获取帖子详情,并组装 VideoInfo 返回。实际行为局限于单平台、单条内容、基础元数据提取。相比声明描述,存在明显的能力夸大与范围不符,尤其是“支持抖音/快手/B站等多个平台”以及“自动语音转文字”在代码中完全没有体现,因此应判定为描述与实际行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

该代码的实际功能是一个针对皮皮虾内容的解析器,核心行为是访问皮皮虾接口获取作品元数据,并组装为 VideoInfo 返回。它确实属于“短视频/图文链接解析”和“获取视频元数据”范畴的一部分,但与声明相比存在明显缩水:一是平台覆盖范围不符,代码只支持单一平台皮皮虾,而非描述中的抖音、快手、B站等多个主流平台;二是描述中特别强调的“自动提取语音内容转录为文字”在代码中完全没有体现。因此,描述未准确代表该代码块的实际行为。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

该代码片段的核心行为是调用度小视/全民小视频的远程API获取单个平台的视频元数据,属于特定平台解析器。描述则宣称支持多个主流平台的短视频和图文链接解析,并可自动做语音转文字,这些关键能力在代码中均未出现。虽然“获取视频元数据”这一小部分与代码行为部分一致,但整体描述明显夸大且与该代码片段的实际职责不符,因此应判定为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

声明描述的是一个多平台短视频/图文解析并带语音转写的通用技能,但提供的代码片段只包含一个针对“全民K歌”的解析器。其行为是访问 kg.qq.com,解析页面中的 window.DATA JSON,并提取媒体与作者元数据。代码的主要目的比声明狭窄且不同,缺少声明中的关键能力,尤其是多平台支持和音频转写。因此描述与实际行为不一致,属于明显不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

描述与代码行为存在明显不一致。代码的主要功能是解析小红书分享页,提取视频/图文资源和作者、标题等信息,这只覆盖了“解析链接并获取部分元数据”的一小部分。它没有体现对抖音、快手、B站等多个平台的支持,也没有任何语音转录相关实现。批量处理虽然可能由系统其他部分实现,但在该代码块中并未体现,因此不能据此支持声明中的该能力。整体上,声明明显夸大了此代码块实际实现的范围。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

代码的核心行为是一个特定平台解析器 SixRoom,其功能限于解析六间房分享链接或视频 ID,并调用六间房移动接口获取 playurl、picurl、title、作者昵称和头像等元数据。它没有体现声明中的多平台覆盖能力,也没有任何图文内容处理、语音识别、字幕转录或批量处理逻辑。因此,声明描述明显宽于且不同于该代码片段的实际能力,属于实质性不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

该代码块的核心行为是 Twitter/X 内容解析,而非声明中的多平台短视频解析与语音转文字。它通过解析 tweet URL 或 t.co 短链,访问 Twitter 的 syndication 接口,提取推文文本、作者资料、视频 mp4 地址、封面以及图片集合。这与“支持抖音、快手、B站等多个主流平台”明显不一致。此外,声明中特别提到“自动提取语音内容转录为文字”,但代码中没有任何下载音频、调用语音识别服务或生成转录文本的逻辑。虽然“解析图文/视频链接并获取元数据”这一高层方向部分相关,但平台范围和关键能力都存在实质性偏差,因此应判定为描述与实际行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

声明描述的是一个面向抖音、快手、B站等平台的短视频解析与语音转写技能,属于较复杂的内容解析/转录能力。而给出的代码片段只是一个通用的 URL 工具函数:使用 urlparse 和 parse_qs 从 URL 查询字符串中读取指定 key 的值,并做缺失/空值校验。这可以作为更大系统中的辅助实现细节,但就当前代码片段本身而言,既没有展示平台识别、链接解析、视频/图文信息提取,也没有任何音频处理或转录逻辑。因此,代码实际行为与声明用途存在明显不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

代码的核心行为是微博专用解析器:根据微博分享链接类型提取 video_id 或 post_id,请求微博视频 API、移动端状态接口或解析 HTML 页面,返回视频/图片、标题、作者头像等元数据。其能力范围明显小于且不同于声明:没有抖音、快手、B站等平台支持,也没有语音内容提取、下载音频、调用转写服务或任何文本转录流程。因此描述与实际行为存在实质性不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

该代码块的实际功能是针对微视平台调用远程接口获取视频元数据,属于单平台视频解析器实现。它没有任何语音提取、音频下载、ASR 转写或文本输出逻辑,因此与声明中“自动提取语音内容转录为文字”的核心能力明显不符。此外,声明强调支持多个主流平台和图文链接,但此代码仅处理微视 feedid 对应的视频信息,未体现多平台或图文解析能力。虽然技能整体可能由多个文件共同组成,但就所提供代码块而言,其行为明显比声明更窄,且缺失一个重要已声明能力,因此应判定为描述与代码行为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

描述与代码行为存在明显不符。该代码片段的实际职责是一个西瓜视频解析器,核心功能是接收分享链接或 video_id,访问 ixigua/m.ixigua 页面,解析页面中的 JSON 数据,并返回视频 URL、封面、标题和作者信息。描述则宣称该技能支持抖音、快手、B站等多个平台、支持短视频和图文链接、并能做语音转录。这些关键能力在代码中均未体现。虽然该片段可能只是整个技能的一部分,但基于提供代码来看,其能力范围远窄于声明,且缺少最关键的语音转文字能力,因此应判定为不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

声明描述的是一个多平台短视频/图文解析并带语音转写的综合技能,但实际代码块只是一个“新片场”专用解析器。其行为集中于:访问分享链接、解析页面中的 NEXT_DATA、调用新片场媒体接口获取 MP4 播放地址,并封装基础视频元数据返回。代码没有出现抖音、快手、B站等其他平台的处理逻辑,也没有任何音频下载、语音识别、文本转录或批量处理实现。因此,实际行为与声明用途存在明显且实质性的能力不匹配。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

声明的核心能力是“多平台短视频/图文解析 + 语音转文字”,而实际代码只是一个针对最右平台的单平台解析器。它通过 pid 调用最右接口,提取视频 URL、标题和作者信息,属于视频元数据获取的一小部分实现。代码中没有抖音、快手、B站等平台适配逻辑,也没有图文专门处理、批量处理机制或任何语音转录能力。因此声明显著夸大并偏离了该代码块的实际行为,属于明显不匹配。

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
README_EN.md:29

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
README.md:29

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:49