Back to skill

Security audit

MochiLab Skills 助手 · Skills Assistant

Security checks for vulnerabilities and agentic risk

Overview

The skill provides user-requested catalogue browsing, installation and updates, with disclosed credential storage and safeguards against overwriting local changes.

Enter your access key only in your own terminal. Review each selected skill before installing or updating it: a matching checksum verifies download integrity, not the downloaded skill's safety. Logout removes the local key; revoke it on the website to disable it everywhere. Live publisher verification was unavailable.

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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (6)

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

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

md
---
name: mochilab-skills
description: Find, inspect, install and update Skills from the MochiLab catalogue. Use when someone asks what MochiLab Skills can do, wants a Skill for a task, or asks to install or update a MochiLab Skill. Supports Chinese and English.
metadata: {"openclaw":{"requires":{"bins":["node"]},"homepage":"https://mochilab.bz/Skills/Connect.aspx"}}
---

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/mochilab.mjs (reported line 52)May include surrounding context.

js
execFileSync(path.join(system, 'icacls.exe'), [file, '/inheritance:r', '/grant:r', `*${sid}:(F)`], {stdio:'pipe', windowsHide:true});
  } else await fs.chmod(file, 0o600);
}
function credentialPath(env) { return path.join(path.resolve(env.MOCHILAB_CONFIG_DIR || path.join(os.homedir(), '.mochilab')), 'credentials.json'); }
async function loadKey(site, env) {
  if (env.MOCHILAB_SKILLS_KEY) {
    if (!KEY.test(env.MOCHILAB_SKILLS_KEY)) fail('key_invalid', 'Use a Skills access key beginning with mls_.');

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, network, shell.

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.

Unsafe Defaults

Medium
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.

Content

Scanner excerpt · scripts/mochilab.mjs (reported line 90)May include surrounding context.

js
}
export class Client {
  constructor(site, key = '') { this.site = siteUrl(site); this.key = key; }
  async request(relative, {body, auth=false, binary=false} = {}) {
    const url = new URL(relative, this.site + '/');
    if (url.origin !== new URL(this.site).origin || !url.pathname.startsWith(new URL(this.site+'/').pathname)) fail('url_invalid', 'A download must stay on the configured MochiLab site.');
    if (auth && !KEY.test(this.key)) fail('connect_required', 'Connect your account with login first.');

Unsafe Defaults

Medium
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.

Content

Scanner excerpt · scripts/mochilab.mjs (reported line 114)May include surrounding context.

js
if (!response.ok || value.ok === false) { const code=typeof value.error?.code === 'string' ? value.error.code : 'request_failed'; fail(code,apiMessage(code)); }
    return value.ok === true ? value.data : value;
  }
  api(action, body, auth=false) { return this.request('Api/Api.ashx?action='+encodeURIComponent(action),{body,auth}); }
}
const CRC_TABLE = Array.from({length:256}, (_,n) => { let c=n; for(let j=0;j<8;j++) c=c&1 ? 0xedb88320^(c>>>1) : c>>>1; return c>>>0; });
export function crc32(bytes) { let c=0xffffffff; for(const b of bytes) c=CRC_TABLE[(c^b)&255]^(c>>>8); return (c^0xffffffff)>>>0; }

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · LICENSE (reported line 7)May include surrounding context.

text
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/mochilab.mjs:46

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/mochilab.mjs:45