T09 · Insecure Skill Coding Practices
- Location
scripts/main.py:256- Finding
Authenticated requests may be sent through a TLS connection with certificate verification disabled
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a coherent AgentArts skill generator, but it generates code that stores API keys in plaintext and can send authenticated requests through unsafe or overly flexible network paths.
Review before installing. Do not use this with production AgentArts credentials unless you first change the generator so generated skills require AGENTARTS_API_KEY at runtime and never write the key to disk. Remove the IP-direct TLS fallback, restrict base URLs to approved HTTPS AgentArts hosts, and use only a dedicated output directory with simple skill names.
scripts/main.py:256Authenticated requests may be sent through a TLS connection with certificate verification disabled
scripts/main.py:985AgentArts API keys are embedded as plaintext fallback credentials in generated Skills
scripts/main.py:837Runtime endpoint overrides can redirect API credentials and workflow data to arbitrary hosts
scripts/main.py:964Unsanitized Skill names permit output-directory traversal and predictable file overwrite
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.
The documented purpose is a simple skill generator, but the detected behavior expands into secret embedding, active network invocation logic, SSL-bypass/direct-IP fallback, and undeclared output post-processing. This mismatch is dangerous because users may approve or run the factory under false assumptions, while the generated code can weaken transport security and persist credentials in artifacts.
The template explicitly embeds API keys into generated code and documentation, causing secrets to be persisted in plaintext in files that are likely to be stored, copied, or committed to source control. In the context of a skill factory, this is especially dangerous because it systematically propagates credentials across every generated artifact, increasing the blast radius of a single operator mistake.
The generator writes output files containing API credentials without an explicit warning, which materially increases the chance of accidental secret disclosure through local storage, backups, logs, or repository commits. Because this is a factory, the insecure pattern is replicated into each generated skill, multiplying exposure across environments and users.
The README includes an example command that passes the API key directly on the command line, which commonly exposes secrets through shell history, terminal logs, CI logs, and process listings visible to other local users. In a skill factory context, this is especially risky because users are encouraged to copy-paste the example, potentially propagating insecure secret-handling practices into many generated skills and operational workflows.
The skill declares operational requirements and instructs use of environment variables, filesystem generation, and network-capable generated code, but does not declare any explicit tool scope or permissions boundary. This increases the chance that an agent runtime grants broader capabilities than users expect, especially because the skill can create files and handle secrets while preparing invoker code.
The skill explicitly instructs collection of an API key and reuse of that secret in generated commands and code artifacts. Persisting bearer tokens in files or templated source increases the risk of accidental commits, artifact leakage, local compromise, and reuse by unauthorized users.
The example generation command encourages users to place a bearer token directly in a shell command, exposing it to command history, process-table inspection, and logging. This is a concrete secret-disclosure risk, not just a documentation concern, because users often copy examples verbatim.
The example command passes a bearer token directly on the command line, which can leak via shell history, process listings, audit logs, and CI job output. Because this skill is specifically about packaging reusable integrations, the example encourages insecure secret-handling habits that may be copied into production workflows.
The validation and delivery steps normalize checking generated configuration values that include default secret fields, reinforcing a workflow where credentials persist inside code/config artifacts. In a factory skill that mass-produces integrations, this can scale secret sprawl across multiple generated skills and repositories.
The generated SKILL.md template is written in Chinese and includes fixed Chinese headings, instructions, and sample output, which forces a specific language/locale on downstream users. The file does not offer any user opt-in or configuration for language selection, matching the language-policy violation criteria.
The template instructs the agent to return raw upstream permission-error content directly to the user. Raw backend error bodies often contain internal identifiers, policy names, resource paths, account data, or implementation details that can aid enumeration and targeted follow-on attacks; in a generated skill context, this insecure disclosure policy is propagated by default to every skill.
This skill is described as a factory that quickly wraps AgentArts workflows into standard skill directories from connection and auth parameters. But the generated invoker includes broad result-inspection logic for numeric extraction, normal-range parsing, and abnormal metric detection, which is a specialized analytical capability unrelated to simply packaging arbitrary workflows.
The generated invoker prints raw permission-error payloads to output, directly implementing the insecure disclosure behavior described in the template. This can leak backend details to end users or operators viewing console output, and because it is built into the factory, the behavior becomes a repeatable default across all generated clients.
The default behavior text inserted into generated SKILL.md says the first API call should only output the cloud workflow result and should not automatically perform follow-up analysis. However, the generated invoke_agentarts.py template automatically scans successful responses for out-of-range indicators and prints derived analysis summaries, which is a substantive contradiction between embedded documentation and code behavior.
These defaults define user-visible generated content entirely in Chinese, including behavior rules and example phrasing, without any mechanism for locale choice. This imposes a language policy decision in natural-language content rather than adapting to or asking for user preference.
The script outputs a summary including part of the API key after generating files that contain the credential. For code files, handling sensitive credentials is a safety-relevant operation, and there is no user-facing warning in this script that it will process and persist the secret beyond this partial masking.
Natural-language policy violations include forcing a specific language without user opt-in. This skill's manifest description, trigger text, and operating instructions are all Chinese-only, and there is no indication that users may choose another language or that the language restriction is intentional and justified.
Detected: suspicious.insecure_tls_verification