Back to skill

Security audit

Deeplake

Security checks for vulnerabilities and agentic risk

Overview

This skill is a legitimate Deeplake integration, but it gives an agent broad authenticated authority to upload local data and delete managed tables without enough built-in warnings or confirmation guidance.

Install only if you intend to let an agent use your Deeplake API key to read selected local files, upload data and derived artifacts to Deeplake or a configured endpoint, run queries, create indexes/workspaces, and potentially delete managed tables. Use a narrowly scoped token, avoid plaintext HTTP endpoints except trusted local development, pin dependencies where possible, and require explicit confirmation before uploads of sensitive data or any drop_table/dropTable action.

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:576
Finding

Bearer Token and Dataset Data May Be Transmitted Over Plaintext HTTP

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:485-501, SKILL.md:576-591
Vulnerability Type: Insecure transport of credentials and sensitive data
Risk Level: Medium

Relevant code snippets:

python
# Python — create workspace via API
import requests

resp = requests.post(
    f"{api_url}/workspaces",
    headers={"Authorization": f"Bearer {token}"},
    json={"id": "my-workspace", "name": "My Workspace"},
)
resp.raise_for_status()
text
|-- Need custom API URL?
|   `-- client = Client(api_url="http://custom:8080")
|
`-- Node.js?
    `-- import { ManagedClient, initializeWasm } from 'deeplake';
        await initializeWasm();
        const client = new ManagedClient({
           token: process.env.DEEPLAKE_API_KEY!,
           workspaceId: "my-ws",
           apiUrl: "http://custom:8080",
        });

Technical Analysis

The Skill permits a custom API endpoint using plaintext HTTP while documenting authenticated requests that place the Deeplake API token in an Authorization: Bearer header. Managed ingestion operations also send user-selected files, structured records, embeddings, images, videos, and other dataset content to the configured endpoint.

HTTP provides no transport confidentiality or server authentication. If the documented custom endpoint pattern is used outside a securely isolated localhost development environment, an attacker able to observe or modify the network path can capture the bearer token and dataset content. A man-in-the-middle attacker could also alter API responses or redirect subsequent workflow decisions.

The documentation does not warn users about this exposure, restrict plaintext HTTP to loopback addresses, or describe certificate validation and trusted endpoint requirements. Network access is necessary for managed Deeplake functionality, but transmitting production credentials over plaintext transport exceeds safe minimum requirem ...[truncated 1325 chars]

Remediation
View remediation

Remediation Suggestions

  1. Require HTTPS for all non-loopback API endpoints.
  2. Reject http:// URLs by default, allowing them only through an explicit development-only option.
  3. If plaintext development endpoints must be supported, restrict them to loopback hosts such as 127.0.0.1, ::1, or localhost.
  4. Replace the examples with https://custom.example and add a prominent warning against transmitting production tokens over HTTP.
  5. Preserve standard TLS certificate and hostname verification; do not recommend disabling verification.
  6. Require explicit user approval before sending sensitive local files to a custom or non-Deeplake endpoint.
  7. Encourage narrowly scoped, short-lived tokens and document immediate revocation procedures for suspected exposure.
  8. Consider endpoint allowlisting or clear origin confirmation before sending credentials and dataset content.

T08 · Insecure Dependencies

Note
Location
SKILL.md:25
Finding

Unpinned Third-Party Installation Instructions Create Supply-Chain Exposure

Content
View full analysis

Vulnerability Details

File Location: README.md:5-9, SKILL.md:25-35, SKILL.md:80-83, SKILL.md:134-146
Vulnerability Type: Unpinned third-party dependencies and mutable installation sources
Risk Level: Low

Relevant code snippets:

bash
npx skills add activeloopai/deeplake-skills
bash
pip install deeplake # uv add deeplake
python
# Async variant (requires aiohttp: pip install aiohttp):
from deeplake.managed import AsyncClient
text
npm install deeplake
text
- Video ingestion: `ffmpeg` (`sudo apt-get install ffmpeg`)
- PDF ingestion: `pymupdf` (`pip install pymupdf`)
- Thumbnail generation: `Pillow` (`pip install Pillow`)
- COCO detection format: `pycocotools`, `Pillow`, `numpy` (`pip install pycocotools Pillow numpy`)
- LeRobot frames format: `pandas`, `numpy` (`pip install pandas numpy`)
text
- PDF ingestion: `pdfjs-dist` (`npm install pdfjs-dist`)
- Thumbnail generation: `sharp` (`npm install sharp`)

Technical Analysis

The installation guidance retrieves mutable package versions without exact version constraints, integrity hashes, or lockfiles. Consequently, two installations performed at different times can resolve to different artifacts that were not part of this audit.

Python and Node.js packages can execute code during installation or when imported. Native packages such as sharp, and packages with compiled extensions, may additionally retrieve or install platform-specific binary artifacts. Although no malicious dependency is present in the audited project itself, these instructions expand trust to whichever versions and transitive dependencies a package registry resolves at installation time.

The use of sudo apt-get install ffmpeg also performs a privileged system-wide change. That package is obtained through the operating system's configured repositories rather than an arbitrary URL, but the instruction should ...[truncated 1534 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin each dependency to a reviewed exact version.
  2. Provide Python requirements or lockfiles with integrity hashes, using mechanisms such as hash-checked requirements.
  3. Commit and use an npm lockfile, and prefer reproducible installation commands such as npm ci.
  4. Pin the Skill source to a reviewed release tag or immutable commit rather than a mutable repository reference.
  5. Document the approved package registries and warn users to verify that local registry configuration has not been redirected.
  6. Review transitive dependencies and use automated vulnerability and provenance checks.
  7. Install dependencies in an isolated virtual environment, container, or least-privileged user context.
  8. Avoid administrative installation unless necessary. When sudo apt-get is required, instruct users to verify the configured operating-system repositories first.
  9. Separate optional dependencies by feature so users install only the components required for their requested operation.
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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (15)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
94% confidence
Finding

The skill exposes a direct deletion capability (DELETE /workspaces/{id}/tables/{name} / drop_table) against remote managed resources. In an agentic context, this is dangerous because user-controlled table names or mistaken task interpretation can trigger destructive remote actions with little friction, causing data loss across a workspace.

Content

Scanner excerpt · SKILL.md (reported line 161)May include surrounding context.

md
|-- .create_index(table, col)  -> CREATE INDEX USING deeplake_index (for search)
  |-- .open_table(table)         -> deeplake.open("al://{ws}/{table}") with auto creds
  |-- .list_tables()             -> GET /workspaces/{id}/tables -> list[str] / string[]
  `-- .drop_table(table)         -> DELETE /workspaces/{id}/tables/{name}
                    |
                    v
              REST API -> PostgreSQL + pg_deeplake

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 310)May include surrounding context.

