T06 · System Persistence
- Location
SKILL.md:91- Finding
Boot-Persistent System Service Installed with Elevated Privileges
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This appears to be a real headless KKClaw client, but it documents a persistent system service and can send API keys, messages, and telemetry over unencrypted HTTP.
Review carefully before installing. Use HTTPS for any non-local gateway, protect or avoid plaintext API keys in config files, and prefer foreground or user-level service operation unless system-wide boot persistence is truly needed. If using systemd, run it as a dedicated least-privilege account, harden the unit, and document how to stop, disable, and remove it.
SKILL.md:91Boot-Persistent System Service Installed with Elevated Privileges
main.js:282Bearer Credentials, Messages, and Telemetry Can Be Transmitted over Plaintext HTTP
The skill documentation states that it reports status to a gateway and later specifies that heartbeats include status, model, queue length, memory, and uptime. Because this behavior transmits system and operational data off-host, the markdown should disclose the privacy and telemetry implications to users.
The config example includes an API key field in a user-editable JSON file without any guidance on secure storage, file permissions, or avoiding credential exposure. This can lead users to place long-lived secrets in plaintext configs that may be leaked through backups, logs, screenshots, or overly permissive filesystem access.
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
Then:
sudo systemctl daemon-reload
sudo systemctl enable kkclaw
sudo systemctl start kkclaw
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
Then:
sudo systemctl daemon-reload
sudo systemctl enable kkclaw
sudo systemctl start kkclaw
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
Then:
sudo systemctl daemon-reload
sudo systemctl enable kkclaw
sudo systemctl start kkclaw
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
Then:
sudo systemctl daemon-reload
sudo systemctl enable kkclaw
sudo systemctl start kkclaw
The heartbeat transmits runtime telemetry including process uptime, memory usage, queue length, model name, and status, and message sending transmits queued content to the configured gateway. While this appears to be intended functionality for a remote server, it still creates a privacy and security risk because sensitive operational metadata and user-provided message content are sent outbound without any visible consent flow, minimization, or redaction, and the default gateway is plain HTTP.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
break;
case 'init':
// Create config
const configDir = path.dirname(configPath);
if (!fs.existsSync(configDir)) {
fs.mkdirSync(configDir, { recursive: true });
The init command creates ~/.kkclaw/config.json on disk, which is a file write operation, but there is no preceding disclosure that a persistent config file will be created at that path. Although a success message is printed afterward, the user is not warned before the write occurs.
No suspicious patterns detected.