other
Warning
- Location
- SKILL.md:22
- Finding
- Unrestricted Processing of Sensitive Agent Memory## Vulnerability Details **File Location**: `SKILL.md`, lines 22-38 **Vulnerability Type**: Privacy-sensitive agent memory reconnaissance **Risk Level**: Medium ### Vulnerable Code ```powershell # Get last 7 days of memory $startDate = (Get-Date).AddDays(-7) $memoryFiles = Get-ChildItem "memory/" -Filter "*.md" | Where-Object { $_.LastWriteTime -ge $startDate } # Aggregate metrics $totalTasks = 0 $completedTasks = 0 $blockedTasks = 0 $patterns = @{} foreach ($file in $memoryFiles) { $content = Get-Content $file.FullName -Raw # Count tasks $totalTasks += ([regex]::Matches($content, "Task:")).Count $completedTasks += ([regex]::Matches($content, "Status: complete")).Count $blockedTasks += ([regex]::Matches($content, "Blocker:")).Count # Extract patterns $blockers = [regex]::Matches($content, "Blocker: (.+)") ``` ### Technical Analysis The workflow enumerates every recently modified Markdown file in the `memory/` directory and loads each file in full through `Get-Content -Raw`. It then extracts the complete text following each `Blocker:` field. This behavior conflicts with the stated privacy control of using “aggregate data only.” Although task-status metrics are aggregated, blocker values are retained as raw strings for subsequent processing. Memory files can contain private conversation-derived information, project details, operational failures, internal paths, credentials, or other sensitive data. There is no field-level data minimization, schema validation, secret redaction, access confirmation, or provenance check before memory content is processed. No network transmission is present in the reviewed file, so the confirmed exposure is limited to local processing and any downstream local reports or generated skills. ### Attack Path 1. Sensitive or attacker-influenced text is recorded in a recent `memory/*.md` file, particularly on a line beginning wi ...[truncated 1122 chars]
- Remediation
- ## Remediation Suggestions - Replace full memory-file reads with a dedicated, schema-validated metrics store containing only task counts, status values, and approved blocker category identifiers. - Require explicit user authorization before inspecting conversational or long-term memory. - Apply an allowlist of accepted fields and reject free-form blocker text. - Categorize blocker details at ingestion time and retain only non-sensitive category labels for analytics. - Add secret and personally identifiable information redaction before any data reaches reports, logs, or skill-generation workflows. - Ensure raw memory content is discarded immediately after processing and is never copied into generated skills. - Restrict filesystem access to the minimum required directory and verify that symbolic links cannot redirect reads outside the intended memory location. - Document which memory data is accessed, how long derived information is retained, and where reports are written.
