Back to skill

Security audit

Terradev GPU Cloud

Security checks for vulnerabilities and agentic risk

Overview

Review before installing: the skill’s cloud-management purpose is coherent, but it asks for broad cloud credentials and installs an unpinned external CLI that can manage costly infrastructure.

Install only if you trust the Terradev CLI supply chain and are comfortable granting it cloud-management authority. Prefer configuring only the provider you are actively using, use narrow or short-lived credentials, run dry-run or quote commands first, confirm every provisioning or deletion action, and monitor cloud accounts for lingering instances, clusters, deployments, and spend.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:8
Finding
Excessive Global Exposure of Multi-Cloud Credentials<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:8-29` **Vulnerability Type**: Excessive credential access and violation of least privilege **Risk Level**: High ```yaml openclaw: requires: env: - TERRADEV_RUNPOD_KEY - TERRADEV_VASTAI_KEY - TERRADEV_AWS_ACCESS_KEY_ID - TERRADEV_AWS_SECRET_ACCESS_KEY - TERRADEV_AWS_DEFAULT_REGION - TERRADEV_GCP_PROJECT_ID - TERRADEV_GCP_CREDENTIALS_PATH - TERRADEV_AZURE_SUBSCRIPTION_ID - TERRADEV_AZURE_CLIENT_ID - TERRADEV_AZURE_CLIENT_SECRET - TERRADEV_AZURE_TENANT_ID - TERRADEV_ORACLE_USER_OCID - TERRADEV_ORACLE_FINGERPRINT - TERRADEV_ORACLE_PRIVATE_KEY_PATH - TERRADEV_ORACLE_TENANCY_OCID - TERRADEV_ORACLE_REGION - TERRADEV_LAMBDA_API_KEY - TERRADEV_COREWEAVE_API_KEY - TERRADEV_CRUSOE_API_KEY - TERRADEV_TENSORDOCK_API_KEY - HF_TOKEN ``` ### Technical Analysis The Skill declares credentials for numerous unrelated cloud providers as global environment requirements. This conflicts with the document's own minimum setup, which states that a single RunPod key is sufficient for basic operation. Environment variables and referenced credential files are potentially accessible to the installed `terradev` process and its dependencies. Consequently, an operation involving only one provider could expose AWS, GCP, Azure, Oracle, Hugging Face, and other provider credentials to the same process. This breaks the principle of least privilege and unnecessarily increases the credential blast radius. The project contains only `SKILL.md`; it does not include the source of `terradev-cli`. Therefore, the claim that credentials remain local cannot be verified from the audited artifact. ### Attack Path 1. A user configures several credentials listed in the global Skill requirements. 2. The Skill invokes the externally installed `terradev` executable for a ...[truncated 1081 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove optional provider credentials from the global `requires.env` declaration. 2. Request credentials only when the user selects the corresponding provider and operation. 3. Run each provider integration with an environment containing only that provider's required variables. 4. Use short-lived, narrowly scoped credentials instead of persistent account-level keys. 5. Assign separate identities and policies for quoting, provisioning, cluster administration, and resource termination. 6. Avoid exposing private-key paths unless an Oracle operation explicitly requires them. 7. Add preflight checks that identify required credentials without printing secret values. 8. Document minimum IAM permissions for every supported operation and provider. 9. Ensure child processes do not inherit unrelated environment variables. 10. Add tests verifying that a single-provider command cannot access credentials belonging to other providers. ]]>

T08 · Insecure Dependencies

Error
Location
SKILL.md:42
Finding
Unpinned and Unauditable Third-Party CLI Installation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:42-48` and `SKILL.md:296-300` **Vulnerability Type**: Unpinned third-party dependency with expanded optional dependency surface **Risk Level**: High ```yaml install: - kind: uv package: terradev-cli bins: [terradev] - kind: uv package: "terradev-cli[all]" bins: [terradev] note: "Optional: Install with all cloud provider SDKs" ``` ```bash pip install terradev-cli # With all providers + HF Spaces: pip install "terradev-cli[all]" ``` ### Technical Analysis The Skill installs `terradev-cli` without an exact version constraint, integrity hash, lockfile, or reproducible-build reference. As a result, the code installed when a user activates the Skill may differ from the version that existed when the Skill was reviewed. The `[all]` installation option further increases the supply-chain attack surface by installing additional cloud SDKs and transitive dependencies. Because the artifact contains no CLI implementation, dependency manifest, resolved lockfile, or package hashes, neither the installed code nor its transitive dependency graph can be audited from this project. This is particularly sensitive because the installed executable is expected to receive broad cloud credentials and perform remote command execution, dataset staging, infrastructure provisioning, Kubernetes administration, deployment, and instance termination. ### Attack Path 1. A user follows the Skill installation instructions or allows the declared `uv` installer to resolve `terradev-cli`. 2. The package manager retrieves the latest compatible package and, for the `[all]` variant, a larger set of transitive dependencies. 3. A compromised package release, compromised maintainer account, malicious distribution artifact, or compromised transitive dependency is installed. 4. Package installation hooks, imports, or a subsequent `terradev` invocation execute attacker-controlled code ...[truncated 924 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin `terradev-cli` to an exact, reviewed version. 2. Require cryptographic hashes for the package and all resolved dependencies. 3. Provide a committed lockfile generated from a trusted package index. 4. Separate provider extras so users install only the SDK required for the selected provider. 5. Avoid recommending the `[all]` variant as a general installation path. 6. Publish or reference the exact source revision corresponding to the pinned package. 7. Use reproducible builds and signed release artifacts where available. 8. Continuously scan direct and transitive dependencies for known vulnerabilities and unexpected ownership changes. 9. Install the CLI in a restricted environment without unrelated credentials, filesystem access, or elevated permissions. 10. Review dependency changes before updating the pinned version and regenerate integrity hashes through a controlled release process. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep