Back to skill

Security audit

Sites to IMA

Security checks for vulnerabilities and agentic risk

Overview

The skill’s bulk website-to-knowledge-base workflow is mostly disclosed, but it includes anti-bot bypass guidance and unsafe setup commands that users should review before installing.

Install only if you intend to run bulk website crawling into IMA and have permission to collect the target sites. Review the execution plan before confirming imports, avoid protected sites unless you have authorization, prefer pinned dependencies or a prebuilt environment, and do not run the documented dpkg lock cleanup command automatically.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:237
Finding

Unpinned Dependencies and Unverified Browser Download Source

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:237-242, 247; duplicated in README.md:101-106
Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Vulnerable Code

SKILL.md:237-242:

bash
pip install requests openpyxl            # 必装
pip install playwright                    # 浏览器兜底通道需要
# 浏览器下载必须走国内镜像,直连必超时:
PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright/ playwright install chromium
apt-get install -y --no-install-recommends xvfb   # 有头模式(过 CF 必需)配合 xvfb-run
pip install patchright                    # playwright 反检测 fork,CF 站点备选(安装后同样走镜像装浏览器)

SKILL.md:247:

markdown
- **`playwright install` 直连下载必超时**,必须设 `PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright/`(镜像约 30 秒装完)。

The same installation instructions are exposed to users in README.md:101-106:

bash
pip install requests openpyxl            # 必装
pip install playwright                    # 浏览器兜底通道需要
# 浏览器下载必须走国内镜像,直连必超时:
PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright/ playwright install chromium
apt-get install -y --no-install-recommends xvfb   # 有头模式(过 CF 必需)
pip install patchright                    # 反检测浏览器 fork,强防护站点备选

Technical Analysis

The installation commands do not pin package versions or cryptographic hashes. Consequently, the effective code installed by the Skill can change after the Skill itself has been reviewed. Python packages may also execute package-controlled build or installation logic.

The Chromium download is redirected to npmmirror.com, a non-official mirror, through PLAYWRIGHT_DOWNLOAD_HOST. The Skill does not prescribe checksum, signature, provenance, or artifact-version verification. This creates a supply-chain trust dependency on both the package repositories and the browser mirror.

