Back to skill

Security audit

Learning Optimizer

Security checks across malware telemetry and agentic risk

Overview

This is a local study-planning helper that discloses its local JSONL logging and shows no hidden network, credential theft, or destructive behavior.

Before installing, know that anything you enter about study schedules, priorities, distractions, or current methods will be saved locally in JSONL logs. Use LEARNING_OPTIMIZER_HOME to place those logs somewhere appropriate, and delete ~/.learning-optimizer when you no longer want the history retained, especially on shared machines.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Lp3

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding
The skill advertises executable usage and persistent local logging, yet declares no explicit permissions despite requiring shell, environment-variable handling, and file read/write capabilities. This creates a transparency and consent gap: an agent or reviewer may underestimate what the skill can access or modify, increasing the chance of unintended file writes, data exposure in logs, or unsafe execution in shared environments.

Description-Behavior Mismatch

Low
Confidence
92% confidence
Finding
The skill persistently stores user-provided study schedules and subjects to local JSONL files even though its stated function is analysis and optimization. This creates a privacy issue because potentially sensitive behavioral data is retained on disk without being necessary for core one-shot operation and may later be accessed by other local users, processes, or tooling.

Description-Behavior Mismatch

Low
Confidence
82% confidence
Finding
The `data` command reveals the exact local storage path and log filenames, which increases discoverability of where user data is stored. While not severe by itself, this facilitates follow-on access to persisted study data and is outside the narrow learning-optimization purpose described to the user.

Vague Triggers

Medium
Confidence
82% confidence
Finding
The skill description and usage are broad enough that an agent could invoke it on loosely related user inputs without clear activation boundaries or safety constraints. When combined with shell execution and local logging, ambiguous scope raises the risk of unnecessary processing, unintended command use, and collection/storage of user study data beyond what the user expected.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
Study inputs from the analyze flow are written to disk without prior notice or consent. Schedules and subject lists can reveal routines, educational goals, and personal habits, so undisclosed persistence violates user expectations and may expose sensitive profile data if the host is shared or compromised.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
Problem descriptions and current study methods are persisted without disclosure, and these free-text fields may contain more sensitive personal context than structured schedule data. Because users may describe difficulties, habits, or circumstances in natural language, the privacy risk is higher than routine telemetry.

Missing User Warnings

Low
Confidence
90% confidence
Finding
Time-allocation inputs are also saved without advance notice, creating additional undisclosed retention of user behavior data. This data is somewhat less sensitive than free-form problem descriptions, but it still reveals priorities and routines that users may not expect to be recorded.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
def main():
    with tempfile.TemporaryDirectory() as tmp:
        env = os.environ.copy()
        env["LEARNING_OPTIMIZER_HOME"] = str(Path(tmp) / "learning-data")

        print("[verify] analyze")
Confidence
60% confidence
Finding
os.environ.copy()

VirusTotal

63/63 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.