md
> For more ingestion examples, see [examples.md](examples.md).

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 765)May include surrounding context.

md
> For more ingestion examples, see [examples.md](examples.md).

Rp1

Medium
Category
MCP Rug Pull
Confidence
78% confidence
Finding

The README instructs users to run npx skills add activeloopai/deeplake-skills without pinning a specific version or commit. This can cause users to fetch whatever package state is current at install time, increasing supply-chain risk if the upstream package is compromised or changed unexpectedly.

Content

No source excerpt is available for this finding.

Whitespace Padding

Medium
Category
Prompt Injection
Confidence
70% confidence
Finding

Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Content

Scanner excerpt · README.md (reported line 13)May include surrounding context.

md
## Available Skills

| Skill                | Description                                                                                                                                         |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **deeplake-managed** | SDK for ingesting data into Deeplake managed tables (Python & Node.js/TypeScript). Use when users want to store, ingest, or query data in Deeplake. |

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README states the skill is 'automatically available' and will be used when the agent detects Deeplake-related tasks, but the described trigger scope is broad: ingestion, querying, or management. Broad auto-invocation can cause the skill to activate on loosely related prompts, unnecessarily exposing data, credentials, or external actions in contexts where the user did not explicitly request this integration.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill requires DEEPLAKE_API_KEY and is explicitly designed to send ingested files, structured data, queries, and workspace operations to Deeplake-managed remote infrastructure, but the introduction does not clearly warn about credential use and third-party data transmission. In an agent environment, this can lead to unintentional exfiltration of sensitive local data or secrets to an external service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill documents destructive deletion operations (drop_table) without an explicit warning that the action permanently removes managed tables and may cause irreversible data loss. In an agent setting, exposing destructive operations as routine examples increases the chance an autonomous system invokes them without user confirmation or backup checks.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SKILL.md (reported line 137)May include surrounding context.

md
- Deeplake API server running (default: `https://api.deeplake.ai`)

**Optional python dependencies (per file type):**
- Video ingestion: `ffmpeg` (`sudo apt-get install ffmpeg`)
- PDF ingestion: `pymupdf` (`pip install pymupdf`)
- Thumbnail generation: `Pillow` (`pip install Pillow`)
- COCO detection format: `pycocotools`, `Pillow`, `numpy` (`pip install pycocotools Pillow numpy`)

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 498)May include surrounding context.

md
# Python — create workspace via API
import requests

resp = requests.post(
    f"{api_url}/workspaces",
    headers={"Authorization": f"Bearer {token}"},
    json={"id": "my-workspace", "name": "My Workspace"},

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The examples encourage uploading local video/PDF/document paths to a managed remote service using an API key, but they do not clearly warn that file contents, derived metadata, thumbnails, embeddings, and extracted text may be transmitted off-host. In a data-ingestion SDK, that omission can lead users to exfiltrate sensitive local data unintentionally, especially because the examples use security videos and manuals that may plausibly contain confidential information.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · reference.md (reported line 292)May include surrounding context.

"ffmpeg not found" for video processing:

bash
# Install ffmpeg
sudo apt-get install ffmpeg

"fitz not found" for PDF processing (Python):

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · reference.md (reported line 316)May include surrounding context.

Connection refused to API:

bash
# Check API server is running
curl https://api.deeplake.ai/health

"workspace ID is required" when creating a workspace (HTTP 400):

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The Node.js example pulls the API key from an environment variable and immediately configures a remote managed client without any notice about secure secret handling or the fact that subsequent ingest/query actions communicate with an external service. While this is standard SDK usage, the lack of warning can still promote casual use of production credentials and unreviewed data uploads.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

This markdown file includes instructions to set DEEPLAKE_API_KEY in the environment, which involves handling credentials. Under the markdown-specific warning rule, the reference does not explicitly warn users to protect, rotate, or avoid exposing the token in shell history or shared environments.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.