Back to skill

Security audit

Status Page Gen

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does what it claims, but it encourages recurring background execution and public publishing of service details without enough scoping or removal guidance.

Install only if you are comfortable with service monitoring data being stored locally and potentially published. Avoid the public Gist instructions for private infrastructure, use a user-owned output directory, and do not enable cron or LaunchAgent scheduling unless you also add logging, know how to remove it, and trust the skill directory not to be modified unexpectedly.

Vulnerability Patterns
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T06 · System Persistence

Warning
Location
references/setup-guide.md:91
Finding

User-Level Persistent Execution Through Cron and macOS LaunchAgent

Content
View full analysis
/dev/null && \ python3 scripts/check_certs.py --config assets/services.json --output /tmp/cert_check.json 2>/dev/null && \ python3 scripts/history.py --append /tmp/status_check.json --db assets/history.json 2>/dev/null && \ python3 scripts/generate_page.py --services /tmp/status_check.json --certs /tmp/cert_check.json --history assets/history.json --title "My Status" --output /var/www/html/status.html 2>/dev/null ``` ``` `references/setup-guide.md:109-132`: ```text ### macOS LaunchAgent Alternatively, use a macOS LaunchAgent for more reliable scheduling. Create `~/Library/LaunchAgents/com.statuspage.check.plist`: ```xml Labelcom.statuspage.ch ...[truncated 4131 chars]
Remediation
View remediation
/dev/null`. Send output to a user-owned log file and implement basic log rotation. 7. Ensure the Skill directory and scheduled scripts are writable only by the owning user. Users should verify ownership and permissions before enabling recurring execution. 8. Avoid recommending a privileged web root as the default output location. Prefer a user-owned directory and configure the web server to serve or copy from it through a narrowly scoped mechanism. 9. Pin the scheduled task to a reviewed installation location and advise users to disable the scheduler before upgrading or replacing the Skill. 10. Add validation or integrity checking for scripts used by the scheduled job where the deployment threat model warrants it. ]]>
Vulnerability Patterns
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (14)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description lists generic triggers such as "status page," "uptime," and "health check," which overlap with common conversational requests and operational discussions. The file does not provide exclusion conditions or tighter activation constraints, so the skill may activate in contexts broader than intended.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
85% confidence
Finding

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.

Content

Scanner excerpt · SKILL.md (reported line 46)May include surrounding context.

3. Schedule updates (cron)

Add to crontab (crontab -e):

text
*/5 * * * * cd ~/.openclaw/workspace/skills/status-page-gen && \

Session Persistence

Medium
Category
Rogue Agent
Confidence
85% confidence
Finding

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.

Content

Scanner excerpt · references/setup-guide.md (reported line 95)May include surrounding context.

3. Schedule updates (cron)

Add to crontab (crontab -e):

text
*/5 * * * * cd ~/.openclaw/workspace/skills/status-page-gen && \

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

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.

Content

Scanner excerpt · references/setup-guide.md (reported line 110)May include surrounding context.

macOS LaunchAgent

Alternatively, use a macOS LaunchAgent for more reliable scheduling. Create ~/Library/LaunchAgents/com.statuspage.check.plist:

xml
<?xml version="1.0" encoding="UTF-8"?>

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

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.

Content

Scanner excerpt · references/setup-guide.md (reported line 110)May include surrounding context.

macOS LaunchAgent

Alternatively, use a macOS LaunchAgent for more reliable scheduling. Create ~/Library/LaunchAgents/com.statuspage.check.plist:

xml
<?xml version="1.0" encoding="UTF-8"?>

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

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.

Content

Scanner excerpt · references/setup-guide.md (reported line 114)May include surrounding context.

macOS LaunchAgent

Alternatively, use a macOS LaunchAgent for more reliable scheduling. Create ~/Library/LaunchAgents/com.statuspage.check.plist:

xml
<?xml version="1.0" encoding="UTF-8"?>

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

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.

Content

Scanner excerpt · references/setup-guide.md (reported line 115)May include surrounding context.

macOS LaunchAgent

Alternatively, use a macOS LaunchAgent for more reliable scheduling. Create ~/Library/LaunchAgents/com.statuspage.check.plist:

xml
<?xml version="1.0" encoding="UTF-8"?>

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

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.

Content

Scanner excerpt · references/setup-guide.md (reported line 127)May include surrounding context.

macOS LaunchAgent

Alternatively, use a macOS LaunchAgent for more reliable scheduling. Create ~/Library/LaunchAgents/com.statuspage.check.plist:

xml
<?xml version="1.0" encoding="UTF-8"?>

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

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.

Content

Scanner excerpt · references/setup-guide.md (reported line 132)May include surrounding context.

macOS LaunchAgent

Alternatively, use a macOS LaunchAgent for more reliable scheduling. Create ~/Library/LaunchAgents/com.statuspage.check.plist:

xml
<?xml version="1.0" encoding="UTF-8"?>

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

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.

Content

Scanner excerpt · references/setup-guide.md (reported line 114)May include surrounding context.

xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key><string>com.statuspage.check</string>

Session Persistence

Medium
Category
Rogue Agent
Confidence
75% confidence
Finding

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.

Content

Scanner excerpt · references/setup-guide.md (reported line 132)May include surrounding context.

Load it:

bash
launchctl load ~/Library/LaunchAgents/com.statuspage.check.plist

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The guide explicitly recommends publishing the generated status page as a public GitHub Gist, but does not warn that the page may expose internal service names, URLs, tags, uptime history, and certificate metadata. Even if intended for convenience, public publication can leak operational details that help attackers enumerate infrastructure and target services.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/check_services.py (reported line 65)May include surrounding context.

python
try:
            cmd = ["ping", "-c", "1", flag, str(timeout), host]
            start = time.perf_counter()
            result = subprocess.run(
                cmd,
                capture_output=True,
                text=True,

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The generated page sets <html lang="en">, which forces the output to declare English regardless of the user's preferred language or locale. This is a natural-language policy concern because the file does not offer any language choice or document why English is required.

Content

No source excerpt is available for this finding.