Back to skill
Skillv1.0.0
ClawScan security
dingtalk-openclaw · ClawHub's context-aware review of the artifact, metadata, and declared behavior.
Scanner verdict
SuspiciousMar 12, 2026, 5:38 AM
- Verdict
- suspicious
- Confidence
- medium
- Model
- gpt-5-mini
- Summary
- The skill's described purpose (DingTalk <> OpenClaw connector) matches the instructions, but there are notable mismatches and insecure practices around credentials and file handling that the package metadata does not declare.
- Guidance
- This skill implements a legitimate DingTalk → OpenClaw chat bridge, but the metadata fails to declare required credentials and the instructions encourage storing secrets in plaintext and writing to a hardcoded user path. Before installing or running it: (1) obtain and store APP_KEY/APP_SECRET, WEBHOOK_URL, and OPENCLAW_TOKEN securely (prefer environment variables or a secrets manager rather than config.py); (2) avoid hardcoded paths — change PROCESSED_FILE to a directory you control and ensure file permissions restrict access; (3) verify the dingtalk-stream package source (PyPI project page) to ensure it's legitimate; (4) ensure the DingTalk webhook is restricted (use signature/secret if available) and that OpenClaw runs on a trusted host (127.0.0.1 is safer than a public endpoint); (5) because the skill metadata omits required secrets and has no source/homepage, exercise extra caution — ask the publisher for source code or a repository and for declared required env vars before trusting this skill. If you cannot verify the package origin or publisher, treat the skill as untrusted.
Review Dimensions
- Purpose & Capability
- noteThe skill is a DingTalk Stream → OpenClaw connector and the code and instructions implement that. Required secrets (DingTalk APP_KEY/APP_SECRET, OpenClaw token, DingTalk webhook) are consistent with the stated purpose — but the skill metadata claims 'no required env vars' and provides no primary credential, which is inconsistent with the runtime instructions that require multiple credentials.
- Instruction Scope
- concernSKILL.md gives precise runtime code that reads/writes local files, registers a callback handler, posts requests to an internal OpenClaw HTTP API and to an external DingTalk webhook. It also instructs creating a plaintext config.py containing secrets and writes a processed-message file to a hardcoded user path. The instructions grant the skill broad discretion to send chat content externally (to OpenClaw) and to store identifiers locally — this is expected for the connector but the plaintext credential handling and hardcoded paths are insecure and not declared in metadata.
- Install Mechanism
- okInstruction-only skill with no install spec or downloadable code; runtime requires pip packages (dingtalk-stream, requests). No installers or external archives are fetched by the skill itself, minimizing install-time risk.
- Credentials
- concernThe code requires several secrets (APP_KEY, APP_SECRET, WEBHOOK_URL, OPENCLAW_TOKEN) but the registry metadata lists none. Requiring multiple tokens is proportionate to the purpose, but not declaring them is a transparency problem. Additionally, the guidance tells users to store these secrets in a plaintext config.py, which is insecure. The skill also writes to a hardcoded path (C:/Users/.../.openclaw/...), which implies filesystem access that should be disclosed.
- Persistence & Privilege
- noteThe skill is not always-enabled and does not request elevated platform privileges. It does persist state by appending processed message IDs to a local file and instructs editing the user's OpenClaw gateway config; those are reasonable for a long-running bot but should be called out. Autonomous invocation (default) is allowed — expected for connector skills.
