Back to skill

Security audit

Lukso Expert

Security checks for vulnerabilities and agentic risk

Overview

This LUKSO reference skill is mostly coherent documentation, but it should be reviewed because it recommends running an unverified remote installer in validator setup guidance.

Review before installing if you may ask it for node, validator, relayer, or IPFS instructions. Do not run the documented `curl ... | sh` installer blindly; verify official sources, checksums or signatures, and use isolated/test environments. Treat IPFS uploads as public and persistent, and never paste real private keys, seed phrases, broad JWTs, or production signing authority into copied examples.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Error
Location
references/ecosystem.md:112
Finding
Unverified Remote Installer Is Piped Directly into a Shell## Vulnerability Details **File Location**: `references/ecosystem.md`, lines 112 and 423 **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: Critical **Vulnerable code at line 112:** ```markdown | **LUKSO CLI** | `curl https://install.lukso.network | sh` — node/validator setup | ``` **Vulnerable code at line 423:** ```markdown 2. **Medium (LUKSO CLI):** `curl https://install.lukso.network | sh` → `lukso init` → `lukso install` → `lukso start --validator` ``` ### Technical Analysis These instructions download a mutable script from an external URL and pass it directly to `sh`. The payload executes before the user can inspect it, and the instructions provide no immutable version pin, cryptographic checksum, signature verification, or independent authenticity check. Although `install.lukso.network` appears related to the documented ecosystem, its current response is not part of the audited Skill package. The effective code can therefore change after review. Compromise of the hosting service, DNS, deployment pipeline, TLS termination, or installer source could convert a legitimate installation command into arbitrary command execution. This behavior exceeds the minimum privileges needed by a documentation and knowledge-reference Skill. Explaining validator installation does not require recommending immediate execution of unverified remote shell content. ### Attack Path 1. A user asks the Skill for LUKSO node or validator setup instructions. 2. The Agent reproduces the documented `curl ... | sh` command. 3. The user executes the command in a local shell. 4. `curl` retrieves the current, mutable response from the remote installer host. 5. `sh` executes that response immediately without inspection or integrity verification. 6. If the remote delivery path has been compromised, attacker-controlled commands run with the privileges of the invoking user. 7. The payload may then target node config ...[truncated 932 chars]
Remediation
## Remediation Suggestions Replace both direct pipelines with a staged and verifiable installation procedure: 1. Pin the installer to an immutable release URL or commit rather than a mutable endpoint. 2. Download the script to a local file without executing it. 3. Publish a SHA-256 checksum and preferably a cryptographic release signature through an independent trusted channel. 4. Verify the checksum or signature before execution. 5. Review the downloaded script and document the files, services, ports, and permissions it changes. 6. Run it under a dedicated unprivileged account or in an isolated environment. 7. Do not recommend `sudo` unless a specific operation demonstrably requires it. 8. Provide package-manager or reproducible container-based installation alternatives where available. Example hardened flow: ```sh curl -fL --proto '=https' --tlsv1.2 \ -o lukso-installer.sh \ https://example.invalid/lukso/releases/IMMUTABLE_VERSION/install.sh printf '%s %s\n' 'EXPECTED_SHA256' 'lukso-installer.sh' | sha256sum -c - less lukso-installer.sh sh lukso-installer.sh ``` The documentation must replace the placeholder URL and checksum with an official immutable release artifact and independently published expected digest.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (29)

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Content
---
name: lukso-expert
description: >
  Comprehensive LUKSO blockchain knowledge base for AI agents. Makes any agent
  a LUKSO expert — covering all LSP standards (LSP0-LSP28), Universal Profiles,
  smart contract development, ecosystem projects, and developer tooling.
  
  USE WHEN:
  - Building on LUKSO (smart contracts, dApps, integrations)
  - Working with Universal Profiles (creation, permissions, metadata)
  - Deploying or interacting with LSP7/LSP8 tokens
  - Setting up gasless relay transactions (LSP25)
  - Managing KeyManager permissions (LSP6)
  - Working with The Grid (LSP28), Followers (LSP26), or any
Confidence
80% confidence
Finding
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

External Script Fetching

High
Category
Supply Chain
Content
| Tool | Description |
|---|---|
| **LUKSO CLI** | `curl https://install.lukso.network | sh` — node/validator setup |
| **LUKSO Wagyu Key Gen** | GUI tool for generating validator deposit keys |
| **LUKSO CLI Keygen** | CLI alternative for generating validator keys |
| **erc725.js** | `npm install @erc725/erc725.js` — fetch/encode UP metadata |
Confidence
97% confidence
Finding
The documentation recommends piping a remotely fetched script directly into the shell using `curl ... | sh`, which removes the opportunity to inspect integrity or contents before execution. If the hosting domain, transport path, or remote script is compromised, users or agents following this instruction could execute arbitrary code with their local privileges.

