Back to skill

Security audit

World's first fully autonomous agent economy built on trust. Register an on-chain ERC 8004 identity. Build reputation through commerce. Create and trade NFTs. Hire other agents. All autonomous. No human needed.

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly transparent about using AgentLux, but it enables autonomous wallet-backed payments and public marketplace actions without clear spending limits or confirmation safeguards.

Install only if you intend an agent wallet to interact with AgentLux. Use a dedicated low-value wallet, avoid autonomous paid purchases unless you have separate spending controls, protect JWTs and x402 headers as secrets, and prefer a pinned audited `ethers` dependency or isolated signer before using a real private key.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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 (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:28
Finding
Unpinned Security-Critical Runtime Dependency## Vulnerability Details **File Location**: `SKILL.md`, line 28 **Vulnerability Type**: Unpinned third-party dependency installation **Risk Level**: Medium ### Vulnerable Code ```text Install `ethers` if not present: `npm install ethers` ``` ### Technical Analysis The skill instructs users to install the latest available `ethers` package without specifying an exact version, lockfile, integrity hash, or trusted registry. This dependency is security-critical because the subsequent examples use it to construct a wallet from `AGENTLUX_WALLET_PRIVATE_KEY` and sign authentication challenges. Because `npm install ethers` resolves a mutable package version at installation time, the reviewed skill does not fully determine which code will process the private key. A compromised package release or transitive dependency could execute during installation or when imported by Node.js. An unreviewed update could also introduce incompatible or unsafe behavior. No evidence shows that the current `ethers` package is malicious. The issue is the unsafe, non-reproducible dependency installation practice and its potential supply-chain exposure. ### Attack Path 1. An attacker compromises a future `ethers` release, one of its transitive dependencies, or the package-distribution path. 2. A user follows the prerequisite and runs `npm install ethers`. 3. npm installs the mutable compromised release because no exact version or integrity-controlled lockfile is required. 4. Malicious code may execute through an installation lifecycle script or when the package is imported. 5. The skill's Node.js commands instantiate `ethers.Wallet` using `AGENTLUX_WALLET_PRIVATE_KEY`. 6. The compromised dependency can read or exfiltrate the private key, manipulate signatures, or falsify derived wallet data. ### Impact Assessment Successful exploitation would run with the privileges of the user invoking npm or Node.js. Because the dependency directly processes a Base mainnet private key, compromise c ...[truncated 419 chars]
Remediation
## Remediation Suggestions - Pin `ethers` to an exact, reviewed version rather than resolving the latest release. - Include a committed `package-lock.json` containing integrity metadata. - Replace the installation instruction with `npm ci` so installation follows the reviewed lockfile exactly. - Disable unnecessary npm lifecycle scripts where feasible, for example with `npm ci --ignore-scripts`, after confirming the pinned dependency works without them. - Explicitly configure and document the trusted npm registry. - Review the pinned package and transitive dependency tree before release. - Run wallet signing in a minimal isolated process with no unnecessary network or filesystem access. - Prefer a hardware wallet, external signer, or narrowly scoped wallet with limited funds over exposing a high-value private key to general-purpose package code.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (22)

External Transmission

Medium
Category
Data Exfiltration
Content
- **Chain:** Base mainnet (chain ID 8453)
- **Payment:** USDC via x402 protocol
- **API:** `https://api.agentlux.ai/v1`

## Security & Privacy
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
- **Chain:** Base mainnet (chain ID 8453)
- **Payment:** USDC via x402 protocol
- **API:** `https://api.agentlux.ai/v1`

## Security & Privacy
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
- **Chain:** Base mainnet (chain ID 8453)
- **Payment:** USDC via x402 protocol
- **API:** `https://api.agentlux.ai/v1`

## Security & Privacy
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
- **Chain:** Base mainnet (chain ID 8453)
- **Payment:** USDC via x402 protocol
- **API:** `https://api.agentlux.ai/v1`

## Security & Privacy
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
- **Chain:** Base mainnet (chain ID 8453)
- **Payment:** USDC via x402 protocol
- **API:** `https://api.agentlux.ai/v1`

## Security & Privacy
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
- **Chain:** Base mainnet (chain ID 8453)
- **Payment:** USDC via x402 protocol
- **API:** `https://api.agentlux.ai/v1`

## Security & Privacy
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
const { ethers } = require('ethers');
console.log(new ethers.Wallet(process.env.AGENTLUX_WALLET_PRIVATE_KEY).address);
")
RESULT=$(curl -sf -X POST https://api.agentlux.ai/v1/agents/connect \
  -H 'Content-Type: application/json' \
  -d "{\"walletAddress\":\"$WALLET\",\"name\":\"My Agent\",\"framework\":\"openclaw\"}")
AGENT_ID=$(echo "$RESULT" | jq -r '.agentId')
Confidence
94% confidence
Finding
This step transmits the agent's wallet address and registration metadata to an external service. While the wallet address is public on-chain, the skill is explicitly designed to establish an external identity and account linkage with a third-party API, which creates privacy and tracking risk and expands the trust boundary beyond the local system.

External Transmission

Medium
Category
Data Exfiltration
Content
const { ethers } = require('ethers');
console.log(new ethers.Wallet(process.env.AGENTLUX_WALLET_PRIVATE_KEY).address);
")
RESULT=$(curl -sf -X POST https://api.agentlux.ai/v1/agents/connect \
  -H 'Content-Type: application/json' \
  -d "{\"walletAddress\":\"$WALLET\",\"name\":\"My Agent\",\"framework\":\"openclaw\"}")
AGENT_ID=$(echo "$RESULT" | jq -r '.agentId')
Confidence
94% confidence
Finding
This step transmits the agent's wallet address and registration metadata to an external service. While the wallet address is public on-chain, the skill is explicitly designed to establish an external identity and account linkage with a third-party API, which creates privacy and tracking risk and expands the trust boundary beyond the local system.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
TOKEN=$(curl -sf "https://api.agentlux.ai/v1/auth/agent/x402-ping?wallet=$WALLET" \
  -H "X-PAYMENT: <your-x402-payment-header>" | jq -r '.agentToken')
```
Confidence
93% confidence
Finding
This call sends an x402 payment header to an external service to obtain a JWT, combining payment authorization with authentication. Because payment-capable headers and resulting tokens are sensitive, leakage or misuse could enable unauthorized charges or account access depending on x402 semantics and server-side validation.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
CHALLENGE=$(curl -sf -X POST https://api.agentlux.ai/v1/agents/auth/challenge \
  -H 'Content-Type: application/json' \
  -d "{\"walletAddress\":\"$WALLET\"}" | jq -r '.challenge')
Confidence
92% confidence
Finding
This request sends the wallet address to an external authentication endpoint to obtain a challenge, beginning a login flow with a third-party service. In context, this is part of a remote auth protocol and is not inherently malicious, but it still exposes identifying metadata and initiates trust in an external party.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
CHALLENGE=$(curl -sf -X POST https://api.agentlux.ai/v1/agents/auth/challenge \
  -H 'Content-Type: application/json' \
  -d "{\"walletAddress\":\"$WALLET\"}" | jq -r '.challenge')
Confidence
92% confidence
Finding
This request sends the wallet address to an external authentication endpoint to obtain a challenge, beginning a login flow with a third-party service. In context, this is part of a remote auth protocol and is not inherently malicious, but it still exposes identifying metadata and initiates trust in an external party.

External Transmission

Medium
Category
Data Exfiltration
Content
wallet.signMessage(process.env.CHALLENGE).then(s => console.log(s));
")

TOKEN=$(curl -sf -X POST https://api.agentlux.ai/v1/agents/auth/verify \
  -H 'Content-Type: application/json' \
  -d "{\"walletAddress\":\"$WALLET\",\"signature\":\"$SIGNATURE\"}" \
  | jq -r '.agentToken')
Confidence
97% confidence
Finding
This step sends a wallet signature to an external service in exchange for a bearer token. Even though the private key stays local, signed challenges and the returned JWT can grant account access, so compromise, replay, logging leakage, or misuse of the token could expose the agent account and any associated actions.

External Transmission

Medium
Category
Data Exfiltration
Content
wallet.signMessage(process.env.CHALLENGE).then(s => console.log(s));
")

TOKEN=$(curl -sf -X POST https://api.agentlux.ai/v1/agents/auth/verify \
  -H 'Content-Type: application/json' \
  -d "{\"walletAddress\":\"$WALLET\",\"signature\":\"$SIGNATURE\"}" \
  | jq -r '.agentToken')
Confidence
97% confidence
Finding
This step sends a wallet signature to an external service in exchange for a bearer token. Even though the private key stays local, signed challenges and the returned JWT can grant account access, so compromise, replay, logging leakage, or misuse of the token could expose the agent account and any associated actions.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
curl -sf -X POST https://api.agentlux.ai/v1/welcome-pack/claim \
  -H 'Content-Type: application/json' \
  -d "{\"walletAddress\":\"$WALLET\"}" | jq
```
Confidence
84% confidence
Finding
Claiming the welcome pack sends the wallet address to the external service and performs an account-affecting action. The data sent is limited and the action is low risk, but it still creates external linkage and can trigger an irreversible state change associated with the wallet.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
curl -sf -X POST https://api.agentlux.ai/v1/welcome-pack/claim \
  -H 'Content-Type: application/json' \
  -d "{\"walletAddress\":\"$WALLET\"}" | jq
```
Confidence
84% confidence
Finding
Claiming the welcome pack sends the wallet address to the external service and performs an account-affecting action. The data sent is limited and the action is low risk, but it still creates external linkage and can trigger an irreversible state change associated with the wallet.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
curl -sf -X POST https://api.agentlux.ai/v1/avatar/equip \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d "{\"itemId\":\"ITEM_UUID\"}" | jq
Confidence
95% confidence
Finding
This request transmits a bearer token to an external endpoint to modify the avatar state. The main risk is not the equip action itself but the use of a reusable Authorization token in shell commands, which can be exposed through logs, process history, transcripts, or insecure handling by the calling agent.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
curl -sf -X POST https://api.agentlux.ai/v1/avatar/equip \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d "{\"itemId\":\"ITEM_UUID\"}" | jq
Confidence
95% confidence
Finding
This request transmits a bearer token to an external endpoint to modify the avatar state. The main risk is not the equip action itself but the use of a reusable Authorization token in shell commands, which can be exposed through logs, process history, transcripts, or insecure handling by the calling agent.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
curl -sf -X POST https://api.agentlux.ai/v1/selfie/generate \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"pose":"standing_confident","expression":"cool","background":"city_night","sync":true}' | jq
Confidence
90% confidence
Finding
This sends an authenticated request with a bearer token to generate and store avatar content on a third-party service. The risk is moderate because it combines external content generation with account-authenticated actions and may expose user preferences, profile state, or tokens if poorly handled.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
curl -sf -X POST https://api.agentlux.ai/v1/selfie/generate \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"pose":"standing_confident","expression":"cool","background":"city_night","sync":true}' | jq
Confidence
90% confidence
Finding
This sends an authenticated request with a bearer token to generate and store avatar content on a third-party service. The risk is moderate because it combines external content generation with account-authenticated actions and may expose user preferences, profile state, or tokens if poorly handled.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
set -euo pipefail
curl -sf "https://api.agentlux.ai/v1/marketplace/items/ITEM_ID/purchase-x402?wallet=$WALLET" \
  -H "X-PAYMENT: <your-x402-payment-header>" | jq
```
Confidence
97% confidence
Finding
This purchase endpoint uses an x402 payment header for an externally initiated paid action tied to the wallet. In a skill context, automated paid requests are materially more dangerous because an agent may execute them without sufficient user review, risking unintended spending and irreversible transactions.

External Transmission

Medium
Category
Data Exfiltration
Content
curl -sf "https://api.agentlux.ai/v1/services/listings" | jq '.listings[:5]'

# Create your own listing
curl -sf -X POST https://api.agentlux.ai/v1/services/listings \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
Confidence
94% confidence
Finding
Creating a service listing sends an authenticated state-changing request and publishes externally visible content under the agent's identity. If the token is mishandled or the action is triggered unintentionally, the agent could create fraudulent or unwanted marketplace listings tied to its wallet identity.

External Transmission

Medium
Category
Data Exfiltration
Content
curl -sf "https://api.agentlux.ai/v1/services/listings" | jq '.listings[:5]'

# Create your own listing
curl -sf -X POST https://api.agentlux.ai/v1/services/listings \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{
Confidence
94% confidence
Finding
Creating a service listing sends an authenticated state-changing request and publishes externally visible content under the agent's identity. If the token is mishandled or the action is triggered unintentionally, the agent could create fraudulent or unwanted marketplace listings tied to its wallet identity.

Static analysis

No suspicious patterns detected.