suspicious.env_credential_access
- Location
- scripts/xmtp_support.mjs:11
- Finding
- Environment variable access combined with network send.
AdvisoryAudited by Static analysis on May 10, 2026.
Detected: suspicious.env_credential_access
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.
A compromised provider response, misconfiguration, or mistaken agent action could make the wallet submit an unintended on-chain transaction or spend gas.
The registration flow signs and broadcasts transactions whose contract address, ABI, function name, and arguments come from the provider prepare API; the provided code does not show a local allowlist or confirmation gate before signing.
prepare = post_json(f"{API_BASE}/agent/erc8004/prepare", prepare_body, headers=headers) ... contract_address=str(prepare["contractAddress"]), abi=prepare["abi"], function_name=str(prepare["functionName"]), args=list(prepare.get("args") or []) ... signed = w3.eth.account.sign_transaction(built_tx, private_key)Require explicit user review of network, contract, function, arguments, wallet, and fees before signing; use allowlisted contracts and a low-balance or ephemeral wallet.
If an agent invokes this on an untrusted or mistaken endpoint, the wallet could authorize a payment amount chosen by that endpoint's challenge.
After receiving a 402 challenge, the script creates and sends a payment header without an evident confirmation prompt or maximum-spend check in the provided file.
print(f"Solana payment required: {solana_option.get('maxAmountRequired')} atomic units") ... x_payment = create_solana_xpayment_from_accept(solana_option) ... headers={"X-Payment": x_payment, "x-wallet-address": wallet_address, "Accept": "application/json"}Add a mandatory user approval step and configurable maximum spend before sending any X-Payment header or signed payment authorization.
Those credentials can authorize payments, signatures, endpoint administration, support access, or control-plane changes if mishandled.
The skill clearly discloses that some flows require high-privilege wallet or account credentials.
Optional credentialed flows may use private keys, Solana signer keys, endpoint API keys, PATs, AWAL, or OWS depending on the exact runbook
Set only the credential needed for the current task, prefer scoped tokens or wallet tools over raw private keys, and avoid using a main wallet with significant funds.
Anyone with access to the transcript or logs could see the webhook secret and potentially forge or verify webhook events.
The webhook signing secret is intentionally printed into the agent/user output so it can be saved, which may also place it into chat logs or agent context.
print(f"\n⚠️ SAVE THIS SECRET — it will not be shown again:") ... print(f" {webhook['signing_secret']}\n")Move generated secrets directly into a password manager or secrets vault and avoid retaining them in shared chat, logs, or long-term agent memory.
If OWS_BIN or PATH points to an untrusted executable, wallet operations could be intercepted or altered.
The skill executes local OWS wallet binaries, optionally selected through an environment variable. This is expected for wallet integration but depends on trusting the local binary path.
explicit_bin = os.getenv("OWS_BIN", "").strip() ... return [explicit_bin, *args] ... proc = subprocess.run(build_ows_command(args), text=True, capture_output=True, timeout=timeout)Use a trusted, fully qualified wallet binary path and avoid running the skill in an environment with untrusted PATH or OWS_BIN settings.
Future installs may resolve to different package versions than the author tested.
Python dependencies are specified with lower bounds rather than pinned versions or hashes, allowing dependency drift over time.
eth-account>=0.10.0 web3>=6.0.0 requests>=2.28.0
Install in an isolated virtual environment and consider pinning reviewed dependency versions before using wallet-signing flows.
Messages, support tokens, webhook events, or dashboard actions may pass through external services and affect account resources.
The skill discloses MCP control-plane access and support/XMTP messaging flows, which cross service and agent communication boundaries.
optionally use Singularity MCP for owner-scoped dashboard and control-plane actions ... Support and buyer/seller messaging | support_auth.py, support_threads.py, xmtp_support.mjs
Use the minimum needed MCP/support permissions, verify destinations and identities, and avoid sending unrelated secrets through support or messaging channels.