T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:68- Finding
Unverified Remote Installer Is Downloaded and Executed Directly
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Nebius cloud skill is mostly coherent with its purpose, but it grants and normalizes high-impact cloud deployment authority with several unsafe defaults users should review before installation.
Install only if you intend this agent to manage Nebius cloud resources. Require explicit confirmation before any create/update/delete operation, avoid the curl-to-bash installer unless you independently verify it, pin container images and plugins to trusted versions or digests, keep endpoints private or authenticated, do not expose dashboards directly over plaintext public links, verify SSH host keys, and handle IAM or API tokens through a secret manager rather than chat, shell history, or persistent environment variables.
SKILL.md:68Unverified Remote Installer Is Downloaded and Executed Directly
llms.txt:36Mutable and Inconsistent Third-Party Artifacts Create a Supply-Chain Execution Risk
examples/deploy-serverless-endpoint.md:57Public Agent Dashboards Are Deployed Without Platform Authentication and Use Plaintext Transport
examples/deploy-openclaw.md:61SSH Host Authentication Is Explicitly Disabled
examples/deploy-gpu-vm.md:51VM Templates Grant Root-Equivalent Privileges and Recommend Internet-Wide SSH Access
SKILL.md:305Sensitive Tokens Are Exposed Through Command Arguments, Environment State, Output, and Raw Configuration
The README explicitly states the skill auto-triggers for broad deployment and infrastructure requests, making it likely to activate on ambiguous user intent. In an agent setting, this can cause unintended cloud actions, resource creation, and cost-incurring changes without sufficiently explicit provider or execution confirmation.
The installation command fetches a remote script and pipes it directly into bash, executing unverified code from the network. If the hosting endpoint, connection, or script supply chain is compromised, this yields immediate arbitrary code execution on the user's machine or CI runner.
# Install
curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh | bash
exec -l $SHELL
# Authenticate (interactive — requires browser)
The shell pipeline | bash enables direct execution of remotely retrieved content and is a classic chaining pattern that amplifies supply-chain and command-injection risk. In the context of a skill README that users or agents may follow automatically, this is especially dangerous because it normalizes immediate execution without verification.
# Install
curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh | bash
exec -l $SHELL
# Authenticate (interactive — requires browser)
The usage examples reinforce that generic phrases like 'Deploy my app' or 'I need a GPU' will trigger this skill by default. Because this is a cloud-provisioning skill, over-broad activation materially increases the chance of unintended infrastructure operations and billable resource creation.
This is a clear description-behavior mismatch. The description frames the skill as the default executor for Nebius cloud deployment and infrastructure operations. However, the actual code is only a local pre-flight diagnostic script for the Nebius CLI environment. It verifies installation, config presence, authentication, active profile, project ID, connectivity, and optional tooling. Those checks are related to Nebius usage, but they are preparatory/supporting behavior rather than the declared primary purpose of performing cloud deployment or infrastructure tasks. The resource access is limited to local shell environment, user config files, and lightweight CLI/API checks; it does not provision, modify, or manage Nebius infrastructure.
This is the same dangerous curl ... | bash pattern in the main setup instructions, making remote code execution part of the primary onboarding path. Because this skill is intended for deployment/admin tasks, operators are likely to run it on privileged workstations or cloud hosts, which raises the impact substantially.
curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh | bash
exec -l $SHELL # reload shell so 'nebius' is on PATH
nebius version # confirm installation
The skill instructs the user to obtain and export an IAM access token into the environment for headless use. In agent-mediated or logged environments, environment variables, shell history, debug output, and transcripts can expose these credentials and enable unauthorized cloud access.
If your token expires later, re-authenticate by re-running `nebius profile create` (reopens browser login).
### Step 3. Get your IAM access token
For **non-interactive / headless environments** (CI/CD, containers, Claude Code on the web),
the user must provide their IAM token. They can obtain it on their local machine:
The skill reads the user's local SSH public key from ~/.ssh/id_ed25519.pub and injects it into a remote resource creation command. Even though this is a public key, accessing user credential material from the local environment without explicit consent is sensitive, and normalizes agent access to authentication artifacts that may later extend to private keys or other secrets.
--env "INFERENCE_MODEL=$MODEL"
--env "OPENCLAW_WEB_PASSWORD=$PASSWORD"
--public
--ssh-key "$(cat ~/.ssh/id_ed25519.pub 2>/dev/null || echo '')"
--format json
The documented install command fetches a remote script over the network and pipes it directly to bash, with no integrity verification, pinning, or out-of-band validation. If the remote endpoint or transport path were compromised, this would enable arbitrary code execution on the operator's machine.
| Problem | Solution |
|---|---|
| `nebius: command not found` | Install: `curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh \| bash && exec -l $SHELL` |
| `UNAUTHENTICATED` (exit code 7) | Re-run `nebius profile create` (user auth) or check service account key |
| `PERMISSION_DENIED` (exit code 15) | Check IAM group membership. User needs `editors` group. |
| `NOT_FOUND` (exit code 13) | Verify resource ID and that you're in the correct project/profile |
Piping a remote script directly from curl into bash executes unverified code from the network with no integrity check, review step, or signature validation. If the hosting bucket, transport path, or upstream script is compromised, users could run arbitrary code on their machine immediately during installation.
1. Install the Nebius CLI and authenticate:
curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh | bash
exec -l $SHELL
nebius profile create # opens browser — log in with your Nebius account
The | bash construct is the dangerous execution primitive that turns a remote fetch into immediate code execution, enabling chaining abuse if any part of the upstream content is malicious or altered. In an infrastructure/deployment skill, this is especially sensitive because users are likely to run the command from privileged developer environments containing cloud credentials.
1. Install the Nebius CLI and authenticate:
curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh | bash
exec -l $SHELL
nebius profile create # opens browser — log in with your Nebius account
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
3. Confirm your SSH public key exists (this is the key the endpoint will accept):
cat ~/.ssh/id_ed25519.pub || cat ~/.ssh/id_rsa.pub
If you don't have one: ssh-keygen -t ed25519
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
3. Confirm your SSH public key exists (this is the key the endpoint will accept):
cat ~/.ssh/id_ed25519.pub || cat ~/.ssh/id_rsa.pub
If you don't have one: ssh-keygen -t ed25519
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
3. Confirm your SSH public key exists (this is the key the endpoint will accept):
cat ~/.ssh/id_ed25519.pub || cat ~/.ssh/id_rsa.pub
If you don't have one: ssh-keygen -t ed25519
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
3. Confirm your SSH public key exists (this is the key the endpoint will accept):
cat ~/.ssh/id_ed25519.pub || cat ~/.ssh/id_rsa.pub
If you don't have one: ssh-keygen -t ed25519
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
3. Confirm your SSH public key exists (this is the key the endpoint will accept):
cat ~/.ssh/id_ed25519.pub || cat ~/.ssh/id_rsa.pub
If you don't have one: ssh-keygen -t ed25519
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
**3. Confirm your SSH public key exists** (this is the key the endpoint will accept):
```bash
cat ~/.ssh/id_ed25519.pub || cat ~/.ssh/id_rsa.pub
```
If you don't have one: `ssh-keygen -t ed25519`
Piping a remote script directly into bash executes unverified code from the network with the user's privileges, creating a supply-chain and remote code execution risk. If the hosting endpoint, transport, or upstream artifact is compromised, users can be silently infected during installation.
Install the CLI, create a profile, and authenticate:
```bash
curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh | bash
exec -l $SHELL
nebius profile create # opens browser — log in with your Nebius account
```
The shell pipeline chains network retrieval directly into command execution, which is a classic abuse pattern because it removes any review boundary between untrusted content and code execution. In a skill meant for operational deployment, this is especially risky because users are likely to run it on privileged developer or CI environments.
Install the CLI, create a profile, and authenticate:
```bash
curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh | bash
exec -l $SHELL
nebius profile create # opens browser — log in with your Nebius account
```
The troubleshooting section repeats the same insecure pattern of fetching and executing a remote installer in one step. Repetition in multiple places increases the chance that users will copy-paste it without scrutiny, compounding supply-chain risk.
| Error | Fix |
|---|---|
| `nebius: command not found` | `curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh \| bash && exec -l $SHELL` |
| `UNAUTHENTICATED` (exit 7) | Re-run `nebius profile create` (user auth) or check service account key |
| `PERMISSION_DENIED` (exit 15) | User needs `editors` group membership |
| `RESOURCE_EXHAUSTED` (exit 24) | Public IP quota — delete unused endpoints |
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
// Option 2: Service account key file (production) import "github.com/nebius/gosdk/auth" creds := gosdk.ServiceAccountReader( auth.NewServiceAccountCredentialsFileParser(nil, "credentials.json"), ) sdk, err := gosdk.New(ctx, gosdk.WithCredentials(creds))
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
// Option 2: Service account key file (production) import "github.com/nebius/gosdk/auth" creds := gosdk.ServiceAccountReader( auth.NewServiceAccountCredentialsFileParser(nil, "credentials.json"), ) sdk, err := gosdk.New(ctx, gosdk.WithCredentials(creds))
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
nebius iam whoami --format json | jq -r '.user_profile.attributes.name'
nebius iam get-access-token
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
nebius iam whoami --format json | jq -r '.user_profile.attributes.name'
nebius iam get-access-token
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# Generate kubeconfig for external access
nebius mk8s cluster get-credentials \
--id <CLUSTER_ID> \
--external
No suspicious patterns detected.