T09 · Insecure Skill Coding Practices
- Location
SKILL.md:61- Finding
Unconditional Preset Can Disable Active Channels and Delete Session History
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:61-67,references/preset-safe.json:12-28
Vulnerability Type: Unsafe and overly broad configuration modification
Risk Level: MediumComplete Code Snippet (
SKILL.md:61-67):text ## AplicaçãoLer o preset
read("references/preset-safe.json")
Aplicar
gateway(action="config.patch", raw=<conteúdo do preset>)
text Complete Code Snippet (
references/preset-safe.json:12-28):json "session": { "maintenance": { "mode": "enforce", "pruneDays": 7, "maxEntries": 500 } }, "plugins": { "entries": { "whatsapp": { "enabled": false }, "discord": { "enabled": false }, "slack": { "enabled": false }, "nostr": { "enabled": false }, "googlechat": { "enabled": false }, "imessage": { "enabled": false }, "signal": { "enabled": false } } }Technical Analysis
The documented application procedure directs the agent to submit the entire preset through a single
gateway(action="config.patch")operation. The preset unconditionally disables seven messaging plugins and enables enforced session pruning without first inspecting the current configuration, identifying active channels, creating a backup, or obtaining approval for each potentially disruptive change.Although
SKILL.mdwarns users not to apply the plugin optimization when one of these channels is in use, it provides neither a plugin-free preset nor a selective patch procedure. Consequently, the primary documented command remains unsafe for users who overlook the warning or do not know which integrations are active.Enforced session maintenance can also remove session records older than seven days or beyond the configured entry limit. This operation may be irreversible and is inaccurately presented as carrying zero risk. These broad configuration changes exceed the minimum privileges and modifications n ...[truncated 1974 chars]
- Remediation
View remediation
Remediation Suggestions
- Split heartbeat selection, sub-agent archiving, session pruning, and plugin disabling into separate opt-in patches.
- Make the default preset non-destructive by excluding plugin shutdown and enforced session deletion.
- Call
gateway(action="config.get")before modification and determine which plugins are configured or active. - Require explicit, per-channel confirmation before disabling any messaging integration.
- Require separate confirmation before enabling session pruning, clearly identifying the retention period and entry limit.
- Provide a dry-run mode that reports every proposed configuration change and affected resource.
- Export or back up the existing configuration and session state before applying destructive changes.
- Supply tested rollback instructions that restore previous plugin and maintenance settings.
- Preserve active plugin settings by generating a selective patch rather than submitting a blanket preset.
- Replace the “Zero” risk claim with an accurate warning covering service interruption and data-retention consequences.
