Back to skill

Security audit

BII 简报 × 贝莱德智库风格(pptx+pdf+html 三格式)

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed local document-conversion pipeline that re-skins BII HTML into BlackRock-style HTML/PDF/PPTX outputs without evidence of hidden persistence, exfiltration, or destructive behavior.

Before installing, confirm you have the right to use the BlackRock-style visual identity and keep the injected non-BlackRock provenance statement in the output. Run the pipeline only on trusted BII HTML/PDF inputs, review the generated files before distribution, and avoid the maintainer publishing commands unless you are intentionally publishing this skill.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (15)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
声明描述的是一个“把简报改造成贝莱德风格并产出三种格式”的生成/转换型技能,主功能应包括重定向样式、注入装饰并导出文件。实际代码 `check_br.py` 并不进行任何转换、注入或导出操作,而是读取源 HTML 与产物文件,依据 token 配置做 7 门验收检查,并在失败时返回非零退出码。这与声明中的核心能力有明显主功能偏差。虽然声明提到了“七门体检”,但该代码仅覆盖体检环节,缺少所宣称的主体能力(风格改造与三格式产出),因此描述不能准确代表该代码块的实际行为。

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
声明描述的是一个完整的品牌化改版与多格式导出技能,而代码片段只实现了“逐页版式体检”的一个很小子功能,且还是通过调用另一个技能中的上游脚本完成。该脚本不修改 HTML、不注入品牌样式、不导出 pptx/pdf/html,也未展示任何颜色映射、装饰件注入或文本比对逻辑。虽然“七门体检”中的某一项可能需要页面测量,因而该脚本可被视为支持性组件,但如果将此代码片段拿来对照整体声明,其实际行为与宣称的核心能力明显不匹配,且主用途更接近页面测量/溢出检查而非风格重定向与三格式产出。

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
声明描述的是一个完整的品牌风格转换与多格式交付流水线,核心在于对现有 BII 简报进行视觉重定向、装饰件注入、版式约束和质量校验,并输出 pptx/pdf/html 三件套。实际代码的用途则明显更窄:输入是“已定稿的贝莱德风格 PDF”,输出是一个以整页位图为底图的 PPTX,并把 PDF 文本放入备注中以保留可检索性。它既不修改颜色和版式,也不进行 HTML/PDF 生成或任何体检校验。因此其主要目的与声明不一致,且缺失了声明中的绝大多数核心能力。

Tp4

High
Category
MCP Tool Poisoning
Confidence
87% confidence
Finding
代码的核心行为与描述中的一部分相符:它确实将 BII HTML 重定向为 BlackRock 风格,执行全局色板重定向与结构装饰注入,并保持对 HTML 的定点修改。但声明的范围明显更大,尤其是“三件套产出(pptx/pdf/html)”在此代码中没有实现;代码只读写 HTML 文件并可写 JSON 报告。其次,描述中的“七门体检”“可见文本逐字零改动比对”也未出现,实际只有 section 数、页脚 span 数、禁用色残留、必备结构等有限断言。再者,“零净增量约束、保证 22 页版式不被挤爆”更多是设计意图与间接约束,而非代码中显式验证的能力。因此,描述高估了该代码块的实际能力,构成描述与行为不一致。

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill explicitly instructs use of file reads, file writes, and shell execution, but does not declare any tool scope or allowed-tools boundary. That creates an over-privileged integration surface where an agent may invoke broader capabilities than users or reviewers expect, increasing the chance of unsafe file modification or command execution through this skill.

Vague Triggers

Medium
Confidence
95% confidence
Finding
This markdown/manifest file lists activation conditions, and one of them uses generic phrases that are not uniquely tied to BII briefs or BlackRock-style conversion. Without stronger scope limits or exclusion examples, the skill could be invoked for unrelated requests about changing style or making another version.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The top-level docstring presents the skill's purpose, rationale, usage, and exit semantics entirely in Chinese, which creates a de facto language requirement for users and maintainers. The file does not indicate that Chinese is optional, configurable, or required for a documented region-specific compliance reason, so this appears to violate the language/locale policy criterion.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
# ── 门 6 · PDF 页数与页面尺寸 ─────────────────────────────────────────
    if a.pdf and os.path.exists(a.pdf):
        info = subprocess.run(['pdfinfo', a.pdf], capture_output=True, text=True).stdout
        npg = int(re.search(r'^Pages:\s+(\d+)', info, re.M).group(1))
        m = re.search(r'^Page size:\s+([\d.]+)\s+x\s+([\d.]+)', info, re.M)
        w, h = float(m.group(1)), float(m.group(2))
Confidence
70% confidence
Finding
subprocess module calls execute external commands. Without careful input validation, this enables command injection.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
def pdfinfo(pdf):
    out = subprocess.run(['pdfinfo', pdf], capture_output=True, text=True).stdout
    pages = int(re.search(r'^Pages:\s+(\d+)', out, re.M).group(1))
    m = re.search(r'^Page size:\s+([\d.]+)\s+x\s+([\d.]+)\s+pts', out, re.M)
    if not m:
Confidence
70% confidence
Finding
subprocess module calls execute external commands. Without careful input validation, this enables command injection.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
def page_text(pdf, n, keep_footer):
    t = subprocess.run(['pdftotext', '-f', str(n), '-l', str(n), '-layout', pdf, '-'],
                       capture_output=True, text=True).stdout
    lines = [re.sub(r'\s+$', '', l) for l in t.splitlines()]
    lines = [l for l in lines if l.strip()]
Confidence
70% confidence
Finding
subprocess module calls execute external commands. Without careful input validation, this enables command injection.

subprocess module call

Medium
Category
Dangerous Code Execution
Content
def render_pages(pdf, dpi, tmpdir):
    subprocess.run(['pdftoppm', '-r', str(dpi), '-png', pdf,
                    os.path.join(tmpdir, 'pg')], check=True)
    return [os.path.join(tmpdir, f)
            for f in sorted(os.listdir(tmpdir)) if f.endswith('.png')]
Confidence
70% confidence
Finding
subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Natural-Language Policy Violations

Low
Confidence
82% confidence
Finding
The skill description is written as direct operational guidance in Chinese and does not indicate that users may choose another language or that the language constraint is required for a region-specific purpose. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation.

Natural-Language Policy Violations

Low
Confidence
8% confidence
Finding
SQP-3 is limited to natural-language language or locale policy violations, such as forcing a specific language without user opt-in. This file is style-specific rather than language-forcing, so it does not clearly meet the rule.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
This shell script includes its user-facing description, usage context, and error/help messages only in Chinese. That can violate the language/locale policy because it forces a specific language on users without opt-in or a documented region-specific justification.

Natural-Language Policy Violations

Low
Confidence
87% confidence
Finding
The header comments, usage text, and step descriptions are entirely in Chinese, indicating a language-specific skill experience. Under the policy, language constraints should either offer user choice or be clearly justified as region-specific; no such opt-in or justification appears here.

Static analysis

No suspicious patterns detected.