Back to skill

Security audit

Team Status Tracker

Security checks for vulnerabilities and agentic risk

Overview

This skill is not overtly malicious, but it should be reviewed because it can use Slack access and store named workplace behavior and response records in Obsidian without enough privacy or retention safeguards.

Install only if your organization has approved this kind of personnel-status tracking and Slack access. Configure Slack scopes narrowly, verify the Maton gateway is trusted, store notes in a protected location, avoid subjective behavioral profiling unless explicitly authorized, and define retention and deletion outside the skill before use.

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
templates/obsidian-tracking.md:43
Finding
Confidential Personnel and Behavioral Records Stored in Plaintext Markdown Files<![CDATA[ ## Vulnerability Details **File Location**: `templates/obsidian-tracking.md:43-79`; related configuration at `config.yaml:38-41` **Vulnerability Type**: Plaintext storage of sensitive personnel information **Risk Level**: Medium ### Vulnerable Code `templates/obsidian-tracking.md:43-79`: ```markdown ## Individual Status Notes ### 1. [Team Member Name] ([Project/Role]) - **Response Time:** Xh Xm (PROMPT/DELAYED/NONE) - **Response Quality:** Detailed/Good/Vague/Minimal - **Status:** [What they reported] - **Blockers:** [Any blockers mentioned] - **Team Coordination:** [How team work is going] - **Support Needed:** [What they need] - **Follow-up Action:** [What you asked for] - **Behavioral Note:** [Pattern observation] ### 2. [Next Team Member] ... --- ## Key Observations ### Response Rate - **Total:** X/Y (Z%) - **Quick Responders:** Name, Name - **Non-Responders:** Name, Name ### Behavioral Patterns - ✅ **Positive:** [Good patterns] - ⚠️ **Concern:** [Issues noticed] - 🚨 **Critical:** [Urgent issues] ### Action Items 1. ✅ [Completed action] 2. ⏳ [Pending action] 3. 🔴 [Urgent action needed] ``` `config.yaml:38-41`: ```yaml # Tracking tracking: obsidian_path: "/root/life/pkm/daily-status" # Where to store tracking files keep_history_days: 90 # How long to keep daily logs ``` ### Technical Analysis The Skill instructs the Agent to collect identifiable personnel data—including response times, response quality, behavioral observations, blockers, and non-responder lists—and persist it as ordinary Markdown files in an Obsidian directory. Although the templates label this information as confidential, a confidentiality label does not enforce filesystem authorization, encryption at rest, secure deletion, or protection of backups and synchronized copies. The configured `keep_history_days: 90` value expresses a retention preference, but the reviewed project contains no implementation that enforces deletion after that ...[truncated 2084 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. **Minimize collected information** - Avoid free-form behavioral profiling unless it is strictly required. - Store objective project facts rather than subjective labels such as “poor” or “non-responsive.” - Do not retain named response metrics longer than operationally necessary. 2. **Protect the storage location** - Replace the fixed root-level path with a user-configurable protected directory. - Create directories with owner-only permissions, such as mode `0700`. - Create sensitive files with owner-only permissions, such as mode `0600`. - Validate permissions before writing and refuse to proceed when the vault is broadly readable. 3. **Encrypt sensitive records** - Use encrypted storage for personnel records rather than unprotected Markdown. - Keep encryption keys outside the vault and outside synchronized or backed-up content. - Use an operating-system credential store or managed secret service for key material. 4. **Enforce access control** - Define authorized readers by role. - Prevent untrusted Obsidian plugins and unrelated automation from accessing the tracking directory. - Review permissions for backup and synchronization services before enabling tracking. 5. **Implement retention securely** - Enforce `keep_history_days` in the implementation rather than treating it as documentation. - Delete expired primary records and account for synchronized copies, snapshots, and backups. - Record deletion outcomes and alert when retention cleanup fails. 6. **Add privacy safeguards** - Document the purpose and lawful basis for collecting personnel metrics. - Notify authorized administrators about the sensitivity of the data. - Establish procedures for access review, correction, export, and deletion where applicable. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (10)

Intent-Code Divergence

Medium
Confidence
92% confidence
Finding
The file presents the skill as maintaining confidentiality while elsewhere allowing disclosure of project budgets and payment context when a flag is enabled. That contradiction undermines operator trust and can cause accidental oversharing of sensitive business information under the mistaken belief that the workflow remains confidentiality-preserving.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The README encourages confidential internal tracking of individual response behavior, response times, and non-responder status without addressing employee privacy, notice, consent, retention, or misuse risks. In a workplace monitoring context, hidden behavioral profiling can create legal, HR, and trust issues, especially if the data is stored indefinitely or used for performance judgments beyond the original coordination purpose.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The README broadens a confidentiality-focused skill to optionally disclose budget and payment context, creating a policy contradiction that can lead operators to reveal sensitive financial information to team members or contractors. In a status-tracking skill centered on confidential internal coordination, this ambiguity is dangerous because users may treat optional disclosure as endorsed safe behavior without clear authorization, access-control, or compliance boundaries.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill explicitly instructs the operator to collect, categorize, and persist personnel-related behavioral data such as response times, response quality, and 'behavioral patterns' in confidential Obsidian notes, but it does not include any warning about privacy, consent, retention, legal/compliance constraints, or appropriate HR governance. That creates a real privacy and employee-monitoring risk because users may deploy the workflow for covert profiling or performance surveillance without safeguards.

External Transmission

Medium
Category
Data Exfiltration
Content
### Slack API (via Maton Gateway)
```bash
# List users
curl -X GET "https://gateway.maton.ai/slack/api/users.list" \
  -H "Authorization: Bearer $MATON_API_KEY"

# Send DM
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The configuration explicitly references behavioral tracking notes, response time metrics, and non-responder lists as categories of internal data, which indicates the skill is designed to collect or preserve employee-monitoring information even if it is not externally shared. In a team-status skill, this creates privacy and workplace-surveillance risk because sensitive behavioral data may be retained without clear consent, minimization, or governance controls.

Natural-Language Policy Violations

Medium
Confidence
84% confidence
Finding
The config specifies `work_hours_start` and `work_hours_end` explicitly in UTC, which imposes a specific locale/timezone assumption on users. Under the policy, forcing a locale-related setting without offering choice or documenting a justified regional constraint is a natural-language policy concern.

Missing User Warnings

Medium
Confidence
85% confidence
Finding
The template explicitly instructs the collection and retention of individual response times, response quality, behavioral notes, and non-responder lists, which are employee performance and behavioral monitoring data. Although it labels the file confidential, it does not include safeguards such as data minimization, retention limits, need-to-know access controls, or guidance to avoid subjective or unnecessary personal profiling, creating a real privacy and compliance risk.

Intent-Code Divergence

Low
Confidence
82% confidence
Finding
Marking categories as 'NEVER share' does not reduce the risk created by collecting and retaining them internally; it instead confirms that the skill contemplates handling sensitive personnel-related data. This is dangerous because internal-only storage of behavioral or response-related notes can still enable misuse, unauthorized access, or policy violations if the data is unnecessarily preserved.

Natural-Language Policy Violations

Low
Confidence
62% confidence
Finding
The natural-language instructions impose a rigid internal sharing policy such as 'Only share with founder' and 'DO NOT SHARE WITH TEAM MEMBERS' as absolute operational rules. Because SQP-3 covers organizational natural-language policy constraints, this appears as an undocumented policy directive embedded in the skill content without context or opt-in justification.

Static analysis

No suspicious patterns detected.