T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:8- Finding
Unpinned Third-Party Plugin Downloads and Executes an Unverified Native Binary
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:8-15,SKILL.md:20-23, andSKILL.md:28-32
Vulnerability Type: Unpinned dependency with remote payload retrieval and execution
Risk Level: MediumVulnerable Code
SKILL.md:8-15:markdown ```bash openclaw plugins install @keychat-io/keychat openclaw gateway restartSupported platforms: macOS (ARM/x64), Linux (x64/ARM64).
The plugin automatically downloads the bridge binary, configures
channels.keychatinopenclaw.json, and generates a new Nostr identity on first start.text `SKILL.md:20-23`: ```markdown - **bridge-client.ts** — Spawns a Rust sidecar for Signal Protocol and MLS Protocol encryption (Keychat's crypto is implemented in Rust, needs bridging to Node.js) - **keychain.ts** — Stores identity mnemonics in the OS keychain (macOS Keychain / Linux libsecret) for securitySKILL.md:28-32:markdown ```bash openclaw plugins install @keychat-io/keychat@latest openclaw gateway restarttext ### Technical Analysis The installation instructions do not pin `@keychat-io/keychat` to an immutable, reviewed version. The upgrade command explicitly requests `@latest`, allowing the package resolved by the registry to change after this Skill has been audited. The documentation also states that the installed plugin automatically downloads a native bridge binary and spawns it as a Rust sidecar. No immutable bridge version, download URL, checksum, digital signature, or verification procedure is provided in the reviewed project. Consequently, the code ultimately executed is not contained in the Skill and cannot be validated from the audited artifact. Restarting the OpenClaw gateway activates the externally supplied plugin and sidecar. According to the Skill, these components can modify `openclaw.json`, create a Nostr identity, and interact with identity mnemonics stored in the operating-system keychain. This creates a s ...[truncated 1979 chars]- Remediation
View remediation
Remediation Suggestions
- Pin
@keychat-io/keychatto a specific, reviewed version instead of using an unversioned package specifier or@latest. - Use package-manager integrity metadata and a committed lockfile where the OpenClaw installation mechanism supports them.
- Pin the native bridge to an immutable release and document its exact version and authoritative download origin.
- Publish expected SHA-256 digests for every supported bridge artifact and verify the digest before execution.
- Cryptographically sign bridge releases and fail closed if signature verification fails.
- Require explicit user confirmation before downloading or starting native code, modifying
openclaw.json, generating an identity, or restarting the gateway. - Run the plugin and bridge with the minimum necessary filesystem, network, keychain, and process permissions.
- Separate bridge update operations from normal startup so that an already reviewed binary is not silently replaced.
- Document the plugin and binary update policy, provenance controls, and rollback procedure.
- Consider reproducible builds or publishing source-to-binary attestations so users can independently validate the native artifact.
- Pin
