Back to skill

Security audit

Continuity Framework

Security checks for vulnerabilities and agentic risk

Overview

This memory skill is not malicious, but it deserves review because it persistently stores conversation-derived identity, relationship, question, and reflection data across sessions without clear retention or deletion controls.

Install only if you intentionally want cross-session memory. Treat the stored memory directory as sensitive, review or delete its files periodically, and avoid enabling heartbeat reflection unless users have clearly opted into post-session analysis and persistence.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (10)

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill documents capabilities that imply environment-variable access and file writes, but it does not declare any explicit tool scope or permissions boundary. That creates ambiguity around what the skill may access or modify, increasing the risk of overbroad file persistence, unintended writes to memory files, or access to sensitive runtime configuration.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill is explicitly designed to persist conversation-derived memories and surface them in later sessions, but it does not warn users that their conversation content may be stored and reused. This creates a privacy and consent issue because sensitive personal information could be retained, inferred, and later resurfaced without the user's clear awareness.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The heartbeat integration specifies autonomous post-session reflection after idle time, meaning prior conversations are processed without an explicit real-time prompt or warning. This increases privacy risk because users may reasonably expect the session to end when idle, not trigger additional analysis and persistence of their messages.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The framework explicitly describes persistent, structured storage of conversation-derived data and asynchronous reflection over prior interactions, but it does not mention user notice, consent, retention limits, or controls over what is stored. In a memory-focused skill, this creates a real privacy and compliance risk because sensitive user information could be retained and reprocessed beyond the immediate session without the user's informed awareness.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The tool saves pending questions and identity data across sessions, creating a persistent behavioral/profile store without clearly warning the user. In this skill context, that is more concerning because the entire feature is designed to accumulate longitudinal memory, which can reveal personal attributes, relationship details, and inferred preferences over time.

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

Medium
Category
Data Flow
Content
"""Save questions to file."""
    ensure_dirs()
    
    with open(QUESTIONS_FILE, 'w') as f:
        f.write("# Pending Questions\n\n")
        f.write(f"_Generated from reflection. Last updated: {datetime.now(timezone.utc).isoformat()}_\n\n")
Confidence
65% confidence
Finding
Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.

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

Medium
Category
Data Flow
Content
"""Save identity/self-model."""
    ensure_dirs()
    
    with open(IDENTITY_FILE, 'w') as f:
        f.write("# Identity\n\n")
        f.write(f"_Last updated: {datetime.now(timezone.utc).isoformat()}_\n\n")
Confidence
65% confidence
Finding
Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill persistently stores reflection analysis derived from session content without any consent flow, retention notice, or minimization controls. Because the stated purpose is memory integration across sessions, the stored JSON can easily contain sensitive conversation details, preferences, or other personal data that may later be exposed to local users, backups, or other tools.

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

Medium
Category
Data Flow
Content
# Save reflection log
        reflection_file = REFLECTIONS_DIR / f"{datetime.now().strftime('%Y-%m-%d-%H%M')}.json"
        with open(reflection_file, 'w') as f:
            json.dump({
                "timestamp": datetime.now(timezone.utc).isoformat(),
                "analysis": analysis
Confidence
65% confidence
Finding
Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.

Natural-Language Policy Violations

Low
Confidence
70% confidence
Finding
The natural-language examples describe a 'Collaborative partnership deepening' and 'Moving from assistant to co-builder,' which push an unusually intimate relational framing for a memory skill. While not a direct security flaw, this language can reflect organizational policy concerns around inappropriate anthropomorphic or relationship-oriented positioning if not clearly justified.

Static analysis

No suspicious patterns detected.