Back to skill

Security audit

suji-board

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent local note/export tool, but it needs Review because deleted images/files can remain stored locally and its no-network privacy promise is not fully accurate.

Install only if you are comfortable with browser-local storage retaining sensitive content unless the publisher fixes deletion cleanup. Treat the app as mostly local, not strictly offline: checking updates, following the upgrade link, or opening feedback can contact ClawHub or Google. Avoid storing highly sensitive documents or images until the deletion and disclosure issues are addressed.

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

Warning
Location
assets/word-doc.html:1009
Finding

Deleted Images and Files Remain in IndexedDB

Content
View full analysis
{ trash.unshift({ text: e.text, deletedAt: Date.now() }); saveTrash(); entries.splice(i, 1); save(); render(); updateTrashBadge(); toast("已移入回收站"); }); ``` Folder deletion removes the folder metadata but does not delete the corresponding file records from IndexedDB: ```javascript del.addEventListener("click", (e) => { e.stopPropagation(); if (!confirm(`删除文件夹「${f.name}」?其中的 ${f.files.length} 个文件也会一并删除。`)) return; folders = folders.filter((x) => x.id !== f.id); save(); if (activeId === f.id) activeId = null; renderFolderList(); renderMain(); toast("已删除文件夹"); }); ``` Deleting an individual file deliberately retains its original blob: ```javascript delBtn.addEventListener("click", () => { if (!confirm(`删除文件「${file.name}」?`)) return; try { const t = JSON.parse(localStorage.getItem("wordpad_trash") || "[]"); t.unshift({ type: "file", text: file.text || "", name: file.name, size: file.size, mime: file.type || "", uploadedAt: file.uploadedAt, folderId: f.id, folderName: f.name, origId: file.id, deletedAt: Date.now() }); localStorage.setItem("wordpad_trash", JSON.stringify(t)); } catch (e) { console.warn("trash save failed", e); } // 不删 blob,恢复时还能用 f.files = f.files.filter((x) => x.id !== file.id); save(); renderFolderList(); renderMain(); }); ``` Permanent purge removes only trash metadata: ```javascri ...[truncated 2317 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
assets/word-doc.html:1706
Finding

Offline Privacy Claims Conflict with External Network Operations

Content
View full analysis
前往升级 ``` It also sends a request to an external API when the user manually checks for updates: ```javascript const API_URL = "https://clawhub.ai/api/v1/skills/suji-board"; fetch(API_URL) .then(function(r) { return r.json(); }) .then(function(data) { const latest = data && data.skill && data.skill.tags && data.skill.tags.latest; if (!latest) { toast("检查更新失败,请稍后再试"); return; } try { localStorage.setItem(CACHE_KEY, JSON.stringify({ latest: latest, checkedAt: Date.now() })); } catch (e) {} if (compareVersions(latest, CURRENT) > 0) { showUpdateBar(latest); } else { toast("当前已是最新版本 v" + CURRENT); } }); ``` The feedback control opens Google Forms: ```javascript const FEEDBACK_URL = "https://docs.google.com/forms/d/e/1FAIpQLSeq6oQKhZ44zH6wgDoO0BTeC4IzckzjhRqwLLz96m5uWmwrng/viewform?usp=publish-editor"; document.getElementById("btn-feedback").addEventListener("click", function() { window.open(FEEDBACK_URL, "_blank", "noopener"); }); ``` ### Technical Analysis The update request and external links are user-triggered, and the reviewed code does not attach note text, images, uploade ...[truncated 1737 chars]
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
核心产物:`assets/word-doc.html`。直接用浏览器打开即可使用,无需安装任何依赖。

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
核心产物:`assets/word-doc.html`。直接用浏览器打开即可使用,无需安装任何依赖。

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill description uses very broad trigger phrases such as general requests to build a note-taking, clipboard, or HTML-packaging tool. In an agent ecosystem, overly broad invocation criteria can cause the skill to activate for common user requests outside its intended scope, leading to unnecessary file generation, unintended handling of user content, or routing users into a capability they did not ask for explicitly.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The page includes remote version-check behavior and an external upgrade link, which breaks the expected trust boundary for a local-only note/export tool. Even if the current fetch only reads version metadata, it creates unsolicited network egress, exposes user IP/browser metadata to a third party, and introduces a remote dependency that could later be abused for tracking or social-engineered update prompts.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

A remote version-check fetch is not necessary for a note board whose stated purpose is local text/image collection and Word export. In this context, unexpected outbound requests are more sensitive because users may paste private notes and expect a self-contained frontend app; any network capability undermines that expectation and expands the attack surface.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The root element declares lang="zh-CN", and all visible UI text is Chinese-only throughout the file. Under the policy, forcing a specific language/locale without user opt-in is a natural-language policy violation unless the restriction is explicitly documented and justified, which is not present here.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill opens an external Google Forms feedback page that is unrelated to the core offline note-board/export function and is not clearly disclosed in the manifest purpose. This creates an unexpected navigation to a third-party service, enabling user tracking and possible disclosure of sensitive notes if users assume the feedback channel is part of the trusted local tool.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The feedback button opens a third-party site unrelated to the skill's core document-board behavior. While not an exploit by itself, it is an unexpected external interaction in a tool that otherwise presents itself as local and dependency-free, which can facilitate tracking or confuse users into sharing sensitive content externally.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.