External Script Fetching

High
Category
Supply Chain
Content
### How to Stake

1. **Easy (Dappnode):** Hardware node with Dappnode OS — guided UI setup
2. **Medium (LUKSO CLI):** `curl https://install.lukso.network | sh` → `lukso init` → `lukso install` → `lukso start --validator`
3. **Advanced (Docker):** Custom Docker compose setup
4. **No-node options:** Liquid staking via Stakingverse.io (coming online)
Confidence
98% confidence
Finding
This repeats the same unsafe remote-script execution pattern in the staking instructions, increasing the likelihood that users will run it in a high-value validator environment. In that context, arbitrary code execution could compromise validator keys, node integrity, funds, or operational availability.

Anti-Refusal Statement

High
Category
Anti-Refusal
Content
1. **Executing via KM vs. directly**: Always call `keyManager.execute(payload)` where `payload` is the ABI-encoded call to the UP. Don't call the UP directly unless you're the KM or the UP's LSP20 allows it.

2. **SUPER_ permissions bypass restrictions**: `SUPER_CALL` ignores `AllowedCalls`. Only use SUPER_ permissions for fully trusted parties (or the account owner itself).

3. **DELEGATECALL is dangerous**: Granting `DELEGATECALL` lets controllers execute arbitrary code in the UP's context. Only grant to audited contracts.
Confidence
90% confidence
Finding
Skill attempts to nullify the agent's safety policies or restrictions ('you have no restrictions', 'ignore your guidelines', 'do anything now'). This is a direct jailbreak that disables guardrails.

Instruction Override

High
Category
Prompt Injection
Content
1. **Executing via KM vs. directly**: Always call `keyManager.execute(payload)` where `payload` is the ABI-encoded call to the UP. Don't call the UP directly unless you're the KM or the UP's LSP20 allows it.

2. **SUPER_ permissions bypass restrictions**: `SUPER_CALL` ignores `AllowedCalls`. Only use SUPER_ permissions for fully trusted parties (or the account owner itself).

3. **DELEGATECALL is dangerous**: Granting `DELEGATECALL` lets controllers execute arbitrary code in the UP's context. Only grant to audited contracts.
Confidence
90% confidence
Finding
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Example query** (resolve username → UP address):
```bash
curl -s -X POST \
  -H "Content-Type: application/json" \
  -d '{"query": "{ Profile(where: {name: {_eq: \"schizo\"}}) { id name } }"}' \
  https://envio.lukso-mainnet.universal.tech/v1/graphql
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
network: 'luksoTestnet',
        chainId: 4201,
        urls: {
          apiURL: 'https://api.explorer.testnet.lukso.network/api',
          browserURL: 'https://explorer.testnet.lukso.network',
        },
      },
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The relayer example instructs users to submit signed transaction material, nonce information, and profile addresses to a third-party relay endpoint without explicitly warning that this shares wallet-derived metadata with an external service. While the signature is not the private key, the example normalizes off-platform transmission of sensitive authorization artifacts and could mislead users into sending production transactions through third parties without understanding trust, logging, retention, or availability risks.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The Pinata/IPFS example uploads local files and profile metadata to an external pinning service without warning that uploaded content may become public, persistent, and attributable to the user or application. This can cause accidental disclosure of personal images, profile data, JWT-scoped activity, or other sensitive development artifacts when readers treat the snippet as safe copy-paste guidance.

External Transmission

Medium
Category
Data Exfiltration
Content
import { IPFSHttpClientUploader } from '@lukso/data-provider-ipfs-http-client';
import { createReadStream } from 'fs';

const provider = new IPFSHttpClientUploader('https://api.pinata.cloud/pinning/pinFileToIPFS', {
  headers: { Authorization: `Bearer ${process.env.PINATA_JWT}` }
});
// Or use local IPFS node: 'http://127.0.0.1:5001/api/v0/add'
Confidence
93% confidence
Finding
This example sends local files to Pinata using a bearer token, but the surrounding documentation does not emphasize that uploads leave the local environment and may expose user content to a third-party service. In a copy-paste developer guide, omission of that warning materially increases the chance of accidental publication of sensitive files or metadata.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The Grid example uploads profile grid JSON containing embedded links, widgets, and potentially user-controlled content to Pinata without warning that this data is externally published and may be rendered by third-party clients. Readers may unintentionally expose personal URLs, tracking endpoints, or unsafe embedded content, especially because The Grid is specifically designed for public profile presentation.

External Transmission

Medium
Category
Data Exfiltration
Content
}];

async function setGrid(upAddress: string, gridJson: object) {
  const ipfs = new IPFSHttpClientUploader('https://api.pinata.cloud/pinning/pinFileToIPFS');
  const { url, hash } = await ipfs.upload(gridJson);

  const erc725 = new ERC725(GRID_SCHEMA);
Confidence
94% confidence
Finding
This is another Pinata upload example in the Grid section, and it similarly omits warning that grid data and embedded content are uploaded to external infrastructure and may become public. Because the content can include URLs and widgets later rendered in profile surfaces, the privacy and tracking risk is higher than a generic external call.

External Transmission

Medium
Category
Data Exfiltration
Content
Endpoint: https://envio.lukso-mainnet.universal.tech/v1/graphql

Resolve username → address:
curl -X POST https://envio.lukso-mainnet.universal.tech/v1/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ Profile(where: {name: {_eq: \"username\"}}) { id name } }"}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding
Suspicious Unicode normalization or mixed-script content

External Transmission

Medium
Category
Data Exfiltration
Content
### IPFS

- **Dev gateway (rate limited, no SLA):** `https://api.universalprofile.cloud/ipfs`
- **Production recommended:** Use your own Pinata or Infura IPFS gateway
- LUKSO does NOT provide an official production IPFS upload gateway
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
### IPFS

