Back to skill

Security audit

2026世界杯实时比分系统

Security checks for vulnerabilities and agentic risk

Overview

This is a plausible World Cup score-site deployment helper, but it runs unpinned remote code as a background service and can kill any process using port 3001 without clear user control.

Review before installing. Run only in an isolated or disposable environment, do not run as root, pin the external repository and dependencies first, remove or confirm the port-killing behavior, and prefer foreground or managed service startup with clear stop/status commands.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T03 · Remote Payload Retrieval and Execution

Warning
Location
scripts/setup.sh:26
Finding

Mutable Remote Application and Dependencies Are Retrieved and Executed Without Integrity Pinning

Content
View full analysis
/dev/null || echo " 无法git pull,继续使用本地代码" else echo "📦 克隆项目..." git clone https://github.com/liuboacean/WorldCup-2026.git "$APP_DIR" cd "$APP_DIR" fi # 安装依赖 echo "📦 安装依赖..." npm install 2>/dev/null || npm install --no-optional # 创建目录 mkdir -p data/matches cache # 检查端口 PORT=3001 if lsof -i :$PORT &>/dev/null 2>&1; then echo "⚠️ 端口 $PORT 已被占用,尝试关闭旧进程..." fuser -k $PORT/tcp 2>/dev/null || true sleep 2 fi # 启动 echo "🚀 启动服务器 (端口 $PORT)..." nohup node server.js > server.log 2>&1 & ``` The same unpinned deployment approach is documented in `SKILL.md:44-49` and `README.md:16-19`. ### Technical Analysis The setup script clones or updates the `master` branch of an external Git repository and immediately installs its npm dependencies and executes `server.js`. It does not pin the application to a reviewed commit hash, verify a signed commit or release, validate an artifact checksum, or otherwise confirm that the downloaded content matches the version that was audited. Because the remote branch is mutable, the effective application payload can change after this Skill package has been reviewed. The `npm install` command also resolves and installs third-party packages. npm package installation can execute lifecycle scripts unless they are explicitly disabled. No reviewed lockfile is supplied in this Skill package, and the script does not use a deterministic installation command such as `npm ci`. This creates two related trust-boundary problems: 1. The external Git repository acts as a mutable remote code-execution channel. 2. The npm dependency graph and installation scripts introduce an ad ...[truncated 1671 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/setup.sh:38
Finding

Setup Script Terminates Any Process Listening on Port 3001 Without Verifying Ownership or Identity

