T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:12- Finding
Unverified Mutable Remote WebAssembly Payload Is Downloaded and Executed
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:12-32; corroborating instructions inreferences/USAGE.md:7-13andreferences/USAGE.md:19-37
Vulnerability Type: Remote payload retrieval and execution
Risk Level: CriticalVulnerable Code
SKILL.md:12-32:js // Download wasm first (one-time) wasm-sandbox-download({ url: "https://raw.githubusercontent.com/guyoung/wasm-sandbox-openclaw-skills/main/boxed-fs/files/boxed-fs-component.wasm", dest: "~/.openclaw/skills/boxed-fs/files/boxed-fs-component.wasm" }) // List files wasm-sandbox-run({ wasmFile: "~/.openclaw/skills/boxed-fs/files/boxed-fs-component.wasm", workDir: "~/.openclaw/workspace", args: ["list-dir", "--path", "."] }) // Read file wasm-sandbox-run({ wasmFile: "~/.openclaw/skills/boxed-fs/files/boxed-fs-component.wasm", workDir: "~/.openclaw/workspace", args: ["read-file", "--path", "example.txt"] })references/USAGE.md:7-13:js wasm-sandbox-download({ url: "https://raw.githubusercontent.com/guyoung/wasm-sandbox-openclaw-skills/main/boxed-fs/files/boxed-fs-component.wasm", dest: "~/.openclaw/skills/boxed-fs/files/boxed-fs-component.wasm" })references/USAGE.md:29-37:js wasm-sandbox-run({ wasmFile: "~/.openclaw/skills/boxed-fs/files/boxed-fs-component.wasm", workDir: "~/.openclaw/workspace", mapDirs: ["/tmp::/tmp", "/data::/data"], args: ["list-dir", "--path=/tmp"] })Technical Analysis
The Skill instructs the agent to download an executable WebAssembly component from the
mainbranch of a personal GitHub repository and subsequently execute the downloaded file. The remote artifact is not pinned to an immutable commit or version, and the project supplies no expected cryptographic hash, digital signature, provenance attestation, or locally auditable copy.Consequently, the executable bytes used at runtime may differ from those presen ...[truncated 2513 chars]
- Remediation
View remediation
Remediation Suggestions
- Bundle the reviewed WASM component directly in the Skill package so the audited package contains the exact executable that will run.
- If remote retrieval is unavoidable, use an immutable, versioned release artifact pinned to a specific commit or content-addressed location rather than a mutable branch.
- Publish a trusted SHA-256 or stronger digest in the Skill and verify it before every execution. Execution must fail closed when verification fails.
- Digitally sign the WASM artifact and validate the signature against a pinned, trusted publisher key.
- Provide source code and reproducible build instructions so reviewers can verify that the distributed WASM corresponds exactly to the reviewed source.
- Pin and document the required sandbox plugin version and verify its provenance.
- Apply least privilege to
workDirandmapDirs. Map only the specific directory required for the current operation and avoid broad or sensitive host paths. - Remove generic examples that map entire shared directories such as
/tmpor/data, or clearly require explicit user approval before granting additional mappings. - Store verified artifacts under immutable, version-specific filenames to prevent silent replacement after verification.
