T09 · Insecure Skill Coding Practices
- Location
scripts/main.py:22- Finding
TLS Certificate Verification Is Disabled by Default
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it says, but it can make live FortiGate changes and has unsafe defaults that could expose administrator access or broaden firewall rules.
Review carefully before installing. Use only with a least-privilege FortiGate API token, set FORTIGATE_VERIFY_SSL=true with a valid certificate, test outside production first, and avoid configure-icond until interface access changes, rollback behavior, and exact FortiOS API support are reviewed.
scripts/main.py:22TLS Certificate Verification Is Disabled by Default
scripts/main.py:237Industrial Connectivity Configuration Unnecessarily Enables Administrative Services
scripts/main.py:241Failed Industrial Connectivity Setup Leaves a Partial Security-Sensitive Configuration and Returns Success
scripts/main.py:137Unsupported CIDR Prefixes Silently Create Overly Broad Address Objects
The skill requires environment secrets (FORTIGATE_TOKEN) and performs network-based firewall administration, but it does not declare any explicit tool scope or permission boundaries. In an automation context, this increases the risk of over-broad execution, secret exposure, or unintended live changes because users and the platform are not given a clear least-privilege contract.
The documentation advertises create, update, and delete firewall operations against a production security device without prominent user-facing warnings, confirmations, rollback guidance, or change-control precautions. In the context of a FortiGate/ICS skill, accidental or misunderstood execution could disrupt network segmentation, expose industrial protocols, or cause operational outages.
The module description, CLI help text, and runtime messages are written in Chinese, with no mechanism for selecting another language. This creates a language policy concern because the skill imposes a locale/language choice on users rather than offering an opt-in or documenting a justified region-specific restriction.
The script globally disables TLS certificate warnings and allows HTTPS requests with certificate verification turned off via FORTIGATE_VERIFY_SSL=false, which is also the default. In a firewall administration skill, this makes man-in-the-middle interception of the FortiGate API session and bearer token much more feasible, especially on untrusted or segmented operational networks where self-signed certs are common.
The natural-language content, including the description, usage, and warnings, is entirely in Chinese. Under the stated policy, forcing a specific language without user opt-in or justification is a natural-language policy concern.
The dependency specifier requests>=2.25.1 is unpinned, which allows installation of different versions over time and makes builds non-reproducible. In a security-sensitive skill that automates FortiGate firewall configuration, this increases supply-chain risk because a vulnerable or behavior-changing upstream release could be pulled in without review.
requests>=2.25.1
tabulate>=0.8.9
requests has multiple known advisories, and because the manifest does not pin a specific version, there is no way to verify that deployed environments will avoid affected releases. This is more concerning in a firewall-automation skill because HTTP client behavior may affect authentication, certificate validation, redirect handling, or credential exposure when interacting with management interfaces.
The dependency specifier tabulate>=0.8.9 is also unpinned, so installations may resolve to different releases over time. While this package is lower risk than a networking library, unpinned dependencies still create reproducibility and supply-chain integrity issues.
requests>=2.25.1
tabulate>=0.8.9
FORTIGATE_TOKEN is accessed from the environment and then used to authorize API calls. While environment-based secret loading is common, this file does not include a visible warning, comment for users, or runtime disclosure about requiring and using privileged credentials.
No suspicious patterns detected.