Back to skill

Security audit

ai-guardian

Security checks across malware telemetry and agentic risk

Overview

The skill is transparent about local LLM governance, but it can change or delete local models and policy without a built-in read-only mode or approval gate.

Install only in an environment where the agent's account is allowed to manage the target local LLM runtime. For observe-only use, run it against a runtime/account that cannot modify the model store or expose only scan/observe tools. Treat ~/.ai-guardian as sensitive local state, and avoid long-lived master passwords in environment variables where shell history, child processes, CI logs, or process inspection may expose them.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (7)

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The guide explicitly references 'destructive op' execution and frames authorization as the agent or host account's judgment, which expands the documented scope beyond passive auditing and opt-in governance. In a security-control skill, normalizing write/destructive actions without strict built-in authorization checks increases the chance that an agent will perform harmful local state changes under ambient permissions.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
Mentioning an undo database for reversible writes indicates that the tool supports state-changing operations not clearly reflected in the high-level description. Hidden or under-documented write capabilities are dangerous because users and orchestrating agents may assume the skill is observational while it can actually modify local model state or policy.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The guide recommends exporting the master password in an environment variable for non-interactive use but does not warn that environment variables can be exposed via shell history, process inspection, crash reports, CI logs, or inherited subprocess environments. Because this password unlocks the encrypted secret store, compromise of the variable can expose all stored endpoint tokens.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
## Authorization is not this tool's job — decide it where it belongs

Whether a write should happen is your decision, or the account's. The tool does
not gate it — there is no read-only switch and no approval prompt to configure.
The two right places to control read vs write:

- **The host and account you run under.** Point the tool at a runtime the account
Confidence
87% confidence
Finding
The document explicitly states the tool does not provide a read-only switch or approval prompt for write operations, relying instead on external account permissions or prompt discipline. In an agentic setting, this weakens defense in depth: if the agent is misprompted, compromised, or given broader credentials than intended, write-capable tools such as model removal or pulling may be invoked without an in-tool authorization checkpoint.

Session Persistence

Medium
Category
Rogue Agent
Content
Every tool call is audited to a local SQLite DB at ~/.ai-guardian/audit.db (relocatable via AI_GUARDIAN_AIOPS_HOME); the OBSERVED local-LLM usage log is a SEPARATE DB at ~/.ai-guardian/usage.db.
  Zero-config: ai-guardian defaults to the local Ollama at http://localhost:11434 with no token. Ollama endpoints usually run open on a trusted host, so a bearer token is OPTIONAL; when one is supplied it is stored ENCRYPTED in ~/.ai-guardian/secrets.enc (Fernet/AES-128 + scrypt-derived key) — never plaintext on disk. The store is unlocked by a master password from AI_GUARDIAN_AIOPS_MASTER_PASSWORD (non-interactive/MCP/CI) or an interactive prompt (CLI on a TTY). A legacy plaintext env var AI_GUARDIAN_<TARGET_NAME_UPPER>_TOKEN is still honoured as a fallback with a deprecation warning (migrate with 'ai-guardian secret migrate').
  The prompt scanner is deterministic and offline (no I/O, no network); route-through guards (guarded_generate/observe_chat) call Ollama only if the prompt's risk band is below block_threshold AND the model is allowed. The raw prompt is never stored — only its length + redacted findings.
  State-changing operations: remove_model (high, dry-run + double confirm at the CLI, undo re-pull); pull/unload/allowlist/denylist/pin/guarded writes are medium. All write tools pass through the @governed_tool decorator (pre-check + budget guard + audit + risk-tier label).
  Webhooks: none — no outbound network calls beyond the configured Ollama REST API.
  Transitive dependencies: httpx (HTTP client) and the MCP SDK. No post-install scripts or background services.
  Validation status: the scanner/policy/risk-band are deterministic offline logic; the core Ollama route-through (real generation + policy deny + undo capture) was exercised against a live Ollama 0.24.0 on 2026-07-13, while the remaining runtime API paths and the OpenAI-compatible dialects are exercised against mocked responses (see docs/VERIFICATION.md). Content governance is opt-in route-through in v0.1
...[truncated 24 chars]
Confidence
86% confidence
Finding
The skill explicitly persists operational history to local SQLite databases, including audit records for every tool call and observed local-LLM usage metadata. Even though it says raw prompts are not stored and tokens may be encrypted, this still creates durable local forensic data that can reveal user activity, model usage patterns, policy decisions, and potentially sensitive metadata if the host is compromised or the files are overexposed.

Session Persistence

Medium
Category
Rogue Agent
Content
## Governance & Safety

The skill delivers reads and writes and records them; it does **not** decide
whether a write is permitted. That is your agent's judgement, or the permission
of the host and account you run it under (point it at a runtime the account
cannot administer, or hand the agent only the scan/observe tools). There is no
read-only switch, deny-rules file, or approval gate — content governance (the
Confidence
92% confidence
Finding
The document states there is no read-only switch, deny-rules file, or approval gate, while the skill exposes multiple state-changing operations such as model removal, policy modification, unloading, pulling, and guarded writes. In an agent setting, this means a caller with access to the skill can persistently alter local model state and governance policy without any built-in authorization control beyond host permissions, increasing the blast radius of prompt injection, operator error, or misuse.

Session Persistence

Medium
Category
Rogue Agent
Content
## 5. Audit-annotation env vars (optional)

The skill does not decide whether a write is permitted — that is the agent's
judgement or the permission of the host/account you run it under. If you want the
audit trail to record *who* ran a destructive op and *why*, set these; they are
recorded on the row, never required, and gate nothing:
Confidence
84% confidence
Finding
The documentation states that whether a write is permitted depends on agent judgment or host/account permissions, while audit annotations merely record who approved a destructive action and do not gate it. This creates a persistence/control risk because destructive or state-changing actions can proceed under existing session privileges without mandatory enforcement of approval or intent validation.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.prompt_injection_instructions

Prompt-injection style instruction pattern detected.

Warn
Code
suspicious.prompt_injection_instructions
Location
references/agent-guardrails.md:56