Back to skill

Security audit

Fulcra Morning Briefing

Security checks across malware telemetry and agentic risk

Overview

This morning-briefing skill has a coherent purpose, but it handles sensitive personal context and appears to send location data to a third-party weather service without enough disclosure or user control.

Review this skill before installing. It may read sensitive sleep, health, calendar, wearable, and location context, and the supplied code evidence shows location may be sent to wttr.in for weather. Install only if you are comfortable with that data use, and prefer a version that clearly declares shell/network requirements, limits the Fulcra command path, and makes weather lookup opt-in.

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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
Findings (8)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
def run_fulcra_json(*args: str) -> Any:
    command = os.environ.get("FULCRA_CLI_COMMAND", "uv tool run fulcra-api").split()
    result = subprocess.run(
        [*command, *args],
        capture_output=True,
        text=True,
Confidence
95% confidence
Finding
result = subprocess.run( [*command, *args], capture_output=True, text=True, timeout=60, check=False, )

subprocess module call

Medium
Category
Dangerous Code Execution
Content
def get_weather(location: str) -> dict[str, Any]:
    try:
        result = subprocess.run(
            ["curl", "-s", f"wttr.in/{location}?format=%l:+%c+%t+%h+%w"],
            capture_output=True,
            text=True,
Confidence
84% confidence
Finding
result = subprocess.run( ["curl", "-s", f"wttr.in/{location}?format=%l:+%c+%t+%h+%w"], capture_output=True, text=True, timeout=10, c

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

Medium
Category
Data Flow
Content
def run_fulcra_json(*args: str) -> Any:
    command = os.environ.get("FULCRA_CLI_COMMAND", "uv tool run fulcra-api").split()
    result = subprocess.run(
        [*command, *args],
        capture_output=True,
        text=True,
Confidence
98% confidence
Finding
result = subprocess.run( [*command, *args], capture_output=True, text=True, timeout=60, check=False, )

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill instructs the agent to execute shell commands and use environment-based configuration, but the skill metadata shown does not declare corresponding permissions. That mismatch is dangerous because it can lead to undeclared command execution and access to local context or external services without clear user review.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The skill description centers on Fulcra-context-based briefing generation, but this function performs an unrelated external weather lookup. That broadens data exposure and network behavior beyond the stated local/personal-context purpose, which is risky in privacy-sensitive agent skills. The mismatch between declared purpose and actual external behavior makes the capability more dangerous, not less.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The README explicitly promotes access to highly sensitive data categories including sleep, heart rate, HRV, location, and calendar context, but it does not present a clear, prominent privacy disclosure describing exactly what data will be collected, where it will be stored or transmitted, retention expectations, or how users should consent before use. In a skill designed for agents to assemble personalized briefings, this omission increases the risk of over-collection or unexpected handling of health and location data by downstream users or integrators.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The function sends the user's location string to wttr.in without any user-facing warning, consent, or privacy notice. Location can be sensitive personal data, and this creates a silent third-party disclosure channel from a morning-briefing skill that also processes sleep, biometrics, and calendar context. In this skill context, undisclosed outbound transmission is materially risky.

Session Persistence

Medium
Category
Rogue Agent
Content
Deliver a personalized morning briefing calibrated to how the human actually slept. Bad night? Keep it short and gentle. Great sleep? Go deep on the day ahead.

This is the lightweight morning workflow on top of **[fulcra-context](../fulcra-context/SKILL.md)**. Fulcra gives agents and their humans scoped, secure access to read and write real-world context and shared human/agent memory: attention, events, location, calendar, health, wearables, and other streams.

## What You'll Compose
Confidence
78% confidence
Finding
write real-world context and shared human/agent memory: attention, events, location, calendar, health, wearables, and other streams. ## What You'll Compose A morning briefing that includes: - **Slee

VirusTotal

60/60 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.