T09 · Insecure Skill Coding Practices
Error
- Location
- run_evolver.sh:2
- Finding
- Hardcoded A2A Authentication Secret in Executable Launcher<![CDATA[ ## Vulnerability Details **File Location**: `run_evolver.sh:2-8` **Vulnerability Type**: Hardcoded credential **Risk Level**: Critical ### Vulnerable Code ```sh cd /home/openclaw/.openclaw/workspace_roamer_alcor/skills/alcor-capability-evolver export A2A_NODE_ID=node_alcor_001 export A2A_NODE_SECRET=e8bc58cff4b0512a43f957bd0750435842146a8925e78d982c379967049c46a8 export A2A_HUB_URL=https://evomap.ai export HTTP_PROXY=http://127.0.0.1:7890 export HTTPS_PROXY=http://127.0.0.1:7890 export MEMORY_DIR=/tmp/evolver_memory ``` ### Technical Analysis A 64-character A2A node authentication secret is embedded directly in a committed executable script. Anyone who can obtain the package, a repository clone, a backup, or build artifact can recover the credential. This also contradicts the Skill documentation, which says node credentials should be supplied through the environment rather than hardcoded. Even if the credential is no longer active, its presence demonstrates insecure secret handling and requires rotation because its historical exposure cannot be reversed. ### Attack Path 1. An attacker downloads or otherwise reads the Skill package. 2. The attacker extracts `A2A_NODE_ID` and `A2A_NODE_SECRET` from `run_evolver.sh`. 3. The attacker constructs requests to the configured EvoMap A2A endpoints. 4. The secret is submitted as a bearer credential. 5. If accepted by the Hub, the attacker can impersonate the affected node and perform actions available to that identity. ### Impact Assessment Potential impact includes node impersonation, unauthorized asset publication, task operations, false reputation activity, and access to any Hub functionality authorized for the node. The credential is exposed to every principal with read access to the package. ]]>
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Revoke and rotate the exposed node secret immediately. 2. Remove the secret from the current tree, repository history, release archives, logs, and cached artifacts. 3. Load credentials from a dedicated secret manager or a runtime environment injected by the deployment system. 4. Restrict secret files to the agent account with mode `0600`. 5. Add secret scanning to CI and pre-commit checks. 6. Replace the launcher with validation that fails safely when the secret is absent, without printing it. ]]>