Content
View full analysis
/dev/null 2>&1; then echo "⚠️ 端口 $PORT 已被占用,尝试关闭旧进程..." fuser -k $PORT/tcp 2>/dev/null || true sleep 2 fi ``` ### Technical Analysis The script assumes that any process listening on TCP port 3001 is an obsolete instance of the World Cup application. It then invokes `fuser -k` to terminate the process without validating: - The process executable or command line - The process owner - The working directory - An application-owned PID file - Whether the operator explicitly authorized replacing the service - Whether the process can be shut down gracefully A listening port is not a reliable process-identity mechanism. An unrelated application may legitimately use port 3001. Automatically killing that process violates process isolation and creates a local denial-of-service condition. The command generally cannot terminate a process belonging to another user unless the invoking account has sufficient permissions. Consequently, the scope depends on the privileges used to run the deployment script. ### Attack Path 1. A legitimate, unrelated service is already listening on TCP port 3001. 2. A user or automation system runs `scripts/setup.sh`. 3. `lsof` reports that the port is occupied. 4. The script executes `fuser -k 3001/tcp`. 5. The unrelated service is terminated without process-identity validation or operator confirmation. 6. The setup script starts the downloaded World Cup application on the newly released port. 7. Clients of the original service experience an outage, and the replacement application may receive traffic that was intended for the original service. A local attacker able to influence deployment timing could also arrange for a target service to occupy this port before a privileged deployment is ...[truncated 640 chars]
Remediation
View remediation
/dev/null 2>&1; then echo "Port $PORT is already in use; refusing to terminate an unidentified process." exit 1 fi ``` 2. Allow the operator to select a different port through a validated environment variable or command-line option. 3. If automated replacement is required, maintain an application-owned PID file in a protected runtime directory. Before signaling the PID: - Confirm that the PID is numeric and active. - Confirm that the PID file is owned by the dedicated application account. - Verify the process owner, executable path, command line, and working directory. - Confirm that the process belongs to this specific deployment. 4. Send a graceful termination signal first, wait for a bounded period, and only use a stronger signal after explicit identity validation. 5. Require an explicit replacement flag or interactive confirmation before stopping an existing verified application instance. 6. Run the deployment under a dedicated unprivileged account so it cannot terminate unrelated system services. ]]>
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (12)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill documents shell-capable deployment actions (git clone, npm install, mkdir, node, nohup) but does not declare any explicit tool scope or permission boundary. In an agent setting, that mismatch can cause unsafe execution of system-modifying commands without clear user consent or runtime restriction.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrase is broad enough that a normal user request like 'help me deploy the 2026 World Cup live score system' could invoke a skill that performs cloning, package installation, directory creation, and service startup. That increases the chance of accidental execution of system-changing actions without the user's informed understanding of scope.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instructions direct the agent/user to clone remote code, install dependencies, create directories, and run a background process, all of which change the host system and may introduce unreviewed code. Without prominent risk warnings, consent checkpoints, or isolation guidance, this can lead to supply-chain compromise, persistence, or unintended service exposure.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
90% confidence
Finding

The use of nohup ... & creates a persistent background service that may continue running after the session ends, potentially exposing port 3001 and consuming resources without clear lifecycle management. In an agent-executed context, persistence is more dangerous because it can outlive user awareness and remain reachable on the network.

Content

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

node server.js

生产模式(后台守护)

nohup node server.js > server.log 2>&1 &

text

访问 `http://你的服务器IP:3001` 即可使用。

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The documented dataRelay.js component is described as providing 'HE injection,' which is unrelated to a live score application and is highly suspicious in a security review. An unexplained injection-capable relay suggests hidden data manipulation or content insertion behavior that could enable XSS, response tampering, or covert payload delivery if implemented.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script unconditionally identifies and kills whatever process is bound to port 3001 using fuser -k, without verifying that the process belongs to this application. This can terminate unrelated local services and cause denial of service or data loss for other workloads running on the host.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Forcefully terminating a process on a fixed port without explicit consent is unsafe operational behavior in a deployment script. In shared or developer environments, this can disrupt unrelated applications and hide the impact because the script presents termination as a routine setup step.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
65% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · scripts/setup.sh (reported line 49)May include surrounding context.

sh
# 启动
echo "🚀 启动服务器 (端口 $PORT)..."
nohup node server.js > server.log 2>&1 &
sleep 3

# 验证

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The feature list explicitly advertises the skill as using Chinese team and player names, which indicates a fixed language/locale behavior. The document does not mention any user choice, alternate locale, or that the skill is intentionally limited to Chinese users, so this is a natural-language locale policy concern.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
70% confidence
Finding

The manifest presents this skill as a self-contained deployment capability, but the instructions direct the operator to git clone a third-party repository and deploy that code instead. That creates an intent/documentation mismatch: the skill documentation describes one deployable system while operationally delegating execution to externally fetched code not represented in this file.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

文档将技能特性明确写为“完整的中文球队名、球员名、分组信息”,整体说明也默认输出为中文,没有说明可根据用户偏好切换语言。这构成了语言/locale 的单一强制设定,缺少用户 opt-in 或选择。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

All visible comments and runtime messages are presented only in Chinese, which imposes a specific language on users without opt-in. Under the policy, language constraints should either offer a choice or be explicitly justified as region-specific.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.