T09 · Insecure Skill Coding Practices
- Location
references/test-phases.md:145- Finding
Unrestricted Automation Can Trigger Destructive Application Actions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This QA skill does what it claims, but it can install software, disable browser isolation, click and submit real app controls, and expose screenshots without enough user control or warnings.
Install only if you intend to run active end-to-end tests in an authorized, disposable staging environment. Do not use it against production, third-party, admin, financial, or sensitive authenticated sessions unless you add strict allowlists, a dry-run mode, confirmation before submissions/clicks, safer dependency setup, sandboxed non-root browser execution, and private handling or cleanup of screenshots.
references/test-phases.md:145Unrestricted Automation Can Trigger Destructive Application Actions
SKILL.md:82Chromium Security Sandbox Is Unconditionally Disabled
SKILL.md:53Mutable External Installers and Unpinned Dependencies Are Executed at Runtime
references/test-phases.md:100Discovered Navigation Links Are Followed Without Origin or Network Restrictions
references/test-phases.md:31Full-Page Screenshots Can Be Copied Into a Web-Accessible Directory Without Redaction
The trigger phrases are broad enough to match common requests like 'check if everything works' or 'browse the website automatically,' causing the skill to activate in many benign contexts. Because the skill performs exhaustive interaction and can modify the host by installing software, overbroad triggering materially increases the chance of unintended execution.
This script does not merely observe application behavior; it fills forms, submits them, creates accounts, attempts login/logout flows, and clicks arbitrary buttons. Without a prominent warning, a user may run it against production or third-party systems and unintentionally trigger state-changing actions, data creation, emails, purchases, or destructive workflows.
The skill advertises exhaustive clicking, form filling, and full user-journey simulation without warning that this can submit data, trigger side effects, alter application state, or interact with production systems. In context, the absence of a user-facing warning makes accidental destructive testing more likely.
The skill instructs collection of broad host-environment details before QA begins, including OS, container status, user identity, package managers, installed runtimes, browser binaries, disk state, and outbound connectivity. This exceeds the minimum needed for app testing and creates unnecessary system reconnaissance that could expose sensitive infrastructure details or normalize host inspection in response to ordinary QA requests.
The skill includes package installation, dependency bootstrapping, and fetching remote installer code to modify the host environment. For a QA skill, this is dangerous because a routine testing request can trigger persistent system changes, external downloads, and execution of unpinned software, increasing supply-chain and environment-integrity risk.
The instructions perform apt/apk installs, pip installs, Playwright browser downloads, and even bootstrap pip from the internet, yet provide no explicit warning that the host will be modified. This omission is particularly dangerous because users invoking a QA skill may not expect privileged package operations or network retrieval of executable dependencies.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The script captures full-page screenshots throughout navigation and testing, but the documentation does not warn that these artifacts may contain credentials, personal information, session state, or confidential application content. Combined with later instructions to copy artifacts elsewhere, this increases privacy and integrity risk because sensitive data may be retained or redistributed without operator awareness.
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.
name = inp.get_attribute("name") or inp.get_attribute("placeholder") or "field"
inp.fill(f"Test {name}")
except Exception as e:
print(f" ⚠️ Could not fill input: {e}")
shot(page, f"form_{fi}_filled")
The documentation explicitly instructs copying screenshots generated during QA runs into a web-served directory. Because those screenshots may contain authenticated pages, personal data, admin views, or internal application state, publishing them via a web-accessible path can cause unintended data exposure unrelated to the testing function itself.
The skill stores screenshots locally without warning that captures may contain sensitive application data, credentials, personal information, or internal UI state. While lower severity than the installation and reconnaissance issues, silent artifact creation can still create privacy and retention risks.
This markdown file provides commands that install packages, install browser dependencies, and export environment variables, which can modify the container environment. The file presents these actions as operational steps but does not include a user-facing warning about their impact on the system state.
The manifest describes a skill for browser-based end-to-end QA testing. While Docker-specific browser flags are clearly in scope, this section recommends running subprocess.run(['free', '-m']) to inspect system memory, which adds a host-level command execution capability beyond direct browser automation. That capability is only tangentially related to QA and is not declared in the manifest description itself.