Back to skill

Security audit

Family OS

Security checks for vulnerabilities and agentic risk

Overview

This skill is purpose-aligned but should be reviewed because it creates a persistent local household database for highly sensitive family information without strong built-in containment or filesystem privacy controls.

Install only if you want an agent to maintain a long-lived local record of household facts, plans, decisions, finances, health, legal/admin notes, and related private information. Use a private workspace path, review auto-update settings, keep ask-before-sensitive-write enabled, and check filesystem permissions so other local users cannot read the workspace.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/family_os_init.py:506
Finding

Private Household Workspace Created Without Restrictive Filesystem Permissions

Content
View full analysis
bool: if path.exists(): return False path.parent.mkdir(parents=True, exist_ok=True) path.write_text(content, encoding="utf-8") return True ``` ```python def write_config(config: Path, workspace: Path, language: str, ask_sensitive: bool) -> None: config.parent.mkdir(parents=True, exist_ok=True) text = f"""workspace: {workspace} language: {language} privacy_mode: local-only auto_update: enabled: true update_dashboard: true update_memory: true update_projects: true ask_before_sensitive_write: {str(ask_sensitive).lower()} """ config.write_text(text, encoding="utf-8") ``` ```python def init_workspace(workspace: Path, archive_existing: bool, language: str) -> tuple[list[str], Path | None]: workspace.mkdir(parents=True, exist_ok=True) archive_dir = archive_existing_workspace(workspace) if archive_existing else None created: list[str] = [] for directory in DIRS: path = workspace / directory if not path.exists(): path.mkdir(parents=True) created.append(directory + "/") for rel, content in render_files(language).items(): if write_if_missing(workspace / rel, content): created.append(rel) return created, archive_dir ``` ### Technical Analysis The project is designed to store sensitive household data, including financial, medical, legal, identity, child, relationship, and address information. However, the initializer does not explicitly restrict permissions on the workspace, its subdirectories, generated Markdown files, or `~/.family-os/config.yaml`. `Path.mkdir()` normally requests mode `0777`, while `Path.write_text()` creates files using th ...[truncated 1905 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (10)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 17)May include surrounding context.

md
4. If no workspace exists, run `scripts/family_os_init.py` to create one.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 27)May include surrounding context.

md
4. If no workspace exists, run `scripts/family_os_init.py` to create one.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 35)May include surrounding context.

md
4. If no workspace exists, run `scripts/family_os_init.py` to create one.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 65)May include surrounding context.

md
4. If no workspace exists, run `scripts/family_os_init.py` to create one.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill instructs the agent to read environment variables, read local config files, and write to user-specified workspace paths, but it does not declare any explicit tool scope or permissions boundary. This creates a mismatch between documented behavior and enforceable access controls, increasing the risk of overbroad file/system access if the runtime grants default capabilities.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
82% confidence
Finding

The skill is explicitly designed to persist highly sensitive household data across sessions in a local workspace, including finances, health, legal/admin records, and decisions. Even though the skill emphasizes local storage and privacy, persistent retention of sensitive data increases exposure from unauthorized local access, path confusion, accidental disclosure, or unsafe agent writes to the wrong directory.

Content

Scanner excerpt · SKILL.md (reported line 17)May include surrounding context.

md
1. Use a workspace path explicitly provided by the user.
2. Use `FAMILY_OS_HOME` when set.
3. Read `~/.family-os/config.yaml` when present.
4. If no workspace exists, run `scripts/family_os_init.py` to create one.

Never write household facts, names, finances, medical details, documents, or private decisions into this skill directory.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instruction explicitly tells the agent to read from and write to the user's local workspace, but it does not require user notice, confirmation, or clear scope limits before accessing or modifying local files. In a skill designed to manage highly sensitive household data, this can lead to unexpected file access or unauthorized modification of private records if an agent executes the instruction automatically.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The instruction to treat each family conversation as potential structured input and extract anything useful for future action or memory creates a broad retention mandate over intimate household communications. In the context of a family OS skill handling parenting, finance, health, legal, and relationship matters, this encourages over-collection and long-term storage of sensitive data far beyond data-minimization principles.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The file explicitly instructs the agent to write family operations directly when auto-update is enabled, but it does not require a clear user-facing notification at the moment of modification. In a skill designed to manage highly sensitive household data, silent or background writes increase the risk of unexpected persistence, accidental disclosure, and loss of user control over what is stored.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This code relocates all existing workspace contents into an archive directory when --archive-existing is used, which is a safety-relevant file operation affecting user data. Although the script prints results afterward, there is no confirmation prompt or pre-action warning at the point of execution explaining that existing files will be moved.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.