Back to skill

Security audit

spool

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it says for Threads browser automation, but its optional headless setup installs a persistent system-wide service with administrator privileges and no cleanup path.

Review this before installing on a shared or production machine. Prefer a temporary or user-scoped Xvfb setup instead of the documented system-wide boot service, and require explicit confirmation of the exact Threads post or reply before publishing from your logged-in account.

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

Error
Location
SKILL.md:24
Finding
Persistent System-Wide Xvfb Service Exceeds Minimum Required Privileges<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 24–37 **Vulnerability Type**: Persistent system service registration **Risk Level**: High ### Vulnerable Code ```bash sudo apt install -y xvfb sudo tee /etc/systemd/system/xvfb.service << 'EOF' [Unit] Description=X Virtual Frame Buffer After=network.target [Service] Type=simple ExecStart=/usr/bin/Xvfb :99 -screen 0 1920x1080x24 Restart=always [Install] WantedBy=multi-user.target EOF sudo systemctl enable --now xvfb ``` ### Technical Analysis The Skill instructs the user to use `sudo` to create a root-owned systemd unit under `/etc/systemd/system` and then enable it at boot. The `WantedBy=multi-user.target` setting causes Xvfb to start in future boot sessions, while `Restart=always` causes systemd to relaunch the process whenever it exits. Xvfb is relevant to the declared Threads browser-automation functionality on a headless host. However, installing an always-running, system-wide boot service is not the least-privileged mechanism needed to provide a display for an individual browser session. A session-bound `xvfb-run` invocation, an explicitly managed process, a transient unit, or a user-scoped service would meet the functional requirement with less persistence and lower privileges. The behavior is disclosed in the documentation, and the package is installed from the operating system’s configured package repository. The audited content does not contain a hidden payload, malicious replacement binary, or remote code retrieval. The vulnerability is therefore the unnecessary persistent privileged configuration itself, rather than evidence that Xvfb is malicious. ### Attack Path 1. A user follows the headless-server setup instructions and grants `sudo` access. 2. The instructions install Xvfb and write a root-owned service definition to `/etc/systemd/system/xvfb.service`. 3. `sudo systemctl enable --now xvfb` immediately starts the service and registers it for execution on subsequent ...[truncated 1418 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Prefer a session-bound virtual display that terminates with the browser process: ```bash xvfb-run -a openclaw gateway ``` Adapt the invocation to the actual OpenClaw startup command rather than registering a boot service. 2. If separate lifecycle management is required, use a user-scoped or transient service instead of writing to `/etc/systemd/system`. Do not enable it at boot unless continuous operation is explicitly requested by the user. 3. Avoid `Restart=always` for an optional browser dependency. If restart behavior is necessary, use a bounded policy such as `Restart=on-failure` with start-rate limits. 4. Clearly separate the optional headless-host setup from ordinary Skill usage and obtain explicit user approval before making persistent or privileged system changes. 5. Provide complete rollback instructions for systems where the service was installed: ```bash sudo systemctl disable --now xvfb sudo rm -f /etc/systemd/system/xvfb.service sudo systemctl daemon-reload sudo systemctl reset-failed ``` 6. Also document removal of the related user-level OpenClaw Gateway display override when it is no longer needed: ```bash rm -f ~/.config/systemd/user/openclaw-gateway.service.d/display.conf systemctl --user daemon-reload systemctl --user restart openclaw-gateway ``` 7. If persistent deployment remains supported, document the security boundary, service lifetime, fixed-display implications, package source assumptions, and exact cleanup procedure. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
```bash
# 1. Xvfb 설치 및 서비스 등록
sudo apt install -y xvfb
sudo tee /etc/systemd/system/xvfb.service << 'EOF'
[Unit]
Description=X Virtual Frame Buffer
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
```bash
# 1. Xvfb 설치 및 서비스 등록
sudo apt install -y xvfb
sudo tee /etc/systemd/system/xvfb.service << 'EOF'
[Unit]
Description=X Virtual Frame Buffer
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now xvfb

# 2. OpenClaw Gateway에 DISPLAY 환경변수 추가
mkdir -p ~/.config/systemd/user/openclaw-gateway.service.d
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Session Persistence

Medium
Category
Rogue Agent
Content
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now xvfb

# 2. OpenClaw Gateway에 DISPLAY 환경변수 추가
mkdir -p ~/.config/systemd/user/openclaw-gateway.service.d
Confidence
80% 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.

Session Persistence

Medium
Category
Rogue Agent
Content
sudo systemctl enable --now xvfb

# 2. OpenClaw Gateway에 DISPLAY 환경변수 추가
mkdir -p ~/.config/systemd/user/openclaw-gateway.service.d
echo -e '[Service]\nEnvironment=DISPLAY=:99' > ~/.config/systemd/user/openclaw-gateway.service.d/display.conf
systemctl --user daemon-reload
systemctl --user restart openclaw-gateway
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.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill provides detailed steps for posting and replying on a live social-media account but does not prominently require an explicit user confirmation immediately before publication or warn that actions are externally visible and attributable to the logged-in account. In an agent setting, this creates a real risk of unintended posts, reputational harm, or policy-violating account actions if the agent proceeds based on ambiguous user input.

Natural-Language Policy Violations

Low
Confidence
96% confidence
Finding
The natural-language instructions throughout the skill are presented in Korean, but there is no indication that the user can choose another language or that the skill is intentionally limited to Korean-speaking users. This can violate language/locale policy when a specific language is effectively forced without opt-in or justification.

Static analysis

No suspicious patterns detected.