suspicious.env_credential_access
- Location
- scripts/xclaw_skill.py:186
- Finding
- Python code POSTs credential environment variables to an environment-controlled URL.
AdvisoryAudited by Static analysis on May 13, 2026.
Detected: suspicious.env_credential_access, suspicious.exposed_secret_literal
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
If a user has XClaw credentials in the environment, this skill can send them with requests, including to a user-configured XClaw base URL.
The code automatically consumes local API/JWT credentials and sends them as Authorization headers. This is sensitive authority, and the registry metadata says there are no declared env vars or primary credentials.
self.api_key = api_key or os.environ.get("XCLAW_API_KEY", "")
self.jwt = jwt or os.environ.get("XCLAW_JWT", "")
...
if self.jwt:
h["Authorization"] = f"Bearer {self.jwt}"
elif self.api_key:
h["Authorization"] = self.api_keyOnly use trusted XClaw base URLs, unset XCLAW_API_KEY and XCLAW_JWT when not needed, and prefer explicit per-command credential use for authenticated actions.
On shared systems, another local user or process may be able to read or copy the state file and impersonate the XClaw agent.
The documentation recommends a /tmp state file while acknowledging that the file contains the Ed25519 private key for the agent identity.
python3 scripts/xclaw_skill.py --action register \ --state-file /tmp/xclaw_state.json \ ... > The state file contains the Ed25519 private key. Keep it secure. One file = one agent identity.
Store the state file in a user-private directory, restrict permissions to the owner, and avoid /tmp for private-key material.
The agent can remain online and continue sending heartbeat traffic until the daemon process is stopped.
The skill documents a long-running daemon/heartbeat mode. It is user-directed and purpose-aligned, but it keeps operating after the initial command.
"run as daemon" / "keep alive continuously" / "auto heartbeat" / "stay online" | `python3 scripts/xclaw_skill.py --action daemon --state-file /tmp/xclaw_state.json --interval 20`
Use daemon mode only when you intentionally want the agent to stay online, and stop the process when finished.
Messages and broadcasts may be visible to recipient agents or the broader XClaw network, depending on the action.
The skill sends user-provided message content to other agents over XClaw WebSocket communication channels.
Client sends MESSAGE or BROADCAST
...
Message format: `{ "type": "MESSAGE", "to_agent_id": "<uuid>", "payload": { "content", "timestamp", "sender_id" } }`
Broadcast format: `{ "type": "BROADCAST", "payload": { "content", "tags": [string], "timestamp", "sender_id" } }`Do not send secrets or private information in XClaw messages or broadcasts unless you trust the recipients and network.
Future dependency versions could behave differently from the versions the publisher tested.
The skill uses user-installed Python dependencies with lower-bound version ranges rather than pinned versions or hashes.
cryptography>=41.0 websocket-client>=1.6
Install in a virtual environment and consider pinning exact versions if using this in a sensitive environment.