- **Dev gateway (rate limited, no SLA):** `https://api.universalprofile.cloud/ipfs`
- **Production recommended:** Use your own Pinata or Infura IPFS gateway
- LUKSO does NOT provide an official production IPFS upload gateway
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
### IPFS

- **Dev gateway (rate limited, no SLA):** `https://api.universalprofile.cloud/ipfs`
- **Production recommended:** Use your own Pinata or Infura IPFS gateway
- LUKSO does NOT provide an official production IPFS upload gateway
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
### IPFS

- **Dev gateway (rate limited, no SLA):** `https://api.universalprofile.cloud/ipfs`
- **Production recommended:** Use your own Pinata or Infura IPFS gateway
- LUKSO does NOT provide an official production IPFS upload gateway
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
### IPFS

- **Dev gateway (rate limited, no SLA):** `https://api.universalprofile.cloud/ipfs`
- **Production recommended:** Use your own Pinata or Infura IPFS gateway
- LUKSO does NOT provide an official production IPFS upload gateway
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
### IPFS

- **Dev gateway (rate limited, no SLA):** `https://api.universalprofile.cloud/ipfs`
- **Production recommended:** Use your own Pinata or Infura IPFS gateway
- LUKSO does NOT provide an official production IPFS upload gateway
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
### IPFS

- **Dev gateway (rate limited, no SLA):** `https://api.universalprofile.cloud/ipfs`
- **Production recommended:** Use your own Pinata or Infura IPFS gateway
- LUKSO does NOT provide an official production IPFS upload gateway
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
### IPFS

- **Dev gateway (rate limited, no SLA):** `https://api.universalprofile.cloud/ipfs`
- **Production recommended:** Use your own Pinata or Infura IPFS gateway
- LUKSO does NOT provide an official production IPFS upload gateway
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
### IPFS

- **Dev gateway (rate limited, no SLA):** `https://api.universalprofile.cloud/ipfs`
- **Production recommended:** Use your own Pinata or Infura IPFS gateway
- LUKSO does NOT provide an official production IPFS upload gateway
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
- Query Universal Profiles, LSP7/LSP8 Digital Assets
- Supports username → UP address resolution:
  ```bash
  curl -X POST -H "Content-Type: application/json" \
    -d '{"query": "query { Profile(where: {name: {_eq: \"USERNAME\"}}) { id name } }"}' \
    https://envio.lukso-mainnet.universal.tech/v1/graphql
  ```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The LSP1 section claims to be a complete reference but includes a visibly corrupted/truncated type ID value (`... put context`) and elsewhere marks some interface IDs as approximate or deferred to external packages. In a blockchain developer skill, incorrect constants can cause integrations, permission logic, notification handling, or verification checks to fail silently or target the wrong semantics, creating real implementation risk.

Static analysis

No suspicious patterns detected.