Back to skill

Security audit

Oblien workspace runtime

Security checks for vulnerabilities and agentic risk

Overview

The skill is a legitimate Oblien runtime reference, but it documents broad root-level workspace control and unsafe token-handling patterns that should be reviewed before use.

Install only if you intend agents to operate Oblien workspaces at a high privilege level. Treat all gateway JWTs, raw tokens, client IDs, and client secrets as secrets: do not print them, paste them into logs, or store them in transcripts. Prefer scoped SDK or gateway flows where possible, avoid direct raw-token HTTP unless the private link is explicitly authorized, and rotate tokens after use. Use write, delete, exec, terminal, and watcher operations only with clear user intent because they can change or expose workspace data.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:76
Finding
Bearer Credentials Are Exposed Through Application Logs## Vulnerability Details **File Location**: `SKILL.md:76-83` and `SKILL.md:203-210` **Vulnerability Type**: Sensitive credential exposure through logging **Risk Level**: High ### Vulnerable Code ```typescript const client = new Oblien({ clientId: process.env.OBLIEN_CLIENT_ID!, clientSecret: process.env.OBLIEN_CLIENT_SECRET!, }); const access = await client.workspaces.apiAccess.enable('ws_a1b2c3d4'); console.log(access.token); // Gateway JWT (eyJhbG...) console.log(access.enabled); // true ``` ```typescript const raw = await client.workspaces.apiAccess.rawToken('ws_target'); console.log(raw.token); // "a1b2c3d4e5f6..." console.log(raw.ip); // "10.0.1.42" console.log(raw.port); // 9990 ``` ### Technical Analysis The documented examples print complete bearer credentials to standard output. Standard output is commonly retained in CI logs, terminal recordings, agent transcripts, centralized logging systems, and observability platforms. These systems may have broader access controls and longer retention periods than a dedicated secret store. Both credentials grant access to an API that supports unrestricted file operations, command execution, and interactive terminal sessions inside a root-access workspace. The raw connection token presents elevated exposure because the documentation states that it remains valid until rotated. Printing the associated private IP and port alongside the token also provides all connection details required for an attacker with network access. Although these are documentation examples rather than automatically executed code, users copying the examples would reproduce the insecure behavior. ### Attack Path 1. A user copies the documented example into an application, automation script, or CI job. 2. The application requests a gateway JWT or raw workspace connection token. 3. The complete bearer credential is written to standard output. 4. A CI user, logging-system us ...[truncated 1026 chars]
Remediation
## Remediation Suggestions - Remove every example that prints complete gateway JWTs, raw tokens, client secrets, or other bearer credentials. - Replace token logging with non-sensitive status information: ```typescript const access = await client.workspaces.apiAccess.enable('ws_a1b2c3d4'); console.log(`Internal API enabled: ${access.enabled}`); ``` - If correlation is required, log only a non-reversible fingerprint or a short redacted suffix, and document that even partial token output should be minimized. - Keep credentials in a dedicated secret manager or protected in-memory variable. - Configure CI and observability systems to redact authorization headers and known token formats. - Restrict access to build logs and agent transcripts, and define short retention periods. - Prefer short-lived, narrowly scoped credentials over tokens that remain valid until rotation. - Rotate any credential that may already have appeared in logs. - Add an explicit documentation warning that tokens must never be printed, persisted in logs, committed to source control, or included in diagnostic reports.

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:217
Finding
Long-Lived Privileged Bearer Token Is Transmitted Over Plaintext HTTP## Vulnerability Details **File Location**: `SKILL.md:217-231` **Vulnerability Type**: Plaintext transmission of sensitive authentication information **Risk Level**: High ### Vulnerable Code ```typescript // Running inside ws_caller const res = await fetch('http://10.0.1.42:9990/files?path=/app', { headers: { 'Authorization': `Bearer ${raw.token}` }, }); const files = await res.json(); ``` ```bash curl "http://10.0.1.42:9990/exec" \ -H "Authorization: Bearer a1b2c3d4e5f6..." \ -H "Content-Type: application/json" \ -d '{"cmd":["npm","test"]}' ``` ### Technical Analysis The examples transmit a reusable raw bearer token over unencrypted HTTP. Network isolation and private-link firewall rules limit which systems can reach the service, but they do not provide confidentiality, endpoint authentication, or integrity protection for traffic. Any party capable of observing or redirecting traffic on the relevant private network could recover the `Authorization` header. Because bearer-token authentication proves possession rather than identity, a captured token can be replayed without knowledge of another secret. The documentation states that raw connection tokens remain valid until rotated. The affected API exposes command execution, terminal access, and unrestricted filesystem operations in a workspace described as running with full root access. The resulting risk is therefore substantially greater than exposure of a read-only application token. ### Attack Path 1. A user follows the direct workspace-to-workspace example and sends a raw token to port `9990` over HTTP. 2. An attacker compromises a linked workspace, network component, host, monitoring component, or another position capable of observing or redirecting the private traffic. 3. The attacker captures the plaintext HTTP request and extracts the bearer token. 4. From a route permitted by the workspace firewall, the attacker replays the token agains ...[truncated 1117 chars]
Remediation
## Remediation Suggestions - Require TLS for direct API connections and replace `http://` examples with authenticated `https://` endpoints. - Prefer mutual TLS so both workspaces authenticate each other and traffic is encrypted in transit. - If application-layer TLS cannot be provided directly, use a mutually authenticated encrypted tunnel and bind the plaintext service only to the tunnel interface. - Use short-lived, workspace-scoped, operation-scoped tokens instead of raw tokens that remain valid until rotation. - Implement automatic token rotation and immediate revocation when compromise is suspected. - Restrict private links to the minimum required caller workspaces and ports. - Do not display literal credential-shaped values in command examples; use environment variables or protected secret injection. - Document that private networking is not a substitute for transport encryption. - Audit use of raw tokens and alert on unexpected source workspaces, command execution, terminal creation, and anomalous API activity.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (14)