This finding does not establish that the named packages or mirror are malicious. The vulnerability is the absence of ...[truncated 1557 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin every Python dependency to a reviewed exact version in a lock file.
  2. Require hashes for all resolved packages, such as through a hash-locked requirements file and pip install --require-hashes.
  3. Lock and review transitive dependencies rather than pinning only direct dependencies.
  4. Prefer the official Playwright browser distribution source.
  5. If a mirror is operationally required, pin the exact browser revision and verify a trusted SHA-256 digest or vendor signature before extraction or execution.
  6. Install dependencies into an isolated virtual environment as an unprivileged user.
  7. Build a reviewed environment image in advance rather than installing mutable dependencies during each Skill invocation.
  8. Remove patchright and browser dependencies from the default path unless browser fallback is actually required.
  9. Add automated dependency provenance, vulnerability, and integrity checks to the release process.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:249
Finding

Unsafe Package-Manager Lock Recovery Procedure

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:249
Vulnerability Type: T09: Insecure Skill Coding Practices
Risk Level: Medium

Vulnerable Code

SKILL.md:249:

markdown
- apt 报锁占用(前次超时进程残留):`kill -9 <pid>; rm -f /var/lib/dpkg/lock*; dpkg --configure -a` 后重试。

Technical Analysis

The recovery instruction forcibly terminates an unspecified process with SIGKILL and then deletes package-manager lock files. A package-manager lock does not by itself prove that its owner is stale. It may represent a legitimate, active apt or dpkg transaction.

SIGKILL prevents the target process from performing cleanup or completing atomic package-database operations. Removing /var/lib/dpkg/lock* without first proving that no package-management process remains active can allow another transaction to begin while the original operation or one of its child processes is still using package state.

The wildcard also affects every matching lock file in /var/lib/dpkg, rather than a specifically verified stale lock. Running dpkg --configure -a afterward may repair some interrupted states but does not make it safe to terminate an arbitrary active transaction or remove locks prematurely.

Attack Path

  1. A browser or operating-system dependency installation encounters a package-manager lock.
  2. The agent assumes the lock belongs to a stale process and follows the documented command.
  3. The supplied PID is incorrect, reused, or belongs to a legitimate package-management operation.
  4. kill -9 terminates that process without cleanup.
  5. The wildcard command removes package-manager locks while package state may still be in use.
  6. A retry or dpkg --configure -a operates on interrupted or concurrently accessed state, potentially leaving packages partially installed or the package database inconsistent.

This issue can also be triggered accidentally without an attacker. An attacker with influence ove ...[truncated 865 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove the blanket kill -9 and wildcard lock-deletion instruction.
  2. First identify the lock owner using supported inspection tools and verify that it is an actual apt or dpkg process.
  3. Wait for legitimate unattended upgrades or package operations to finish.
  4. If a confirmed stale process must be stopped, attempt graceful termination and verify process identity immediately before signaling it.
  5. Confirm that no apt, apt-get, dpkg, or unattended-upgrade process remains active before considering lock cleanup.
  6. Use distribution-supported recovery procedures and target only a specifically verified stale lock.
  7. Back up relevant package metadata before repair when the environment is persistent.
  8. Run dpkg --audit and validate package state after recovery.
  9. Prefer a prebuilt sandbox image so package-manager mutation and lock recovery are unnecessary during Skill execution.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (15)

Ssd 2

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

These lines normalize use of anti-detection tooling and browser fingerprint evasion as part of the environment setup, framing them as standard options for overcoming protection mechanisms. In context, this is dangerous because the skill is designed for large-scale scraping and ingestion, so anti-detection instructions materially increase the chance of unauthorized access attempts and policy-violating collection.

Content

No source excerpt is available for this finding.

Ssd 4

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The workflow explicitly instructs the agent to probe multiple channels and, when blocked, validate alternate ingestion paths against Cloudflare-protected sites using platform-side import/fetch behavior. This operationally guides anti-bot and access-control evasion to ingest content from protected sites, creating legal, policy, and platform-abuse risk and potentially causing irreversible imports of unauthorized content.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
92% confidence
Finding

The skill recommends force-killing processes and deleting dpkg lock files as a recovery step, which is a dangerous operational command pattern in an agent context. If executed automatically or in the wrong environment, it can corrupt package-management state, disrupt unrelated processes, or damage the sandbox/host configuration beyond the skill's intended scope.

Content

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

md
- playwright 优先装进本地 venv 固定路径(uvx 冷启动 monorepo 依赖易超时)。
- **`playwright install` 直连下载必超时**,必须设 `PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright/`(镜像约 30 秒装完)。
- **不要用 `chromium-headless-shell`**(旧版无头,指纹特征明显,CF 必拦);要装完整版 `chromium`(new headless)。apt 装 chromium 完整包会 OOM(exit 137),不要尝试。
- apt 报锁占用(前次超时进程残留):`kill -9 <pid>; rm -f /var/lib/dpkg/lock*; dpkg --configure -a` 后重试。
- 有头模式运行:`xvfb-run -a --server-args="-screen 0 1280x800x24" <python脚本>`。
- 以上全部就位**仍过不了强 CF 站点**(见「站点可行性限制」),环境配置只解决"能跑",不解决"能过"。

Chaining Abuse

High
Category
Tool Misuse
Confidence
94% confidence
Finding

The semicolon-chained command sequence combines process termination, filesystem deletion, and package repair into a single shell line, making safe parameter handling and human review harder. In an agent-driven system this increases the risk of unintended destructive execution, command injection through variable interpolation, and broad side effects outside the task's business purpose.

Content

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

md
- playwright 优先装进本地 venv 固定路径(uvx 冷启动 monorepo 依赖易超时)。
- **`playwright install` 直连下载必超时**,必须设 `PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright/`(镜像约 30 秒装完)。
- **不要用 `chromium-headless-shell`**(旧版无头,指纹特征明显,CF 必拦);要装完整版 `chromium`(new headless)。apt 装 chromium 完整包会 OOM(exit 137),不要尝试。
- apt 报锁占用(前次超时进程残留):`kill -9 <pid>; rm -f /var/lib/dpkg/lock*; dpkg --configure -a` 后重试。
- 有头模式运行:`xvfb-run -a --server-args="-screen 0 1280x800x24" <python脚本>`。
- 以上全部就位**仍过不了强 CF 站点**(见「站点可行性限制」),环境配置只解决"能跑",不解决"能过"。

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

The activation and update examples are presented only in Chinese natural-language commands, and the README does not state that users may interact in another language. For a skill targeting overseas sites and mixed-language content, this reads as a locale/language constraint without explicit user choice or justification.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The documented trigger phrases are very broad, including generic commands like “更新知识库”, which can plausibly appear in ordinary conversation and unintentionally activate a stateful scraping/import workflow. In this skill’s context, accidental activation is more dangerous because it can read local progress state, resume prior targets, and perform note or knowledge-base writes after limited conversational ambiguity.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest description, trigger phrases, and usage boundaries are all written as Chinese-only user utterances, implying the skill is activated and operated through a specific language. The file does not offer any language choice or state that Chinese is optional or region-specific, which creates a locale policy concern.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The template directs the generation and writing of an update manual into a target notebook, implying persistent modification from the start, but provides no user-facing warning or confirmation requirement. For a skill that also creates local files and later drives imports, lack of disclosure can cause unintentional durable changes to user data stores.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger condition uses broad phrases like 'update knowledge base / update site name' that can match ordinary user requests without clearly signaling that a write-heavy ingestion workflow will run. This increases the chance of unintended activation, leading to persistent modifications in notebooks and the knowledge base without sufficiently specific consent.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The template explicitly instructs the agent to send browser-like user agents and to back off/retry when blocked by a WAF. In a website ingestion skill, this crosses from ordinary fetching into guidance for bypassing access controls or anti-bot protections, which can enable unauthorized scraping and create legal or policy risk.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Repeating the vague activation condition inside the execution steps reinforces an overly permissive trigger model for a workflow that performs scraping, imports, and note mutation. In context, the skill is high-side-effect, so underspecified activation meaningfully increases the likelihood of unauthorized or accidental state changes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

These execution steps perform durable actions: importing URLs into the knowledge base, appending to multiple notes, updating local files, and recording state for future runs. Without a clear warning and confirmation gate, a user can trigger large-scale persistent modifications and external content ingestion unintentionally, making this especially risky in a bulk website-import skill.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

All user-facing instructions and trigger phrases in the template are fixed to Chinese, with no indication that users may choose another language. If organizational policy requires avoiding forced language selection without opt-in, this is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The manifest focuses on crawling site content, exporting data, creating categorized index notes, importing into the knowledge base, and generating an update manual. L16 introduces a separate local progress file as a persistent execution state mechanism, which is an additional capability not described in the manifest text.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The skill description mentions exporting xlsx/csv, creating index notes, importing to the knowledge base, and generating an incremental update manual. Lines L28-L29 prescribe persistent local JSON datasets and progress stores as a data base layer, which is an extra storage capability not clearly covered by the manifest's stated outputs.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.