T03 · Remote Payload Retrieval and Execution
- Location
README.md:17- Finding
Unpinned Remote Installation Scripts Are Executed Directly
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill has a coherent sync purpose, but its install and sync flows create avoidable risks around remote code execution, broad private-data upload, plaintext token storage, and unsafe pull writes.
Review carefully before installing. Do not use the pipe-to-shell install commands; inspect a local copy instead. Use a minimal GitHub token limited to Gist access, expect synced OpenClaw profile and skill files to leave your machine for GitHub Gist, and avoid syncing directories that may contain secrets. Pull only from Gists you control and trust.
README.md:17Unpinned Remote Installation Scripts Are Executed Directly
sync_bridge.py:153Remote Gist Filenames Permit Path Traversal Outside the Workspace
sync_bridge.py:122GitHub Access Token Is Stored in Plaintext Without Enforced Permissions
sync_bridge.py:28Sensitive-File Filtering Is Incomplete and Allows Data Exfiltration
install.sh:91Installer Creates Persistent Shell Aliases and Executable Wrapper Without Separate Consent
This line explicitly fetches an external script from a third-party URL and pipes it straight into bash, granting immediate arbitrary code execution. In the context of a sync tool that will likely access workspace files and GitHub tokens, compromise of the installer source could lead to credential theft, silent backdoors, or bulk exfiltration of user data.
Mac/Linux:
curl -fsSL https://clawhub.ai/JayShna/openclaw-sync-bridge/install.sh | bash
Windows (PowerShell):
The | bash chaining is what turns a network fetch into immediate code execution, removing any pause for user review or validation. This is especially dangerous here because the skill handles synchronization of personal workspace content and token-based cloud access, so a malicious installer could abuse both local files and credentials in one step.
Mac/Linux:
curl -fsSL https://clawhub.ai/JayShna/openclaw-sync-bridge/install.sh | bash
Windows (PowerShell):
The command curl -fsSL ... | bash causes immediate execution of code retrieved from a remote server in the user's shell environment. In the context of a skill installer, this is especially dangerous because users are encouraged to trust and run it during setup, making server compromise or content tampering equivalent to arbitrary command execution.
Mac/Linux:
curl -fsSL https://clawhub.ai/JayShna/openclaw-sync-bridge/install.sh | bash
Windows:
Piping network output directly into bash is a classic command-chaining abuse pattern because it removes the opportunity for inspection and turns content delivery into immediate code execution. In this skill's installation flow, that amplifies the blast radius of any compromise of the remote hosting endpoint or delivery path.
Mac/Linux:
curl -fsSL https://clawhub.ai/JayShna/openclaw-sync-bridge/install.sh | bash
Windows:
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
CONFIG_FILE = "sync_config.json"
BACKUP_DIR = ".sync-bridge-backup"
DEFAULT_SYNC_FILES = ["SOUL.md", "AGENTS.md", "USER.md", "skills/", "IDENTITY.md", "TOOLS.md"]
IGNORE_PATTERNS = ["config.json", ".env", "*.token", "*.key", "sync_config.json", ".sync-bridge-backup"]
# 常见工作目录路径(按优先级排序)
WORKSPACE_CANDIDATES = [
The README promotes the skill as secure and selectively syncing only certain files, yet the primary install path instructs users to download and immediately execute remote scripts. This creates a trust-boundary violation: the fetched installer can perform arbitrary actions unrelated to the documented sync scope, including exfiltration of workspace contents, tokens, or modifying local files.
The installation commands execute code fetched over the network directly in the shell (curl | bash and irm | iex) without any review or integrity verification step. If the hosting site, account, transport path, or installer is compromised, users will run attacker-controlled code immediately with their local privileges.
The documentation instructs users to execute installer code fetched directly from a remote URL via shell or PowerShell without any integrity verification, review step, or safety warning. This creates a supply-chain execution path where compromise of the hosting domain, upstream content, or network trust chain can lead to arbitrary code execution on the user's machine.
The default sync scope includes files such as SOUL.md, AGENTS.md, USER.md, IDENTITY.md, TOOLS.md, and the entire skills directory, all of which may contain sensitive behavioral instructions, personal information, internal prompts, or embedded secrets. Syncing this material to GitHub Gist increases the chance of privacy leakage, unintended exposure through misconfiguration, and broader replication of sensitive workspace state across devices and cloud storage.
The script persistently appends an alias to ~/.bashrc and ~/.zshrc without an upfront warning or explicit consent step. Persistent shell profile modification changes future command behavior and can be abused in principle for stealthy persistence, even though this specific alias appears limited to launching the skill.
Creating a persistent executable in ~/.local/bin gives the skill a durable foothold across shell sessions. In this file the behavior is not overtly malicious, but persistence mechanisms in installers are security-relevant because they modify the user's long-term execution environment and can normalize future trust in the command.
# 创建全局脚本(可选)
GLOBAL_BIN="$HOME/.local/bin"
if [ -d "$GLOBAL_BIN" ] || mkdir -p "$GLOBAL_BIN" 2>/dev/null; then
cat > "$GLOBAL_BIN/sync-bridge" << EOF
#!/bin/bash
cd "$SKILL_DIR" && $PYTHON_CMD sync_bridge.py "\$@"
The installer silently creates an executable wrapper in ~/.local/bin, which establishes a persistent command in the user's environment without prior warning. Writing executables into a user bin directory is a persistence mechanism and should require clear disclosure and affirmative consent.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
def verify_token(self):
"""验证 Token"""
req = urllib.request.Request(
"https://api.github.com/user",
headers={"Authorization": f"token {self.token}", "User-Agent": "OpenClaw-Sync-Bridge"}
)
with urllib.request.urlopen(req, timeout=10) as resp:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
def verify_token(self):
"""验证 Token"""
req = urllib.request.Request(
"https://api.github.com/user",
headers={"Authorization": f"token {self.token}", "User-Agent": "OpenClaw-Sync-Bridge"}
)
with urllib.request.urlopen(req, timeout=10) as resp:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
def verify_token(self):
"""验证 Token"""
req = urllib.request.Request(
"https://api.github.com/user",
headers={"Authorization": f"token {self.token}", "User-Agent": "OpenClaw-Sync-Bridge"}
)
with urllib.request.urlopen(req, timeout=10) as resp:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
def verify_token(self):
"""验证 Token"""
req = urllib.request.Request(
"https://api.github.com/user",
headers={"Authorization": f"token {self.token}", "User-Agent": "OpenClaw-Sync-Bridge"}
)
with urllib.request.urlopen(req, timeout=10) as resp:
The skill uploads workspace content to GitHub Gist, which is an external third-party service, but the setup and sync flows do not present a clear privacy warning about what data leaves the machine. Because the default sync set includes identity and skill files, users may unknowingly transmit sensitive configuration or prompt material to GitHub.
The setup flow saves the GitHub token directly into sync_config.json on disk without any warning, masking, permission hardening, or use of an OS credential store. Any local user, backup process, malware, or accidental file sharing of that config can expose the token and enable unauthorized access to the user's GitHub Gists.
The natural-language instructions and UX examples are entirely in Chinese, and the document does not indicate that language selection is optional or that the skill is intended only for a Chinese-speaking context. Under the stated policy, forcing a specific language without user opt-in can be a locale policy issue.
The skill documentation is entirely in Chinese and does not indicate that language selection is optional or that the skill is intended only for a Chinese-speaking audience. Under the stated policy, forcing a specific language without opt-in can be a natural-language policy violation.
Most prompts and status messages are presented only in Chinese, which forces a specific language for interaction. There is no visible opt-in, fallback language, or justification that the skill is intended only for a Chinese-speaking or region-specific audience.
The section beginning at L085-L089 is presented as creating a shortcut command, but the implementation at L094-L099 appends content to ~/.bashrc and ~/.zshrc. This is a persistent side effect on user shell configuration, which is more intrusive than the nearby comments suggest.
The manifest description is written entirely in Chinese, which creates a language-specific presentation without any indication of user choice or a documented locale requirement. Under the policy, language constraints should either be optional for users or clearly justified as region-specific.
The module docstring and interactive prompts are written in Chinese only, which imposes a specific language on users without opt-in or alternative locale support. The stated policy flags language-forcing behavior unless the tool offers a language choice or clearly documents a justified locale restriction.
No suspicious patterns detected.