Missing User Warnings

Medium
Confidence
92% confidence
Finding
This markdown file documents that the API can read and write files anywhere on the filesystem and later describes overwrite and recursive delete operations. While the reference explains how the endpoints work, it does not clearly warn users up front that using the skill can modify or permanently remove workspace data.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill states that it can execute commands, open interactive terminal sessions, and has full root access to the VM. Although these actions are central to the runtime, the documentation does not include a clear warning that commands may alter the system, install software, or affect running processes.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The documentation shows direct handling of client secrets, gateway JWTs, and raw tokens, including printing tokens in examples, without prominent credential-handling warnings. In an agent-skill context, this can normalize insecure secret exposure and increase the chance an agent logs, echoes, or retransmits credentials that grant broad workspace control.

External Transmission

Medium
Category
Data Exfiltration
Content
**REST API:**

```http
POST https://api.oblien.com/workspace/ws_a1b2c3d4/internal-api-access/enable
X-Client-ID: your_client_id
X-Client-Secret: your_client_secret
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**REST API:**

```http
POST https://api.oblien.com/workspace/ws_a1b2c3d4/internal-api-access/enable
X-Client-ID: your_client_id
X-Client-Secret: your_client_secret
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**cURL:**

```bash
curl -X POST "https://api.oblien.com/workspace/ws_a1b2c3d4/internal-api-access/enable" \
  -H "X-Client-ID: $OBLIEN_CLIENT_ID" \
  -H "X-Client-Secret: $OBLIEN_CLIENT_SECRET"
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Internal Network Request

Medium
Category
Server-Side Request Forgery
Content
```typescript
// Running inside ws_caller
const res = await fetch('http://10.0.1.42:9990/files?path=/app', {
  headers: { 'Authorization': `Bearer ${raw.token}` },
});
const files = await res.json();
Confidence
87% confidence
Finding
The skill explicitly documents direct requests to internal 10.x.x.x addresses using bearer tokens, enabling VM-to-VM access over a private network. In an agent setting, this materially lowers the barrier to internal network interaction and could be abused for lateral movement, unauthorized workspace access, or retrieval/modification of data in linked workspaces if tokens or links are available.

External Transmission

Medium
Category
Data Exfiltration
Content
**cURL:**

```bash
curl -X POST "https://workspace.oblien.com/files/write" \
  -H "Authorization: Bearer $GATEWAY_JWT" \
  -H "Content-Type: application/json" \
  -d '{"path":"/app/src/hello.txt","content":"Hello, world!","create_dirs":true}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**cURL:**

```bash
curl -X POST "https://workspace.oblien.com/files/mkdir" \
  -H "Authorization: Bearer $GATEWAY_JWT" \
  -H "Content-Type: application/json" \
  -d '{"path":"/app/src/utils/helpers"}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Synchronous
curl -X POST "https://workspace.oblien.com/exec" \
  -H "Authorization: Bearer $GATEWAY_JWT" \
  -H "Content-Type: application/json" \
  -d '{"cmd": ["echo", "hello"]}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**cURL:**

```bash
curl "https://workspace.oblien.com/exec" \
  -H "Authorization: Bearer $GATEWAY_JWT"
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**cURL:**

```bash
curl -X POST "https://workspace.oblien.com/terminals" \
  -H "Authorization: Bearer $GATEWAY_JWT" \
  -H "Content-Type: application/json" \
  -d '{"cmd":["/bin/bash"],"cols":120,"rows":40}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
### On connect

When a WebSocket connection is established, the server automatically sends:

1. **Scrollback data** - binary frames with buffered output for each active session
2. **Exit notifications** - text frames for any sessions that have already exited
Confidence
80% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

External Transmission

Medium
Category
Data Exfiltration
Content
**cURL:**

```bash
curl -X POST "https://workspace.oblien.com/watchers" \
  -H "Authorization: Bearer $GATEWAY_JWT" \
  -H "Content-Type: application/json" \
  -d '{"path": "/app/src", "excludes": ["*.log", "tmp"]}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:138