Back to skill

Security audit

Agent Network

Security checks for vulnerabilities and agentic risk

Overview

This is a real agent-networking skill, but it exposes powerful unauthenticated network controls and shares agent data too broadly for default installation.

Review before installing. Use only in an isolated or firewalled environment, avoid sensitive conversations or private skills, and prefer waiting for a version with authenticated local APIs, loopback-only binding, opt-in external discovery, real peer authentication/encryption, safer HTML rendering, and updated dependencies.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (5)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
index.js:109
Finding

Unauthenticated Network-Accessible Control API

Content
View full analysis
{ res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Content-Type', 'application/json'); const sendError = (msg) => { res.end(JSON.stringify({ error: msg })); }; const sendSuccess = (data) => { res.end(JSON.stringify(data)); }; ``` Sensitive message history is returned without authenticating the caller: ```javascript else if (req.url.startsWith('/api/messages') && req.method === 'GET') { const urlObj = require('url').parse(req.url, true); const peerId = urlObj.query.peer; const messages = this.db.all(` SELECT * FROM messages WHERE (from_agent = ? AND to_agent = ?) OR (from_agent = ? AND to_agent = ?) ORDER BY created_at ASC `, [this.nodeId, peerId, peerId, this.nodeId]); sendSuccess(messages); } ``` The same unauthenticated server permits outbound messaging and other state-changing operations: ```javascript else if (req.url === '/api/send' && req.method === 'POST') { let body = ''; req.on('data', chunk => body += chunk); req.on('end', async () => { const { to, message } = JSON.parse(body); await this.core.sendMessage(to, message); sendSuccess({ success: true }); }); } ``` The server is started without specifying a loopback address: ```javascript this.httpServer.listen(this.config.port + 1, () => { console.log(`HTTP API server listening on port ${this.config.port + 1}`); }); ``` ### Technical Analysis The HTTP API has no authentication, session validation, API token, authorization checks, or caller identity controls. It exp ...[truncated 2071 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
ui/index.html:301
Finding

Stored Cross-Site Scripting Through Peer, Message, and Skill Data

Content
View full analysis
{ const id = c.peer_id || c.agent_id || c.id; const isConnected = c.status === 'accepted'; const isDiscovered = c.status === 'discovered' || c.type; const type = c.type || 'websocket'; return `
${isConnected ? '🤖' : '📡'}
${id.substring(0, 20)}${id.length > 20 ? '...' : ''}
${isConnected ? '✅ 已连接' : isDiscovered ? `🔍 ${type}发现` : '⏳ 待通过'} ${c.version ? ' v' + c.version : ''}
`}).join(''); ``` Skill metadata is also rendered without HTML escaping: ```javascript container.innerHTML = skills.map(s => `
${s.name} ${s.price || 0}积分
${s.description || '暂无描述'}
⭐ ${(s.avg_rating || 0).toFixed(1)} 📥 ${s.downloads || 0}
下载 评分
`).join(''); ``` Stored message content is rendered directly: ```javascrip ...[truncated 3596 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
lib/network.js:159
Finding

Unauthenticated and Unencrypted P2P Protocol Permits Identity Spoofing and Database Poisoning

Content
View full analysis
{ this.wss = new WebSocket.Server({ port: this.port }); this.wss.on('listening', () => { console.log(`P2P server listening on port ${this.port}`); // Start discovering HTTP agents this.startHTTPAgentDiscovery(); resolve(); }); this.wss.on('error', (err) => { console.error('P2P server error:', err); reject(err); }); this.wss.on('connection', (ws, req) => { this.handleConnection(ws, req); }); }); } ``` A caller-selected `peerId` is trusted during the handshake: ```javascript handleMessage(ws, message) { const { type, peerId, payload } = message; switch (type) { case 'handshake': this.connections.set(peerId, { ws, info: payload, type: 'websocket' }); this.emit('peer_connected', peerId, payload); console.log(`Peer connected: ${peerId}`); if (this.config.autoGreet && payload.name) { setTimeout(() => { this.sendGreeting(peerId); }, 1000); } break; case 'message': this.handlePeerMessage(peerId, payload); break; case 'discover_request': this.handleDiscoverRequest(ws, peerId); break; case 'skill_share': this.handleSkillShare(peerId, payload); break; default: if (this.messageHandlers.has(type)) { this.messageHandlers.get(type)(payload, peerId); } } } ``` Outbound connections explicitly use plain ...[truncated 3233 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
lib/skills.js:23
Finding

Directory Traversal in Skill Publication Reads Files Outside the Skills Root

Content
View full analysis
body += chunk); req.on('end', async () => { const { skillPath, price, metadata } = JSON.parse(body); const skillId = await this.skills.publish(skillPath, price, metadata); // Share with P2P network await this.core.shareSkill(skillId, metadata.name || skillPath, metadata.description, price); sendSuccess({ success: true, skillId }); }); } ``` The value is joined to the skills root without checking the canonical result: ```javascript // Publish a skill async publish(skillPath, price = 0, metadata = {}) { const skillDir = path.join(this.skillsDir, skillPath); if (!fs.existsSync(skillDir)) { throw new Error('Skill not found: ' + skillPath); } const skillMdPath = path.join(skillDir, 'SKILL.md'); let description = ''; if (fs.existsSync(skillMdPath)) { const content = fs.readFileSync(skillMdPath, 'utf-8'); // Extract first 200 chars as description description = content.substring(0, 200); } ``` The extracted content is persisted as the skill description: ```javascript this.db.run( `INSERT INTO skills (id, owner_agent, name, description, category, price, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)`, [ skillId, this.nodeId, metadata.name || path.basename(skillPath), description, metadata.category || 'general', price, new Date().toISOString() ] ); ``` ### Technical Analysis `skillPath` is attacker-controlled. `path.join()` normalizes traversal segments but does not enforce that the resulting path remains inside `this.skillsDir`. Values containing sufficie ...[truncated 1571 chars]
Remediation
View remediation

other

Warning
Location
index.js:41
Finding

Automatic External Registration and Metadata Broadcast Without Explicit Opt-In

Content
View full analysis
{ try { await this.evomap.handshake(agent.node_id); console.log(`🤝 Auto-handshake sent to ${agent.node_id}`); this.core.db.run(`INSERT OR IGNORE INTO connections (peer_id, status, connected_at) VALUES (?, 'accepted', ?)`, [agent.node_id, Date.now()]); } catch(e) {} }, Math.random() * 3000 + 1000); } } catch(e) { console.log(` EvoMap error: ${e.message}`); } ``` The external EvoMap destination is hard-coded: ```javascript const EVOMAP_API = 'https://evomap.ai'; class EvoMapClient { constructor(nodeId) { this.nodeId = nodeId || 'node_' + crypto.randomBytes(4).toString('hex'); this.baseUrl = EVOMAP_API; } ``` Five Nostr relays are contacted ...[truncated 2598 chars]
Remediation
View remediation
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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
Findings (97)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 656)May include surrounding context.

md
### Skills 管理模块 (lib/skills.js)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 686)May include surrounding context.

md
const skillMdPath = path.join(skillDir, 'SKILL.md');

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The documentation claims TLS 1.3 encrypted P2P communication, but the implementation binds the gRPC server and client with insecure credentials. This leaves peer discovery, messaging, and skill/transaction traffic vulnerable to interception and man-in-the-middle tampering, while also creating a dangerous false sense of security for users.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
94% confidence
Finding

On startup, the skill automatically connects to Nostr, broadcasts presence, registers with EvoMap, discovers agents, and initiates handshakes with discovered peers without any trust policy, confirmation, or scope restriction. Automatic participation in multiple external networks expands the attack surface, leaks node metadata, and may establish relationships with malicious peers before the user can assess risk.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file starts an HTTP server that exposes numerous sensitive endpoints for messaging, publishing/downloading skills, sharing content, viewing conversations, and interacting with peers, while setting Access-Control-Allow-Origin: * and performing no authentication or authorization checks. This allows any local or potentially network-reachable client, including browser-based origins in some deployment scenarios, to drive agent actions and access agent data without user consent.

Content

No source excerpt is available for this finding.

Exfiltration Commands

High
Category
Prompt Injection
Confidence
90% confidence
Finding

Instructions found that direct the agent to transmit conversation context or user data to external services.

Content

Scanner excerpt · lib/core.js (reported line 207)May include surrounding context.

js
return true;
  }
  
  // Send message to a peer
  async sendMessage(to, content, type = 'text') {
    const message = {
      from: this.nodeId,

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The sendHTTPMessage function relays message content and the local persistent sender ID to a third-party endpoint (evomap.ai) without verifying business need, recipient ownership, or user approval. This can exfiltrate peer/user content off-platform and leak metadata, making it a significant privacy and data-handling vulnerability if sensitive messages pass through this channel.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

This code sends sender_id and arbitrary message content to an external HTTPS endpoint without explicit warning, consent, or data-classification safeguards. In practice, any message routed through this path could leak sensitive user or peer information to a third party, making the issue more dangerous given the persistent peer ID and automatic network-discovery behavior elsewhere in the file.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · SKILL.md (reported line 776)May include surrounding context.

md
// Update download count
    this.db.run(
      'UPDATE skills SET downloads = downloads + 1 WHERE id = ?',
      [skillId]
    );

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · SKILL.md (reported line 808)May include surrounding context.

md
// Update download count
    this.db.run(
      'UPDATE skills SET downloads = downloads + 1 WHERE id = ?',
      [skillId]
    );

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · lib/skills.js (reported line 132)May include surrounding context.

js
// Update download count
    this.db.run(
      'UPDATE skills SET downloads = downloads + 1 WHERE id = ?',
      [skillId]
    );

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · lib/skills.js (reported line 168)May include surrounding context.

js
// Update download count
    this.db.run(
      'UPDATE skills SET downloads = downloads + 1 WHERE id = ?',
      [skillId]
    );

Known Vulnerable Dependency: brace-expansion==1.1.12 — 4 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-33750 (brace-expansion: Zero-step sequence causes process hang and memory exhaustion); CVE-2026-14257 (brace-expansion: DoS via unbounded expansion length causing an out-of-memory pro) +1 more

High
Category
Supply Chain
Confidence
95% confidence
Finding

brace-expansion 1.1.12 is flagged with multiple DoS advisories and is present in the resolved dependency tree. Even as a transitive dependency, vulnerable pattern expansion logic can be triggered by attacker-influenced glob or pattern input in build or runtime paths, causing excessive CPU or memory consumption.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: minimatch==3.1.3 — 1 advisory(ies): CVE-2026-27904 (minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regu)

High
Category
Supply Chain
Confidence
95% confidence
Finding

minimatch 3.1.3 is listed with a ReDoS advisory and appears in the lockfile as a resolved package. If user-controlled glob patterns are processed by code paths using this version, an attacker may cause catastrophic backtracking and deny service.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: @grpc/grpc-js==1.14.3 — 2 advisory(ies): CVE-2026-48068 (@grpc/grpc-js: A malformed request can cause a server crash); CVE-2026-48069 (@grpc/grpc-js: An incoming malformed compressed message can cause a client or se)

High
Category
Supply Chain
Confidence
98% confidence
Finding

@grpc/grpc-js 1.14.3 is a direct production dependency and is flagged for malformed-request and malformed-compressed-message crash issues. Because this skill is named agent-network and includes networking libraries, the vulnerable gRPC stack is especially relevant and could enable remote denial of service against clients or servers using it.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: @xmldom/xmldom==0.8.11 — 15 advisory(ies): CVE-2026-83608 (xmldom: DocType `name` Injection Bypasses requireWellFormed); CVE-2026-41673 (xmldom: Uncontrolled recursion in XML serialization leads to DoS); CVE-2026-83605 (xmldom: Attribute name injection via setAttribute() bypasses requireWellFormed) +12 more

High
Category
Supply Chain
Confidence
94% confidence
Finding

@xmldom/xmldom 0.8.11 is present with numerous advisories including injection and recursion-based DoS issues. Although it is a dev dependency through plist tooling, XML parser vulnerabilities can still be dangerous in build or packaging workflows that ingest untrusted project metadata or files.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: app-builder-lib==24.13.3 — 1 advisory(ies): CVE-2026-54672 (electron-updater: Uncontrolled search path elements within `AppImage` built by `)

High
Category
Supply Chain
Confidence
84% confidence
Finding

app-builder-lib 24.13.3 is flagged due to a vulnerability in the Electron updater/appimage ecosystem. In this lockfile it is a development packaging dependency, so exposure depends on whether produced artifacts or updater logic are used downstream, but the issue should still be treated as real supply-chain risk.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: brace-expansion==2.0.2 — 4 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-33750 (brace-expansion: Zero-step sequence causes process hang and memory exhaustion); CVE-2026-14257 (brace-expansion: DoS via unbounded expansion length causing an out-of-memory pro) +1 more

High
Category
Supply Chain
Confidence
94% confidence
Finding

brace-expansion 2.0.2 is another vulnerable version in the dependency graph with multiple DoS advisories. Multiple installed vulnerable copies increase the chance that at least one reachable code path can be abused via attacker-controlled pattern input.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: builder-util-runtime==9.2.4 — 1 advisory(ies): CVE-2026-54673 (electron-updater: Cross-origin redirect leaks `PRIVATE-TOKEN` and mixed-case `Au)

High
Category
Supply Chain
Confidence
88% confidence
Finding

builder-util-runtime 9.2.4 is flagged for token leakage across redirects in updater-related flows. This is not core runtime logic for the listed direct dependencies, but if the packaged app uses updater features, credentials or authorization headers may be exposed to unintended origins.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: brace-expansion==5.0.3 — 5 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-33750 (brace-expansion: Zero-step sequence causes process hang and memory exhaustion); CVE-2026-45149 (brace-expansion: Large numeric range defeats documented `max` DoS protection) +2 more

High
Category
Supply Chain
Confidence
95% confidence
Finding

brace-expansion 5.0.3 is also flagged with multiple DoS issues, indicating vulnerable instances exist across several major versions in the tree. This broadens exposure and suggests the dependency set has not been recently audited for hostile-input handling in glob expansion.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: minimatch==9.0.6 — 2 advisory(ies): CVE-2026-27904 (minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regu); CVE-2026-27903 (minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adja)

High
Category
Supply Chain
Confidence
95% confidence
Finding

minimatch 9.0.6 carries ReDoS issues and is present in the resolved tree. Any code path or tooling that accepts untrusted patterns could be forced into excessive backtracking and high CPU usage.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: electron==28.3.3 — 16 advisory(ies): CVE-2026-34776 (Electron: Out-of-bounds read in second-instance IPC on macOS and Linux); CVE-2026-70609 (Electron: DevTools JavaScript Injection via Unsanitized Dock State Parameter); CVE-2026-34767 (Electron: HTTP Response Header Injection in custom protocol handlers and webRequ) +13 more

High
Category
Supply Chain
Confidence
93% confidence
Finding

electron 28.3.3 is a development dependency with numerous advisories, including IPC and injection issues. Because Electron embeds a large privileged runtime, shipping or testing with a vulnerable version can materially increase client-side attack surface, especially if untrusted content is loaded or custom protocols are used.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: extract-zip==2.0.1 — 2 advisory(ies): CVE-2026-19693 (extract-zip allows arbitrary file writes through symlink archive entries); CVE-2026-56876 (extract-zip unvalidated symlink path traversal)

High
Category
Supply Chain
Confidence
92% confidence
Finding

extract-zip 2.0.1 is flagged for symlink-based arbitrary write/path traversal issues. In Electron installation or tooling contexts, processing a malicious archive could result in files being written outside the intended extraction directory.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: minimatch==10.2.2 — 2 advisory(ies): CVE-2026-27904 (minimatch ReDoS: nested *() extglobs generate catastrophically backtracking regu); CVE-2026-27903 (minimatch has ReDoS: matchOne() combinatorial backtracking via multiple non-adja)

High
Category
Supply Chain
Confidence
95% confidence
Finding

minimatch 10.2.2 is also flagged for ReDoS, adding another vulnerable matcher version to the tree. The presence of multiple vulnerable matcher versions increases maintenance risk and potential reachability through different toolchains.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: form-data==4.0.5 — 1 advisory(ies): CVE-2026-12143 (form-data: CRLF injection in form-data via unescaped multipart field names and f)

High
Category
Supply Chain
Confidence
89% confidence
Finding

form-data 4.0.5 is flagged for CRLF injection via unescaped multipart field names and filenames. If any code constructs multipart requests using attacker-influenced field metadata, this could enable request smuggling or header injection toward downstream services.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.