Back to skill

Security audit

EliteEntrepreneurOS — $100/Day AI Startup Engine

Security checks for vulnerabilities and agentic risk

Overview

The skill is not overtly malicious, but it asks for broad business execution and delegation authority without clear approval boundaries.

Review this skill before installing. Use it for planning and drafting unless you are comfortable with the agent delegating work to other tools; require explicit confirmation before outreach, publishing, purchases, account changes, or file writes. Avoid passing user-controlled paths into its logging functions.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
logger.py:4
Finding

Unrestricted File Write Through Caller-Controlled Log Paths

Content
View full analysis

Vulnerability Details

File Location: logger.py, lines 4–10
Vulnerability Type: Arbitrary file append, overwrite, and path traversal
Risk Level: Medium

Vulnerable Code

python
def log_journal(entry, path="../logs/journal.log"):
    with open(path, "a") as f:
        f.write(f"[{datetime.now()}] {entry}\n")

def log_actions(actions, path="../logs/actions.json"):
    with open(path, "w") as f:
        json.dump(actions, f, indent=2)

Technical Analysis

Both public logging functions accept a caller-supplied filesystem path and pass it directly to open() without validation, canonicalization, or restriction to an approved logging directory.

log_journal() opens the selected file in append mode, while log_actions() opens it in write mode. The latter truncates an existing target before writing JSON. Absolute paths and relative traversal sequences such as ../../target are accepted.

The default paths also contain .. and are resolved relative to the process's current working directory rather than the module directory. Consequently, even default behavior may place logs in an unintended location depending on how the skill is launched.

Exploitation requires an integration or caller that exposes or derives the path argument from attacker-controlled input. The reviewed internal calls do not pass a custom path, so the practical exposure depends on how these public functions are integrated.

Attack Path

  1. An attacker supplies input that influences a logging destination exposed by an integrating agent or application.
  2. The attacker chooses an absolute path or a traversal path such as ../../target-file.
  3. The integration passes that value to log_journal() or log_actions().
  4. Python resolves the path outside the intended log directory.
  5. log_journal() appends attacker-influenced content to the target, or log_actions() truncates and replaces it with serialized JSON.
  6. The operation succeeds for any target writable ...[truncated 600 chars]
Remediation
View remediation

Remediation Suggestions

  • Remove the public path parameter when callers do not need to select a destination.
  • Define a fixed log directory from a trusted configuration source and resolve it independently of the current working directory.
  • If selectable filenames are required, accept only a basename or a strict allowlist of known log names.
  • Canonicalize the requested destination with pathlib.Path.resolve() and verify that it remains beneath the approved log directory using Path.is_relative_to().
  • Reject absolute paths, traversal components, symbolic-link escapes, and unsupported file extensions.
  • Create the log directory with restrictive permissions and run the skill under a least-privileged account.
  • Use atomic replacement for action logs where replacement is required, and avoid truncating existing files until the new content has been safely serialized.
  • Consider opening files with protections against symbolic-link following where supported.

A hardened pattern is:

python
import json
from pathlib import Path

LOG_DIR = (Path(__file__).resolve().parent / "logs").resolve()
LOG_DIR.mkdir(mode=0o700, parents=True, exist_ok=True)

def _safe_log_path(filename):
    if Path(filename).name != filename:
        raise ValueError("Log filename must not contain path components")

    destination = (LOG_DIR / filename).resolve()
    if not destination.is_relative_to(LOG_DIR):
        raise ValueError("Log path escapes the approved directory")

    return destination

def log_journal(entry):
    destination = _safe_log_path("journal.log")
    with destination.open("a", encoding="utf-8") as file:
        file.write(f"{entry}\n")

def log_actions(actions):
    destination = _safe_log_path("actions.json")
    temporary = _safe_log_path("actions.json.tmp")

    with temporary.open("w", encoding="utf-8") as file:
        json.dump(actions, file, indent=2)

    temporary.replace(destination)
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The activation phrases are broad and naturalistic enough to be triggered during ordinary discussion about starting a business or asking for weekly money-making advice. In a skill that can generate plans, execute tasks, or delegate through other tools, accidental activation could cause the agent to enter a high-autonomy business-execution mode without clear user intent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill explicitly states it can execute or delegate tasks through other OpenClaw tools, but it does not warn users that this may trigger impactful external actions such as outreach, content publication, code generation, or financial/operational changes. In this context, the omission is more dangerous because the skill is framed as 'ruthless efficiency' and autonomous scaling, which increases the likelihood of overbroad or insufficiently reviewed actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

This code performs persistent file writes in both logging functions, including appending to a journal file and overwriting an actions JSON file. There is no confirmation prompt, visible user-facing log message, or explanatory comment/docstring disclosing that user-provided data will be written to disk.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.