file-transfer-thru-local-workspace

Security checks across malware telemetry and agentic risk

Overview

This appears to be a real local file-transfer skill, but it installs a persistent web server and has authentication and credential-handling gaps that could expose local files if not carefully configured.

Review this skill before installing. If you use it, configure a strong gateway token, avoid password-only/no-auth mode, firewall port 15170 to trusted hosts, inspect and protect the generated systemd service file, and stop or uninstall the service when you no longer need browser-based file transfer.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Risk analysis

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

#
ASI03: Identity and Privilege Abuse
High
What this means

If the service is reachable on a network and no token is loaded, other users may be able to list, download, upload, delete files, or access skill packages without the expected password protection.

Why it was flagged

The server loads only gateway.auth.token and only enforces auth when that token is non-empty. Password-only or token-missing configurations can therefore leave APIs unprotected despite the skill advertising Token/Password smart authentication.

Skill content
return config.gateway?.auth?.token || ''; ... if (GATEWAY_TOKEN && tokenParam !== GATEWAY_TOKEN) { ... }
Recommendation

Use a gateway token before running this skill, restrict the port with firewall rules, and update the service to enforce authentication for token and password modes or refuse to start without auth.

#
ASI03: Identity and Privilege Abuse
Medium
What this means

Your OpenClaw auth secret may be copied into a service file or process environment instead of remaining only in the main OpenClaw config.

Why it was flagged

The installer reads the user's OpenClaw token or password and writes it into a systemd service environment value, creating another persistent location where the credential may be exposed.

Skill content
GATEWAY_PASSWORD=$(grep -o '"password": *"[^"]*"' "${CONFIG_FILE}" ...)
...
Environment=GATEWAY_AUTH_VALUE=${AUTH_VALUE}
Recommendation

Do not embed gateway credentials in service files; read them securely at runtime, protect file permissions, and rotate the token/password if you already installed this version.

#
ASI10: Rogue Agents
Medium
What this means

A local web server may keep accepting file-management requests until you explicitly stop or uninstall it.

Why it was flagged

The install script creates an auto-restarting service or a background nohup process, so the file-transfer server continues running after installation.

Skill content
Restart=always ... systemctl enable openclaw-upload.service
systemctl start openclaw-upload.service ... nohup env UPLOAD_PORT=15170 ... node upload-server.js
Recommendation

Install only if you want a persistent service, confirm who can reach port 15170, and stop or disable the service when it is not needed.

#
ASI02: Tool Misuse and Exploitation
Medium
What this means

If a request can supply a crafted skill name, the server may package or write files outside the intended skills/uploads directories.

Why it was flagged

The skill packaging helper uses the supplied skillName in filesystem paths and a zip command without visible basename, allow-list, or realpath validation.

Skill content
const skillPath = path.join(SKILLS_DIR, skillName);
const zipPath = path.join(UPLOADS_DIR, `${skillName}-skill.zip`);
const zip = spawn('zip', ['-r', zipPath, skillName, '-x', '*/node_modules/*'], { cwd: SKILLS_DIR, ... });
Recommendation

Validate skill names against the enumerated installed-skill list, reject path separators and '..', and confirm resolved paths stay under the intended directories before zipping.