Back to skill

Security audit

illo

Security checks across malware telemetry and agentic risk

Overview

This is a coherent illustration skill with disclosed network, backend, config, and character-pack behavior that users should understand before use.

Install this only if you are comfortable with an illustration skill that can call external image services or your logged-in Codex/Grok CLI, write generated images and local character-pack files, and send prompts/reference images to those backends. Review community packs before installing them and use paid fallback only when you intend to incur charges.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (12)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
started, exclude=pre_existing, thread_id=thread_id)

    try:
        proc = subprocess.run(cmd, input=stdin_prompt, capture_output=True,
                              text=True, timeout=CODEX_EXEC_TIMEOUT)
    except subprocess.TimeoutExpired as e:
        produced = produced_image(e.stdout)
Confidence
90% confidence
Finding
proc = subprocess.run(cmd, input=stdin_prompt, capture_output=True, text=True, timeout=CODEX_EXEC_TIMEOUT)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
pass
    started = time.time()
    try:
        proc = subprocess.run(cmd, capture_output=True, text=True,
                              timeout=GROK_EXEC_TIMEOUT)
    except subprocess.TimeoutExpired:
        raise BackendUnavailable("grok exec timed out before producing an image.")
Confidence
95% confidence
Finding
proc = subprocess.run(cmd, capture_output=True, text=True, timeout=GROK_EXEC_TIMEOUT)

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
This file instructs the agent to interact with a community registry and potentially publish character packs, which extends beyond the declared image-generation role into external state changes and distribution workflows. Even if intended as a legitimate feature, this broadens the skill's authority and can lead to unintended data sharing or repo interactions if invoked without tightly scoped consent and manifest disclosure.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The instructions direct the agent to create persistent directories, copy files into a user config path, write character.md, and optionally change the default character. Persistent local state modification is a security-relevant side effect, and it is not reflected in the high-level skill metadata that presents the skill primarily as an illustration generator.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
Registry checks and publishing are not obviously necessary for the core purpose of creating editorial illustrations, so they represent capability creep. Extra capabilities increase attack surface and create opportunities for unauthorized disclosure, accidental publication, or abuse of external integrations.

Missing User Warnings

Medium
Confidence
83% confidence
Finding
The documented Grok CLI invocation uses `--always-approve`, which suppresses interactive approval for tool actions in a flow that can trigger image generation and filesystem writes. In an agent-driven context, removing approval gates increases the chance of unintended or user-unreviewed actions, especially if prompts or surrounding orchestration are manipulated or if the CLI gains broader capabilities than assumed.

Missing User Warnings

Low
Confidence
83% confidence
Finding
The shell commands shown here create directories, copy files, write configuration content, and may set a default character, but the file does not consistently present these as sensitive operations requiring a clear warning immediately before execution. This can cause users to underestimate the persistence and configuration impact of the workflow.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The style pack hard-codes labels as 'English capitals' without any user language selection or localization path. In an image-generation skill, this can cause outputs that ignore user language preferences, creating accessibility and inclusivity issues and potentially violating product localization requirements.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
f"resulting image to {out} (overwrite if it exists). Do not "
                     f"construct the image with code (HTML/SVG/Python) — use the "
                     f"image generation tool. Do not ask for confirmation.")
    # Confine the auto-approved agent: --sandbox workspace lets it write only to
    # CWD/tmp/~/.grok (network stays open for the image call), so an instruction
    # injected via the prompt content can't reach the wider filesystem. Grok's
    # sandbox is OFF by default, so this must be explicit — the analog of the
Confidence
96% confidence
Finding
auto-approve

Unvalidated Output Injection

High
Category
Output Handling
Content
started, exclude=pre_existing, thread_id=thread_id)

    try:
        proc = subprocess.run(cmd, input=stdin_prompt, capture_output=True,
                              text=True, timeout=CODEX_EXEC_TIMEOUT)
    except subprocess.TimeoutExpired as e:
        produced = produced_image(e.stdout)
Confidence
95% confidence
Finding
subprocess.run(cmd, input=stdin_prompt, capture_output

Unvalidated Output Injection

High
Category
Output Handling
Content
pass
    started = time.time()
    try:
        proc = subprocess.run(cmd, capture_output=True, text=True,
                              timeout=GROK_EXEC_TIMEOUT)
    except subprocess.TimeoutExpired:
        raise BackendUnavailable("grok exec timed out before producing an image.")
Confidence
97% confidence
Finding
subprocess.run(cmd, capture_output

Session Persistence

Medium
Category
Rogue Agent
Content
local = pack_name(args.as_name) if args.as_name else name
    dest = config_dir() / "characters" / local
    if (dest / "character.md").exists() and not args.force:
        sys.exit(f"{dest} already exists — use --force to overwrite or --as <name> to rename")
    repo = packs_repo(args)
    entry = repo_index(args, optional=True).get(name)  # version stamp is best-effort
    install_pack_files(repo, name, dest)
Confidence
88% confidence
Finding
write or --as <name> to rename") repo = packs_repo(args) entry = repo_index(args, optional=True).get(name) # version stamp is best-effort install_pack_files(repo, name, dest) stamp_ve

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.