Back to skill

Security audit

Qelt Contracts

Security checks for vulnerabilities and agentic risk

Overview

This skill mostly does what it says, but it also recommends unpinned npm/global tooling that would run mutable third-party code on the user's machine.

Use the direct curl/API workflow when possible. Before using the optional Hardhat plugin or CLI, pin exact package versions, avoid global installs, review npm package provenance and lifecycle scripts, and remember that any submitted contract source will become public if verification succeeds.

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:158
Finding
Unpinned npm Dependencies May Execute Mutable Third-Party Code## Vulnerability Details **File Location**: `SKILL.md`, lines 158–164 **Vulnerability Type**: Unpinned third-party dependencies and unsafe package execution **Risk Level**: Medium ### Vulnerable Code ```markdown **Hardhat Plugin:** `npm install --save-dev @qelt/hardhat-verify@latest` ```bash npx hardhat qelt:verify --network qelt 0xCONTRACT_ADDRESS ``` **CLI Tool:** `npm install -g qelt-verify` → `qelt-verify verify 0x... ./Contract.sol --compiler-version 0.8.20 --optimize` ``` The same unsafe installation pattern is repeated in `references/verification-guide.md`, lines 158–170: ```markdown Latest version: `@qelt/hardhat-verify@1.0.12` ```bash npm install --save-dev @qelt/hardhat-verify@latest npx hardhat qelt:verify --network qelt 0xCONTRACT_ADDRESS ``` Features: auto-detects viaIR, EVM version, routes single vs multi-file automatically. ## CLI Tool Latest version: `qelt-verify@1.1.0` ```bash npm install -g qelt-verify qelt-verify init qelt-verify verify 0xCONTRACT ./Contract.sol --compiler-version 0.8.20 --optimize --watch ``` ``` ### Technical Analysis The documented workflow installs `@qelt/hardhat-verify` through the mutable `latest` tag and installs `qelt-verify` without specifying a version. It then executes the installed tools. Consequently, the code reviewed today is not necessarily the code users will install later. npm packages can execute lifecycle scripts during installation. The packages also obtain direct code execution when users invoke the Hardhat task or CLI. If a package, maintainer account, release process, or transitive dependency is compromised, a malicious future release could execute arbitrary code with the permissions of the user running npm. Global installation of `qelt-verify` increases system-wide exposure and makes dependency provenance harder to reproduce. The guide identifies current package versions, but the installation commands do not pin those versions and provide no integrity or provenance verification. ### At ...[truncated 1549 chars]
Remediation
## Remediation Suggestions 1. Replace mutable or implicit versions with reviewed exact versions: ```bash npm install --save-dev --save-exact @qelt/hardhat-verify@1.0.12 npm install --save-dev --save-exact qelt-verify@1.1.0 ``` 2. Avoid global package installation. Prefer a pinned local development dependency invoked through a package script or an explicitly pinned command. 3. Commit a lockfile and use reproducible installation in automated environments: ```bash npm ci ``` 4. Review package provenance, publisher identity, lifecycle scripts, and transitive dependencies before recommending or upgrading a version. 5. Validate package integrity through the lockfile and npm registry integrity metadata. Where supported, require package provenance attestations. 6. Introduce a controlled dependency-update process in which new releases are reviewed and tested before the documentation's pinned version is changed. 7. Retain the direct HTTPS REST API workflow as the preferred option when installation of third-party executable tooling is unnecessary. 8. Update both `SKILL.md` and `references/verification-guide.md` together so that their commands consistently use the same reviewed versions.
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 (3)

External Transmission

Medium
Category
Data Exfiltration
Content
### 1. Check if Already Verified (Do This First)

```bash
curl -fsSL "https://mnindexer.qelt.ai/api/v2/contracts/0xCONTRACT/verification"
```

If `"verified": true` → return existing source/ABI to user, no submission needed.
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Static analysis

No suspicious patterns detected.