Back to skill

Security audit

Manage Your Family's todos

Security checks for vulnerabilities and agentic risk

Overview

This is a local family todo manager, but its multi-user controls are too weak for shared use because any invoker can list, add, complete, or delete tasks across users.

Install this only for a single trusted user or a tightly controlled family automation context. Do not expose it directly to multiple chat users unless an outer layer authenticates callers and enforces who may view, add, complete, or delete each task. Keep the working directory private because todo contents are stored in plaintext JSON.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (2)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
todo.js:157
Finding

Missing Authorization Allows Cross-User Task Access and Modification

Content
View full analysis
t.status !== 'done'); // Filter logic: // If owner is specified, show tasks for that owner + 'Family' tasks // If showAll is true, ignore owner filter if (!showAll && owner) { tasks = tasks.filter(t => t.owner === owner || t.owner === 'Family' || USERS[owner] === t.owner); } ``` ```javascript function addTodo(content, owner, dueDate) { const data = loadTodos(); const newTask = { id: generateId(), content, owner: owner || 'Admin', // Default to Admin status: 'pending', dueDate: dueDate || null, createdAt: new Date().toISOString() }; data.tasks.push(newTask); saveTodos(data); console.log(`✅ Task Added [${newTask.id}]: "${content}" (${newTask.owner})`); } function completeTodo(idOrContent) { const data = loadTodos(); const taskIndex = data.tasks.findIndex(t => t.id === idOrContent || t.content.includes(idOrContent)); if (taskIndex === -1) { console.log(`❌ Task not found: "${idOrContent}"`); return; } const task = data.tasks[taskIndex]; if (task.status === 'done') { console.log(`ℹ️ Task already completed: "${task.content}"`); return; } task.status = 'done'; task.completedAt = new Date().toISOString(); saveTodos(data); console.log(`🎉 Task Completed: "${task.content}"`); } function deleteTodo(id) { const data = loadTodos(); const initialLength = data.tasks.length; data ...[truncated 2872 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
todo.js:31
Finding

Todo Data Is Created Without Explicit Restrictive Filesystem Permissions

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (4)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The configuration labels shared family tasks under 'Shared', but the rest of the code checks for owner === 'Family'. This inconsistency can cause shared tasks to be omitted from expected views or assigned under mismatched ownership, which is an authorization and data-segregation logic flaw in a multi-user todo manager.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The manifest describes a family todo list manager with multi-user support, which is implemented locally via a JSON file. Reading process environment variables for TODO_ADMIN_ID, TODO_PARTNER_ID, and TODO_GROUP_ID introduces credential/configuration access that is not clearly justified by the stated purpose, especially since the rest of the skill operates entirely on local storage.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The filter comment states that specifying an owner shows tasks for that owner plus 'Family' tasks, but the actual condition also includes tasks where USERS[owner] === t.owner. That means the code supports an additional ID-based matching behavior not described by the comment, so the documentation contradicts the implemented selection logic.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.