T09 · Insecure Skill Coding Practices
- Location
scripts/monitor.py:27- Finding
HTTPS Certificate and Hostname Verification Disabled
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This web-monitoring skill is not clearly malicious, but it needs review because it disables HTTPS certificate checks and can run arbitrary local shell commands when a page changes.
Install only if you are comfortable with a monitor that can execute any command you pass to --notify and that currently does not authenticate HTTPS sites. Avoid using --notify for sensitive or privileged actions, do not run it as an administrator or service account, and treat monitored content and notification destinations as potentially sensitive until TLS verification and safer notification handling are fixed.
scripts/monitor.py:27HTTPS Certificate and Hostname Verification Disabled
scripts/monitor.py:105Arbitrary Shell Command Execution Through Notification Hook
references/examples.md:54Documentation Recommends Installation of an Unpinned Third-Party Package
The documented behavior materially understates the risk of the implementation: arbitrary shell commands may run via --notify, SSL verification is reportedly disabled, and the advertised selector support is misleading. The most serious issue is command execution and insecure transport, which can enable remote abuse, interception, or unexpected code execution in a skill that appears to be a simple web monitor.
Allowing arbitrary shell commands for notifications is not necessary for basic web-page monitoring and materially expands the skill's capabilities. It creates a dangerous execution surface where a simple content monitor can launch any local command, which is disproportionate to the stated purpose.
The script executes the raw --notify argument with os.system(), which invokes a shell and allows arbitrary command execution. In a monitoring skill, this turns a content-change event into a shell execution primitive; if the argument is influenced by untrusted input, wrappers, or automation, it can run unintended commands with the user's privileges.
print(f"Previous: {prev['hash'][:16]}...")
print(f"Current: {current_hash[:16]}...")
if args.notify:
os.system(args.notify)
return 2
else:
print(f"No previous data to compare (file: {args.compare})")
In continuous watch mode, arbitrary command execution is even more dangerous because remote page changes can repeatedly trigger local actions. This makes the skill substantially riskier in context: a website monitor should not function as an unattended command executor driven by network content.
In watch mode, every detected change can trigger os.system(args.notify), repeatedly executing an arbitrary shell command. This increases risk because a monitored page can indirectly cause repeated command execution, turning the tool into a general-purpose command runner tied to external web content.
if new_hash != current_hash:
print(f"\n[{datetime.now().isoformat()}] CHANGE DETECTED!")
if args.notify:
os.system(args.notify)
current_hash = new_hash
data['hash'] = new_hash
data['content'] = new_content if not args.hash_only else None
The skill advertises and documents capabilities that imply network access, file writes, and shell execution, but it does not declare any tool scope or permission boundaries. This is dangerous because consumers and enforcement layers cannot accurately restrict what the skill may do, increasing the chance of unintended command execution, outbound requests, or filesystem modification during use.
The markdown normalizes use of a notification feature that executes shell commands on change detection without any warning or guardrails. In the context of an automation skill, this can lead users to embed unsafe commands or route untrusted page-change data into the shell, creating a realistic path to command injection or harmful local command execution.
This markdown file documents a webhook example using curl to post to a Slack webhook, which is a network transmission to an external service. The surrounding examples and notification section do not provide any user warning about privacy, data disclosure, or the fact that page-change information may be sent off-system.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
curl -X POST "https://hooks.slack.com/services/XXX" -d "{\"text\":\"Change detected\"}"
The module description omits a material security behavior: HTTPS certificate verification is disabled for all requests. This is misleading because users may reasonably assume normal TLS protections, making them less likely to recognize that content can be intercepted or altered by a man-in-the-middle attacker.
The code disables hostname checking and certificate verification, so HTTPS connections no longer authenticate the server. An attacker on the network path can tamper with monitored content, suppress or fabricate changes, and influence downstream actions such as notifications.
The tool exposes arbitrary command execution through --notify without clearly warning users that local shell commands will be run on detected changes. Even when user-configured, this is security-relevant functionality that can be misused or misunderstood, especially in automation contexts.
Detected: suspicious.insecure_tls_verification