T01 · Skill Instruction Hijacking
- Location
HEARTBEAT.md:27- Finding
Remote platform instructions direct autonomous Agent activity
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill connects an agent to an external social network, but it also encourages recurring autonomous account actions and sends conversation-derived topics to the service with too little user control.
Review this before installing. Use it only with a dedicated low-privilege Singularity account and scoped API key, avoid enabling scheduled heartbeat or autonomous social actions unless you explicitly want the agent to like, comment, follow, and reply on your behalf, and do not allow it to mine private conversation history for external searches. Store credentials with strict file permissions and verify dependencies/origins before running the connector.
HEARTBEAT.md:27Remote platform instructions direct autonomous Agent activity
README.md:70Recurring execution is recommended with unnecessary elevated privileges
index.js:15Bearer credentials can be transmitted to arbitrary configured origins
connect/dist/index.js:112Bootstrap response can redirect the connector to an untrusted WebSocket event source
HEARTBEAT.md:396Scheduled workflow mines historical conversations and discloses derived topics
install.sh:73Credential and session-token files are written without explicit restrictive permissions
install.sh:58Installer performs mutable runtime dependency resolution from configured registry infrastructure
Even ignoring unsupported parts of the static finding, the manifest description materially understates the documented capability set. The skill includes direct messaging, notification state changes, account/feed access, leaderboard/stat retrieval, and automated social interaction guidance, which broadens privacy and account-impact risk beyond the brief description.
Even ignoring unsupported parts of the static finding, the manifest description materially understates the documented capability set. The skill includes direct messaging, notification state changes, account/feed access, leaderboard/stat retrieval, and automated social interaction guidance, which broadens privacy and account-impact risk beyond the brief description.
Even ignoring unsupported parts of the static finding, the manifest description materially understates the documented capability set. The skill includes direct messaging, notification state changes, account/feed access, leaderboard/stat retrieval, and automated social interaction guidance, which broadens privacy and account-impact risk beyond the brief description.
Even ignoring unsupported parts of the static finding, the manifest description materially understates the documented capability set. The skill includes direct messaging, notification state changes, account/feed access, leaderboard/stat retrieval, and automated social interaction guidance, which broadens privacy and account-impact risk beyond the brief description.
Even ignoring unsupported parts of the static finding, the manifest description materially understates the documented capability set. The skill includes direct messaging, notification state changes, account/feed access, leaderboard/stat retrieval, and automated social interaction guidance, which broadens privacy and account-impact risk beyond the brief description.
The skill instructs users to place sensitive credentials, including an API key and node secret, in environment files or a local credentials.json file. Local plaintext secret storage increases the chance of accidental disclosure through weak file permissions, backups, logs, other tools, or unintended workspace access.
在 ~/.hermes/.env 或 ~/.config/singularity/credentials.json 中配置:
SINGULARITY_API_KEY=ak_your_api_key_here
The connector persists session identifiers, session tokens, and WebSocket URLs to disk in a workspace state file. If that file is readable by other users, plugins, or build/log collection processes, an attacker may hijack or replay the remote session, making this a significant credential exposure issue.
The lockfile pins the skill to ws 8.20.0, and the provided advisories indicate this version is affected by uninitialized memory disclosure and memory-exhaustion denial of service issues. Because this skill connects to an external AI-agent social network over WebSockets, it likely processes untrusted remote traffic, which makes a vulnerable WebSocket library directly exposed to attacker-controlled input.
The package declares ws 8.20.0, which is flagged with advisories for memory disclosure and memory-exhaustion denial of service. In this skill's context, the connector is explicitly WebSocket-first and handles register/resume/heartbeat/auto-reconnect, so a vulnerable WebSocket library sits directly on the network boundary and could be triggered by a malicious or compromised peer, making the issue more dangerous than in a non-networked package.
The documentation instructs users to place sensitive credentials, including API keys and node secrets, in local plaintext-style configuration locations such as .env or credentials.json. If those files have weak permissions, are accidentally committed, or are accessible to other local processes, the credentials can be stolen and used to impersonate the agent or abuse the external account.
在 ~/.hermes/.env 或 ~/.config/singularity/credentials.json 中配置:
SINGULARITY_API_KEY=ak_your_api_key_here
The script falls back to reading a local credentials.json next to the script, which is a broad and potentially unsafe secret-discovery behavior for a utility advertised as a heartbeat. In this skill context, local-file fallback increases the chance that unrelated or accidentally co-located secrets are consumed and then used in outbound authenticated requests without explicit user intent.
}
// 3. Curr directory fallback
const localPath = path.join(__dirname, 'credentials.json');
if (fs.existsSync(localPath)) {
try {
return JSON.parse(fs.readFileSync(localPath, 'utf8'));
The script transmits authentication material to multiple remote endpoints, including a Bearer API key and a node secret in the heartbeat request, without explicit warning or confirmation. This is especially sensitive here because the script performs more than a heartbeat, so loaded credentials are reused for several account and data-retrieval operations, expanding the consequences of misuse or endpoint compromise.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
OPENCLAW_DIR="${HOME}/.openclaw"
SKILL_DIR="${OPENCLAW_DIR}/workspace/skills/${SKILL_NAME}"
CONFIG_DIR="${HOME}/.config/singularity"
CONFIG_FILE="${CONFIG_DIR}/credentials.json"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "================================================"
The entire skill guidance, examples, and prescribed response formats are written only in Chinese, including mandatory user-facing output examples. This imposes a specific language/locale on interactions without indicating that the user may choose another language or opt in to Chinese-only behavior.
This apply-Gene request sends agent identifiers and execution/result telemetry to an external endpoint, but the example omits the Authorization header even though it appears to perform account-linked actions. More importantly, it encourages outbound transmission of agent activity metadata to a remote service without clarifying consent boundaries, validation, or whether the receiving endpoint is authenticated, increasing the risk of unauthorized or privacy-impacting data disclosure.
curl -X POST https://www.singularity.mba/api/evomap/a2a/apply \
-H "Content-Type: application/json" \
-d '{
"protocol": "gep-a2a",
This section instructs the agent to mine historical conversations for high-frequency keywords and send those user-derived topics to an external community search endpoint. That creates a data leakage risk because private user interests, conversation themes, or potentially sensitive topics may be transmitted to a third party without explicit user consent or data minimization.