Back to skill

Security audit

Dexscan Skill

Security checks across malware telemetry and agentic risk

Overview

This appears to be a real DexScan market-data skill, but it needs review because it can use wallet analytics and searches parent .env files for API credentials.

Install only if you are comfortable sending token and wallet-analysis queries to DexScan. Provide DS_ACCESS_KEY and DS_SECRET_KEY through explicit environment configuration, and avoid placing DexScan credentials in parent project .env files where this skill could pick them up unintentionally. Be careful with outputs involving wallet addresses, PnL, tags, source addresses, emails, or social profiles, especially when analyzing someone else’s wallet.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • 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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (11)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill documentation describes use of environment variables and outbound API/network access, but no explicit permissions declaration is present. This creates a transparency and governance gap: the runtime may still access secrets and external endpoints without users or reviewers being clearly informed, increasing the risk of overprivileged execution or misuse of API keys.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill walks up parent directories looking for a .env file and reads DS_ACCESS_KEY and DS_SECRET_KEY from whichever one it finds first. That expands the skill's access boundary beyond its own directory and can unintentionally consume secrets from unrelated projects or higher-level workspace folders, which is unnecessary for a market-data client and increases the chance of credential misuse or accidental secret exposure.

Vague Triggers

Medium
Confidence
81% confidence
Finding
The trigger conditions are broad enough to match many generic requests about token prices, market caps, volume, liquidity, rankings, and address analytics. In an agent environment, this can cause the skill to activate outside its narrow intended scope, leading to unnecessary external calls, excessive data exposure, or the skill overriding a more appropriate tool for the user's request.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill documents endpoints that expose wallet addresses, source/funding addresses, transaction history, address tags, and social/profile metadata without any privacy notice, minimization guidance, or restrictions on downstream use. In a blockchain analytics skill, this can enable doxxing, profiling, and broad surveillance of identifiable users or linked personas, especially when combined with KOL tags and funding-source fields.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The developer-token endpoint includes contact and profile enrichment fields such as email plus numerous social links, but the documentation provides no warning that these may constitute sensitive personal or correlatable identity data. In this skill context, combining on-chain developer activity with off-chain contact channels increases the risk of harassment, deanonymization, phishing, and targeted profiling.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
These endpoints expose address-level transaction records, labels, and behavioral profiling without any privacy notice, minimization guidance, or user-consent framing. While the data is public on-chain, packaging it into easy wallet intelligence materially increases profiling capability and can facilitate deanonymization, targeting, or surveillance of traders.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The search endpoint silently pivots from token search to wallet-address lookup, which can surprise users and enable passive profiling workflows with no warning. This lowers friction for investigating individuals' public wallet activity and increases the risk of privacy-invasive use, especially when combined with PnL and tagging features elsewhere in the skill.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
These address-related helper functions send wallet addresses, token filters, and trading-query parameters to the external service at openapi.dexscan.trade. Even if functionally expected, wallet addresses and associated query context can be sensitive for users, and this file provides no disclosure, consent gate, or minimization before transmitting that data off-platform.

Credential Access

High
Category
Privilege Escalation
Content
const path = require('path');
const BASE_URI = 'https://openapi.dexscan.trade';

// 读取 .env 文件,从 dexscan-skill 目录向上逐级查找直到根目录
function readEnvFile() {
    const envConfig = {};
    let currentDir = __dirname;
Confidence
90% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
const envConfig = {};
    let currentDir = __dirname;

    // 向上逐级查找 .env 文件,直到根目录
    while (true) {
        const envPath = path.join(currentDir, '.env');
        if (fs.existsSync(envPath)) {
Confidence
90% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
// 向上逐级查找 .env 文件,直到根目录
    while (true) {
        const envPath = path.join(currentDir, '.env');
        if (fs.existsSync(envPath)) {
            const content = fs.readFileSync(envPath, 'utf-8');
            content.split('\n').forEach(line => {
Confidence
89% confidence
Finding
.env'

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/dexscan.js:105