T09 · Insecure Skill Coding Practices
- Location
client.py:14- Finding
Credentials and Session Tokens May Be Transmitted over Plaintext HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Synology Calendar skill is mostly purpose-aligned, but it defaults to sending account credentials over plain HTTP and lacks adequate warnings around secrets and deletion actions.
Review this before installing. Use only an HTTPS Synology URL, prefer a dedicated low-privilege account, avoid passing the password on the command line, and be careful with delete commands because the skill can modify or remove calendar data.
client.py:14Credentials and Session Tokens May Be Transmitted over Plaintext HTTP
client.py:265CLI Password Argument and Authentication Identifier Logging Expose Sensitive Values
The code substantially matches the declared Synology Calendar management purpose for calendars, events, and todos: it logs in, performs event CRUD-related operations (create/get/list/delete), task creation/listing, and calendar/timezone listing against Synology Calendar API endpoints. However, the description explicitly says it supports contacts, and there is no contact functionality in the supplied code chunk. This is a description-behavior mismatch due to an overstated supported capability. No unrelated or suspicious undeclared behaviors are present beyond standard authentication and HTTP session handling.
The default server URL uses plain HTTP, and the login flow sends username and password directly to that endpoint. If used on an untrusted or even moderately exposed network, credentials and session tokens can be intercepted or modified by a man-in-the-middle, leading to account compromise and unauthorized calendar access.
The skill documents use of environment variables and network access to authenticate to and manipulate a Synology Calendar instance, but it declares no explicit tool scope or permissions. In an agent setting, missing scope boundaries can allow broader-than-expected access to secrets and outbound connections, reducing reviewability and increasing the chance of unauthorized or surprising behavior.
The skill instructs users to place a username and password in environment variables but provides no warning about secret handling, exposure risk, shell history, process inspection, or least-privilege account usage. Because the skill authenticates to a NAS service over the network, poor credential hygiene could lead to compromise of calendar data or broader Synology account access.
The documentation advertises delete operations for calendars and events without any warning, confirmation guidance, or mention of irreversible data loss. In an agent or automation context, this increases the likelihood of accidental destructive actions against user calendar data, especially if invoked from ambiguous prompts or scripts.
The manifest requires a username and password for a Synology account but does not provide any user-facing warning or guidance about handling these credentials as sensitive secrets. This increases the risk that users supply long-lived admin credentials without understanding storage, logging, or least-privilege implications, which could lead to account compromise or broader NAS exposure if the skill or surrounding platform mishandles them.
The code forces Asia/Shanghai as the timezone when creating non-all-day events, which imposes a locale-specific behavior without user opt-in. This can violate language/locale policy expectations because users in other regions are not given a choice or informed override path in the natural-language interface.
The delete_event method issues a DELETE request that removes calendar events, and the CLI directly invokes it from the delete-event command. The code prints after deletion succeeds or fails, but there is no prior confirmation prompt, cautionary comment/docstring, or user-facing warning about the destructive action.
For timed tasks, the code assigns Asia/Shanghai as the timezone automatically, which enforces a region-specific locale setting. The file does not present this as an opt-in choice or clearly justify the restriction as region-specific behavior.
When due is passed as a non-string integer, the task code sets tz_id to Asia/Shanghai, again enforcing a locale-specific default. Because users are not offered a timezone choice, this is a natural-language policy concern around locale handling.
The documentation presents Asia/Shanghai as the timezone example for event creation and uses it directly in the sample call, without noting that users should choose a timezone appropriate to their locale. This can be interpreted as a locale-specific default embedded in the skill instructions without opt-in.
The manifest description states the skill supports calendars, events, todos, and contacts. In this file, the implemented API methods cover login/logout, event management, task management, calendar listing, and timezone listing, but there are no contact endpoints, methods, or CLI commands.