Back to skill

Security audit

战国群雄传 超越三国群英传的天花板存在 可联机 可对战 不占内存 让你开心

Security checks for vulnerabilities and agentic risk

Overview

This is a playable browser game, but its optional multiplayer server is inconsistently described and lacks basic protections, so users should review it before enabling network play.

Local single-player or same-device play is the safer path. Only run net-server.js or enter a remote WebSocket server if you trust the server, the room participants, and the network; do not expose the relay broadly on the Internet. Expect the skill to copy game files into your workspace and store game progress in browser localStorage.

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
assets/campaign-mode.html:1240
Finding

Peer-Controlled Game State Enables DOM-Based Cross-Site Scripting

Content
View full analysis
Object.assign({},u)); terrain = m.terrain; scenario = m.scenario; turn=m.turn; weather=m.weather; combo=m.combo; turnCount=m.turnCount; battleResolved=m.over; lastWinner=m.winner; myCountry=m.enemyCountry; enemyCountry=m.myCountry; myFormation=m.enemyFormation; enemyFormation=m.myFormation; myStrats=m.enStrats; enStrats=m.myStrats; myStratGenName=m.enStratGenName; enStratGenName=m.myStratGenName; stratUsed={me:m.stratUsed.en, en:m.stratUsed.me}; PLAYER=m.enemyCountry; battleEnemyKey=m.myCountry; currentBattleO=null; const le=document.getElementById('log'); if(le) le.innerHTML=m.logHtml||''; busy=(turn!==localSide()); selected=null; const w=document.getElementById('netWait'); if(w) w.classList.add('hidden'); document.getElementById('screen-battle').classList.remove('hidden'); renderStatus(); render(); renderBattleControls(); renderSelBox(); showTips(); if(battleResolved) showNetEnd(!m.winner); } ``` The skirmish implementation similarly renders each remote log entry as H ...[truncated 4370 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
assets/campaign-mode.html:1293
Finding

Unauthenticated Multiplayer Actions Bypass Host-Side Game Rule Validation

Content
View full analysis
{ if(units.length) Net.send(snapshot()); }); Net.on('ACT', hostApplyAct); Net.on('END', ()=>{ if(turn==='en'){ turn='me'; startHotseatTurn('me'); } }); } function hostApplyAct(a){ if(a.kind==='move'){ const u=unitById(a.uid); if(u){ u.row=a.r; u.col=a.c; u.moved=true; } } else if(a.kind==='attack'){ const att=unitById(a.aUid), def=unitById(a.dUid); if(att&&def){ selected=att; doAttack(att,def); selected=null; } } else if(a.kind==='skill'){ const u=unitById(a.uid); if(u){ selected=u; hostCastSkill(u,a.idx); selected=null; } } else if(a.kind==='strat'){ hostCastStrat(a.key); } render(); renderBattleControls(); renderSelBox(); netAfterAction(); } function hostCastSkill(u,idx){ const sk=SKILLS[u.skills[idx]]; if(!sk) return; if(u.skillUsed||u.sp📜 敌军军师【${s.name}】${s.icon}:${s.desc}`); } ``` The relay forwards any non-`HELLO` message from any peer that has joined a room: ```javascript if (msg.t === 'HELLO') { peer.room = String(msg.room || 'qiguo'); if (!rooms[peer.room]) rooms[peer.room] = new Set(); rooms[peer.room].add(peer); const n = rooms[peer.room].size; peer.socket.write(encodeFrame(0x1, Buffer.from(JSON.stringify({ t: ' ...[truncated 2891 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (23)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill claims to be a zero-setup local launcher, but its documented behavior also supports running a WebSocket relay server for cross-device multiplayer. That mismatch can mislead users and agents into enabling network-exposed behavior they did not consent to, increasing the chance of unintended service exposure or unsafe execution of additional components.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- **战役模式 (Campaign)** — `campaign-mode.html`: pick a state, conquer cities, recruit generals, and unify the realm. Includes the 武将图鉴 collection system. Hotseat

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- **战役模式 (Campaign)** — `campaign-mode.html`: pick a state, conquer cities, recruit generals, and unify the realm. Includes the 武将图鉴 collection system. Hotseat

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- **战役模式 (Campaign)** — `campaign-mode.html`: pick a state, conquer cities, recruit generals, and unify the realm. Includes the 武将图鉴 collection system. Hotseat

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- **普通模式 (Skirmish)** — `skirmish-mode.html`: pick a state + scenario, fast single battle. Hotseat **and 联机** fully supported.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- **普通模式 (Skirmish)** — `skirmish-mode.html`: pick a state + scenario, fast single battle. Hotseat **and 联机** fully supported.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- **普通模式 (Skirmish)** — `skirmish-mode.html`: pick a state + scenario, fast single battle. Hotseat **and 联机** fully supported.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The file materially exceeds the declared skill behavior by implementing a standalone WebSocket relay server, despite the manifest describing a zero-setup local single-file game launcher. Hidden or unjustified network-facing functionality increases the attack surface, can enable unreviewed communication paths, and undermines user/operator trust about what the skill actually does.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

A network server is a significant capability escalation relative to a self-contained browser game because it opens a listening service that can accept and process remote input. Even though the implementation is simple, any undeclared listener can be abused for unauthorized communication, denial of service, or as an unexpected bridge between clients, making the skill context more dangerous rather than less.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file explicitly states the skill is 'purely a launcher' with 'no server, no network' while elsewhere instructing use of a WebSocket relay for multiplayer. Contradictory security-relevant claims reduce trustworthiness and can cause an operator to treat network behavior as harmless local activity, which is dangerous when opening sockets or relaying data between clients.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

Saying 'No server, no build step, no network' is materially false given the documented cross-device net-play flow. Security documentation inaccuracies are risky because they can bypass scrutiny, leading a user or agent to run a network service under the assumption that nothing network-facing is involved.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file includes multiplayer networking logic (BroadcastChannel and WebSocket transport, room join/host flows, and state synchronization) despite the skill being described as a self-contained local HTML game opened in preview. That expands the trust boundary from local-only content to inter-tab and potentially remote communication, which can enable unintended data exchange and behavior not disclosed by the skill metadata.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The game allows users to configure and connect to arbitrary WebSocket servers, which is unnecessary for simply launching a local browser game. This creates an outbound network channel to untrusted endpoints, enabling remote interaction, telemetry leakage, or malicious state injection through a server the skill does not control.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The document sets lang="zh-CN", and all visible UI text throughout the file is presented only in Simplified Chinese. This imposes a specific language/locale on users without any opt-in, selection mechanism, or documentation that the skill is intended to be region-specific.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The HTML exposes multiplayer and networking controls that exceed the skill’s stated purpose of launching a self-contained local single-file game in preview. Expanding capability from offline/local play to networked interaction increases attack surface, creates user expectation mismatch, and can enable unintended data exchange or connectivity from a skill that users would reasonably assume is local-only.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The WebSocket implementation permits cross-device connectivity to an arbitrary server URL, including a user-editable ws:// endpoint, which is not necessary for simply opening a local browser game. This introduces external communication capability, potential data exfiltration of gameplay/state, exposure to untrusted remote input, and unexpected network behavior in an otherwise self-contained skill.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The header comment presents the implementation as a pure pass-through relay. However, the code parses JSON, branches on HELLO, assigns rooms, and generates its own control messages, meaning it performs protocol-level logic rather than mere transparent forwarding.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

These lines direct the agent to create a directory and copy HTML assets into the current workspace, which is a file-writing operation. Although this is part of the launcher behavior, the markdown does not explicitly warn the user that files will be created in their workspace before doing so.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The skill content is written to drive interaction in a specific Chinese-centric language/locale context, and the launch instruction tells the agent exactly what to say without mentioning adapting to the user's preferred language. Under the language/locale policy, skills should not force a specific language without opt-in or a documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The HTML root declares lang="zh-CN", and the full UI text throughout the file is presented only in Simplified Chinese. This effectively enforces a single language/locale experience with no visible opt-in, switcher, or justification for the restriction.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The tutorial text explicitly documents '跨设备联机(需 net-server.js)', meaning some gameplay modes require an external server and additional setup. That directly conflicts with the manifest’s framing that the skill provides a self-contained HTML game playable immediately with zero setup.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The inline tutorial states that cross-device multiplayer requires an additional server component, which conflicts with the broader documentation context that presents the game as self-contained and immediately playable with zero setup. This is an intent/documentation divergence that could mislead users about the skill’s true operational scope.

Content

No source excerpt is available for this finding.