T09 · Insecure Skill Coding Practices
- Location
references/schedule-formats.md:31- Finding
Public-Read Schedule Sharing Can Expose Staff and Operational Data
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This scheduling skill is mostly purpose-aligned, but it needs review because it can handle sensitive staff schedule data while recommending public Google Sheets sharing and leaving access/action scope loose.
Review before installing in any real workplace setting. Use restricted service-account or authenticated access for Sheets and calendars, avoid public-read schedule links, limit the skill to approved schedule files/accounts, require manager confirmation before schedule changes or notifications, and store exported JSON securely because it may contain employee and operational data.
references/schedule-formats.md:31Public-Read Schedule Sharing Can Expose Staff and Operational Data
scripts/parse_schedule.py:47Unpinned Dependency Installation Guidance Creates Supply-Chain Risk
The declared description presents an operational scheduling assistant for end users, implying conversational support and workflow actions such as answering 'what's my shift,' managing swaps, leave, reminders, and on-call routing. The supplied code does something much narrower and different: it ingests schedule data from files, normalizes fields, parses informal text schedules, validates some scheduling constraints, and emits JSON. While this is related to scheduling as a supporting backend/parser, it does not implement the primary assistant behaviors described. Therefore the description materially overstates and misrepresents the actual functionality.
The skill documentation describes file-based schedule ingestion and a parsing script, but it does not declare any explicit tool scope or permissions. That creates an authorization gap where file read/write behavior may be available without clear limitation, increasing the risk of overbroad filesystem access or accidental exposure/modification of schedule and staff data.
Using the standalone trigger phrase "schedule" is overly broad and can cause the skill to activate for unrelated conversations. Unintended activation may expose employee scheduling context, route sensitive requests to the wrong workflow, or cause the agent to process leave/swap actions when the user meant something else.
The Google Sheets section explicitly suggests using a public-read link for staff scheduling data, which can expose employee names, shift times, roles, and manager contact details to anyone with the link or broader unintended audiences. In a shift-scheduling skill, this context increases the risk because the data is operationally sensitive and may enable privacy violations, social engineering, or stalking of staff.
Natural-language strings and parsing logic are explicitly tailored to Chinese text, such as the docstring Parse informal Chinese text schedule, Chinese date patterns, and Chinese field aliases. This imposes a locale-specific behavior without user opt-in or a clearly documented region-specific justification, which matches the language/locale policy concern.
The example schedule content and field values are presented in Chinese, but the document does not state that the skill is intentionally limited to Chinese-language schedules or provide any language/locale choice. Under the language policy, forcing a specific language without opt-in or justification can be a natural-language policy issue.
This code writes structured staff schedule data, including employee names and IDs, to disk via Path(args.output).write_text(...). Although the script prints a success message after writing, there is no user-facing warning in the file about handling potentially sensitive personnel data when exporting schedules.
No suspicious patterns detected.