Back to skill

Security audit

Neckr0ik Etl Builder

Security checks for vulnerabilities and agentic risk

Overview

This ETL skill has a coherent data-pipeline purpose, but it needs review because it can move data to arbitrary endpoints, persist credentials in local JSON files, and write outside its intended config area through unsafe pipeline names.

Install only if you are comfortable reviewing each pipeline configuration before running it. Avoid production data until pipeline names, outbound URLs, file paths, SQLite identifiers, and credential storage are constrained; do not store real secrets directly in pipeline JSON, and treat webhook/API destinations as capable of receiving the full transformed dataset.

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 (4)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/pipeline.py:276
Finding

Unrestricted URLs Enable Authenticated SSRF and Arbitrary Data Egress

Content
View full analysis
int: """Send to webhook.""" url = destination.get("url") if not url: raise ValueError("Webhook destination requires 'url' parameter") headers = {"Content-Type": "application/json"} if destination.get("auth") == "bearer": headers["Authorization"] = f"Bearer {destination.get('token')}" req = urllib.request.Request( url, data=json.dumps(data).encode('utf-8'), headers=headers, method='POST' ) response = urllib.request.urlopen(req, timeout=30) return len(data) ``` ### Technical Analysis The REST source and webhook destination accept arbitrary configuration-controlled URLs. The implementation does not validate the URL scheme, destination hostname, resolved IP address, port, redirect target, or transport security. An attacker who can create or modify a pipeline configuration can make the process contact loopback, private-network, link-local, or cloud metadata endpoints. Because `urllib.request.urlopen` follows HTTP redirects under normal operation, v ...[truncated 1949 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/pipeline.py:107
Finding

Pipeline Name Path Traversal Allows Writes Outside the Configuration Directory

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/pipeline.py:543
Finding

Unvalidated SQLite Identifiers Permit SQL Structure Injection

Content
View full analysis
Remediation
View remediation
str: if not IDENTIFIER_PATTERN.fullmatch(value): raise ValueError("Invalid SQLite identifier") return '"' + value.replace('"', '""') + '"' ``` 5. Continue using parameter placeholders for all record values. 6. Reject duplicate, empty, reserved, excessively long, or otherwise ambiguous column names. 7. Wrap schema creation and insertion in an explicit transaction and roll it back completely when any operation fails. 8. Restrict database paths to approved locations when arbitrary filesystem database access is not required. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/pipeline.py:107
Finding

Pipeline Configuration Persists Authentication Secrets in Plaintext

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The documentation claims broad connector support, syncing, and scheduling behavior that static analysis indicates are not actually implemented. This mismatch is dangerous because operators may trust the skill to safely handle production ETL tasks, data movement, or scheduling assumptions that do not exist, leading to failed jobs, unsafe workarounds, or accidental data exposure when users improvise missing pieces.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill advertises capabilities that inherently read files, write files, and access external systems, but it does not declare any explicit tool scope or permissions boundary. In an agent environment, this increases the risk of overbroad execution because users and orchestrators cannot clearly constrain what the skill is allowed to access before running ETL actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This skill is specifically designed to move data among databases, APIs, files, and cloud services, yet the description does not warn about privacy, data residency, credential use, or cross-system data transfer risk. In ETL context, omission of these warnings can cause users to move sensitive data into third-party systems without informed consent or proper controls.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The skill explicitly supports load and schedule capabilities, which can automatically modify external destinations over time, but it gives no safety warning about unattended execution or downstream data changes. In ETL workflows this raises the chance of repeated accidental overwrites, propagation of bad data, or unauthorized changes to connected services.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documented load mode includes a replace option, which is potentially destructive because it may overwrite or delete existing destination data, but there is no explicit warning. In an ETL skill, destructive write modes are especially risky because they may affect production datasets, spreadsheets, or cloud resources at scale.

Content

No source excerpt is available for this finding.

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 · SKILL.md (reported line 177)May include surrounding context.

md
# Configure extraction
neckr0ik-etl-builder extract --pipeline api-sync \
  --endpoint "https://api.example.com/users" \
  --auth bearer \
  --token "$API_TOKEN"

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The module docstring shows a supported usage of python pipeline.py schedule --name sync-users --cron ..., implying the skill can configure scheduled execution. However, the CLI parser only defines create/extract/transform/load/run/list/status commands and there is no code that handles a schedule command or persists cron settings, so the documentation actively misstates the implemented capability.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The API extractor performs outbound requests to arbitrary URLs and may attach bearer tokens or API keys without explicit disclosure or confirmation. In the ETL context, this is security-relevant because it combines network access with credential use, creating SSRF-like access to internal services and possible credential exposure to untrusted endpoints if configuration is manipulated.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The webhook loader sends arbitrary pipeline data to a user-supplied URL over the network with no confirmation, allowlist, or safety notice. In an ETL skill, this increases the risk of silent exfiltration of sensitive records to attacker-controlled endpoints, especially because the tool is explicitly designed to move data between systems.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The example shows use of an API token and external data extraction without any warning about secret handling, log exposure, or privacy implications of moving remote data into another destination. While examples are not execution code, they can normalize insecure practices and lead users to embed credentials unsafely or transfer regulated data without review.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The source type declarations advertise a broad set of connectors consistent with the manifest description of connecting databases, APIs, files, and cloud storage. In practice, _extract only implements csv, json, api, and sqlite, so the code-level interface and documentation overclaim supported behavior.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The destination enum and surrounding interface suggest support for destinations like email and slack, which aligns with the ETL builder's documented connector-based purpose. But _load only supports csv, json, webhook, and sqlite, so the code documentation/interface overstates what the skill can actually do.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.