Back to skill

Security audit

Hogwarts RPG

Security checks across malware telemetry and agentic risk

Overview

This is a coherent story-game skill with local saves, memory, and moderation, but users should be aware of persistent logs and configurable storage paths.

Install only if you are comfortable with local persistent game state and moderation incident logs. Avoid entering real personal details, use trusted values for HOGWARTS_STATE_DIR and OPENCLAW_BIN, and choose MODERATION_MODE/openai only if you accept sending text to that moderation provider.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Tainted flow: 'path' from os.environ.get (line 617, credential/environment) → open (file write)

Medium
Category
Data Flow
Content
def write_save(save_id, data):
    data["updated_at"] = datetime.now().isoformat()
    path = os.path.join(SAVES_DIR, f"{save_id}.json")
    with open(path, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)
Confidence
94% confidence
Finding
with open(path, "w", encoding="utf-8") as f:

Tainted flow: 'path' from os.environ.get (line 62, credential/environment) → open (file write)

Medium
Category
Data Flow
Content
def save_memory(mem):
    mem["updated_at"] = datetime.now().isoformat()
    path = os.path.join(MEMORY_DIR, "player_memory.json")
    with open(path, "w", encoding="utf-8") as f:
        json.dump(mem, f, ensure_ascii=False, indent=2)
Confidence
91% confidence
Finding
with open(path, "w", encoding="utf-8") as f:

Tainted flow: 'cmd' from os.environ.get (line 148, credential/environment) → subprocess.run (code execution)

Medium
Category
Data Flow
Content
prompt = _OC_PROMPT.format(text=text[:4000])
    cmd = [OPENCLAW_BIN, "infer", "model", "run", "--model", OPENCLAW_MOD_MODEL, "--prompt", prompt]
    try:
        proc = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
    except Exception as e:  # noqa: BLE001 — Binary fehlt/Timeout
        return None, {}, f"{type(e).__name__}: {e}"
    if proc.returncode != 0:
Confidence
87% confidence
Finding
proc = subprocess.run(cmd, capture_output=True, text=True, timeout=30)

Tainted flow: 'save_path' from os.environ.get (line 195, credential/environment) → open (file write)

Medium
Category
Data Flow
Content
welt_memory = world_memory.get_context(
                save, ort=(loc["name"] if loc else None),
                segment=save.get("segment"), anwesende=[], touch=True)
            with open(save_path, "w", encoding="utf-8") as f:   # last_seen-Touch persistieren
                json.dump(save, f, ensure_ascii=False, indent=2)

    output = {
Confidence
87% confidence
Finding
with open(save_path, "w", encoding="utf-8") as f: # last_seen-Touch persistieren

Missing User Warnings

Medium
Confidence
90% confidence
Finding
Flagged content is persistently logged with up to 500 characters of the original text, which can capture sensitive user inputs, including content from a child-facing application. If log files are accessible to other local users, backups, or support tooling, this creates a privacy and data-retention risk even though it is not a code-execution flaw.

VirusTotal

60/60 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.