Back to skill

Security audit

Agent Bug Submission

Security checks for vulnerabilities and agentic risk

Overview

The skill matches a bug-submission workflow, but it asks users to pass a TeamCycle password on the command line and delegates submission to an unaudited local script.

Review before installing. Do not enter real passwords into chat or command-line examples from this skill. Use it only in a controlled internal environment after replacing password-based command-line authentication with a protected credential flow and verifying the referenced bug-reporter implementation and Feishu/TeamCycle destinations.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:63
Finding
TeamCycle Password Passed Through Command-Line Arguments## Vulnerability Details **File Location**: `SKILL.md`, line 63 **Vulnerability Type**: Exposure of authentication credentials through process arguments **Risk Level**: Medium ### Vulnerable Code The documented command has the following structure, with the password supplied as its second positional argument: ```shell python scripts/bug_reporter.py zhanju.zhang "PASSWORD" 58 "BUG_TITLE" "HTML_BUG_DESCRIPTION" 211 "PRIORITY" "PHASE" ``` ### Technical Analysis The documented invocation requires a TeamCycle password to be entered directly into a command-line argument. Command-line arguments are not an appropriate channel for authentication secrets because they may be exposed through: - Shell history files. - Process listings and process-monitoring utilities. - Terminal-session recording. - Endpoint telemetry and audit logs. - Wrapper scripts or automation logs that record the complete command. - Error reports that include the invoked command. Although the password shown in the documentation is a placeholder rather than a hardcoded credential, users following the documented workflow are instructed to replace it with a real password. This creates a concrete credential-disclosure risk. ### Attack Path 1. A user follows the documented example and replaces the password placeholder with a valid TeamCycle password. 2. The user executes the command in a terminal or through an automation system. 3. The complete command is retained in shell history, captured by process telemetry, or temporarily exposed through process inspection. 4. A local user, monitoring-system operator, compromised process, or party with access to collected logs retrieves the password. 5. The exposed credentials are used to authenticate to TeamCycle as the affected user. ### Impact Assessment Successful exploitation exposes the TeamCycle account credentials of the user invoking the Skill. The resulting privileges are limited to those assigned to ...[truncated 244 chars]
Remediation
## Remediation Suggestions - Do not accept passwords through positional command-line arguments. - Retrieve credentials from an operating-system credential manager, managed secret store, or protected runtime secret injection mechanism. - For interactive use, request the password through a hidden-input prompt that disables terminal echo. - If an environment variable is unavoidable, ensure it is injected only at runtime, is never logged, and is removed immediately after use. A managed secret store remains preferable. - Replace password-based authentication with a narrowly scoped API token when TeamCycle supports it. - Ensure tokens have the minimum permissions necessary to create defects and have short expiration periods where possible. - Redact secrets from application logs, exception messages, telemetry, and debugging output. - Update the documentation so examples contain no workflow that instructs users to place credentials on the command line. - Advise users who have already followed this workflow to remove affected shell-history entries and rotate the exposed password.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:42
Finding
Execution Is Delegated to an Unbundled and Unpinned Local Dependency## Vulnerability Details **File Location**: `SKILL.md`, lines 42-46 **Vulnerability Type**: Unverified executable dependency and supply-chain trust failure **Risk Level**: Medium ### Vulnerable Code ```text This Skill depends on the bug-reporter Skill for actual defect submission: Path: C:\Users\zhanju.zhang\.openclaw\workspace\skills\bug-reporter Function: Invoke the TeamCycle API to submit defects ``` The dependency is subsequently invoked using: ```shell python scripts/bug_reporter.py ... ``` ### Technical Analysis The package delegates its core operation to a local `bug-reporter` implementation that is not included in the audited artifact. No version, cryptographic digest, trusted installation source, signature, or integrity-validation procedure is specified. The invocation also uses the relative path `scripts/bug_reporter.py`, while the dependency description provides a user-specific absolute directory. This makes the effective executable dependent on the current working directory and runtime resolution behavior. A different file with the expected relative name could therefore be invoked instead of the intended implementation. Because this external script receives TeamCycle credentials and confidential defect content, substitution or modification of the dependency would expose high-value data and could execute arbitrary Python code under the invoking user's account. The audited package does not itself contain malicious code. The vulnerability is the absence of a verifiable trust boundary around the executable component on which the documented workflow depends. ### Attack Path 1. An attacker obtains write access to the referenced `bug-reporter` directory, the current working directory, or another location that can influence resolution of `scripts/bug_reporter.py`. 2. The attacker creates or replaces `scripts/bug_reporter.py` with a malicious implementation. 3. A user invokes the documented defect-submiss ...[truncated 850 chars]
Remediation
## Remediation Suggestions - Bundle the reviewed submission implementation with the Skill, or declare it as a versioned dependency from a trusted and authenticated source. - Pin the dependency to an immutable version and verify its cryptographic digest or digital signature before execution. - Record the expected publisher, source repository, release identifier, and integrity value in the package metadata. - Avoid user-specific absolute paths and ambiguous relative script paths. - Resolve the script through a canonical absolute path and verify that the resolved file remains within the expected trusted directory. - Reject symbolic links, unexpected ownership, or insecure write permissions on the dependency and its parent directories. - Ensure that untrusted users cannot modify the script or any directory involved in path resolution. - Execute the dependency with least privilege and restrict its filesystem and network access to what defect submission requires. - Do not provide the dependency with a raw password. Use a narrowly scoped token obtained from a protected secret provider. - Add automated integrity and provenance checks to installation and execution workflows.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Ssd 3

High
Confidence
99% confidence
Finding
The documentation gives a concrete credential-bearing command example, encouraging operators to provide or reuse passwords during normal workflow. In an agent setting, this is especially dangerous because users may paste credentials into conversational context, tool inputs, terminal history, or logs, causing persistent secret exposure.

Missing User Warnings

High
Confidence
99% confidence
Finding
The example command normalizes password handling as a plain argument without any safety guidance. Command-line arguments are commonly exposed via shell history, process listings, logs, and transcripts, so this pattern can directly leak user credentials.

Ssd 3

High
Confidence
98% confidence
Finding
Documenting 'password' as a required input teaches the agent or user that collecting credentials is an expected step. That increases the chance of phishing-like prompts, accidental disclosure in chat, and insecure downstream handling of credentials across the TeamCycle submission flow.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill transmits bug details to external systems including TeamCycle and Feishu, but it does not warn users that submitted content may leave the local environment and be stored in third-party platforms. This creates a real risk of users unknowingly disclosing sensitive internal data, customer data, or secrets during bug reporting.

Natural-Language Policy Violations

Low
Confidence
78% confidence
Finding
The manifest description and invocation phrases are written entirely in Chinese, and the skill does not state that language is configurable or user-selectable. Under the policy, a fixed language can be a violation when the skill does not offer a language or locale choice or explain a justified locale restriction.

Natural-Language Policy Violations

Low
Confidence
94% confidence
Finding
The description is written only in Chinese, which implies a language-specific user experience without any visible opt-in or explanation that the skill is intended solely for a Chinese-speaking context. The policy requires language or locale constraints to be optional or clearly justified.

Static analysis

No suspicious patterns detected.