Caveat verdict
xhs
openclaw-xhs
Xiaohongshu automation tool running local scripts via exec tool; all operations are documented and user-initiated.
⚠ Flagged for review — coarse, uncorroborated signal, not a confirmed exploit. Review the config yourself before installing.
Automated static analysis — not a human review. Caveat flags capabilities, not confirmed intent, and can produce false positives. Disagree with this verdict? Use Dispute below.
Findings (15)
Pipe-to-shell pattern (curl | sh) — supply chain attack vector
install.sh · prose · downgraded · curl -LsSf https://astral.sh/uv/install.sh | sh
Pipe to sh — executes piped content as shell commands
install.sh · prose · downgraded · | sh
Possible hardcoded credential
install.sh · prose · downgraded · TOKEN="<SET_YOUR_GATEWAY_TOKEN>
References sudo — requests elevated privileges
xhs-toolkit/README.md · code · sudo
apt-get install — installs system packages
xhs-toolkit/README.md · code · apt-get install
Accesses OpenClaw config/secrets directly
config.example.json · prose · downgraded · ~/.openclaw/openclaw.json
subprocess execution — runs system commands from Python
scripts/xhs_auto_pipeline.py · prose · downgraded · subprocess.run(
HTTP request to bare IP address — common in malicious payloads
scripts/xhs_generate_content.py · prose · downgraded · http://127.0.0.1
subprocess with shell=True — command injection vector
xhs-toolkit/install_deps.py · prose · downgraded · subprocess.run(cmd, shell=True
os.system/popen — direct OS command execution
xhs-toolkit/xhs_toolkit_interactive.py · prose · downgraded · os.system(
Python os.environ.get — reads environment variable
scripts/xhs_auth.py · prose · downgraded · os.environ.get(
Changes file ownership
xhs-toolkit/README.md · prose · downgraded · chown
Python os.getenv — reads environment variable
xhs-toolkit/src/core/config.py · prose · downgraded · os.getenv(
Python shutil file operation — copies/moves/deletes files
xhs-toolkit/src/tools/manual_tools.py · prose · downgraded · shutil.copytree(
Python aiohttp session — async network access
xhs-toolkit/src/utils/image_processor.py · prose · downgraded · aiohttp.ClientSession
Why the tier is capped
Execution sink present in raw bytes (Hard Floor: class A/B/D/E). Final tier capped at Caution — cannot be lifted by any downgrade, example-payload opt-in, or allowlist.
Permissions & capabilities
No declared permissions — minimal attack surface.
Is this flag fair?
Thanks — recorded.