NAS File Courier Skill

WarnAudited by ClawScan on May 18, 2026.

Overview

The NAS file delivery workflow is coherent, but the fallback download-link script can mishandle crafted filenames and a reference command may leave sensitive NAS files outside the cleanup path.

Review and fix the HTTP fallback filename-encoding command before installing. Use a restricted NAS account, keep all downloads under /tmp/openclaw/nas-courier/, confirm each file before sending, and prefer native MEDIA delivery over temporary HTTP links when possible.

Findings (5)

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.

What this means

A malicious or malformed filename on the NAS could cause the agent to run unintended code under the local user account when creating a temporary link.

Why it was flagged

The filename is inserted directly into Python source code. If a NAS filename contains crafted quotes or Python syntax, the fallback command could execute unintended local Python code or fail while generating the download URL.

Skill content
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('${FILENAME}'))")
Recommendation

Do not interpolate filenames into python -c source. Use an argv-safe form such as: python3 -c 'import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))' "$FILENAME".

What this means

Sensitive files copied from the NAS may remain on disk after the skill says cleanup is complete.

Why it was flagged

This reference download path differs from the main workflow's required /tmp/openclaw/nas-courier/ directory and cleanup command. Following it could leave copied NAS files outside the mandatory cleanup scope.

Skill content
rclone copy "nas:<SHARE>/path/to/file.pdf" /tmp/nas-courier/
Recommendation

Use one temp directory consistently, update the reference command to /tmp/openclaw/nas-courier/, and verify cleanup removes only that skill-owned directory.

What this means

The agent can read whatever the configured NAS account and shares allow.

Why it was flagged

The skill relies on a preconfigured credentialed rclone remote to access NAS files. This is expected for the stated purpose, but it is still account-level delegated access.

Skill content
[nas]
type = smb
host = <NAS_TAILSCALE_IP>
user = openclaw
pass = <ENCRYPTED>
Recommendation

Use a least-privilege NAS account, restrict it to intended shares, and avoid storing broader NAS credentials in the rclone profile used by this skill.

What this means

Anyone with network access to that Tailscale address and the link or guessable filename could download the temporarily served file during the window.

Why it was flagged

The fallback exposes the temporary file directory over a Tailscale-bound HTTP server for 10 minutes. It is read-only and purpose-aligned, but the artifact does not add per-recipient authentication beyond Tailscale network access.

Skill content
rclone serve http /tmp/openclaw/nas-courier/ \
  --addr "${TAILSCALE_IP}:${PORT}" \
  --read-only &
...
sleep 600
Recommendation

Prefer native MEDIA delivery when possible; for HTTP fallback, use short lifetimes, random ports or unguessable paths, and stop the server immediately after confirmed download.

What this means

Installation expectations may be unclear, and the skill may fail or use whatever local rclone/Tailscale configuration already exists.

Why it was flagged

The skill documents required local tools and setup, while the registry metadata lists no required binaries, env vars, config paths, or install spec. This is under-declared rather than hidden code, but users must verify the environment manually.

Skill content
Tailscale VPN | `tailscale status` ... rclone | `which rclone` ... sudo access | (for initial setup only)
Recommendation

Declare required binaries and config paths in metadata, and document a least-privilege setup checklist for the rclone remote.