Back to skill

Security audit

Super Personasiled Search

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Connectify development skill, but the included app needs review because it can expose contact data without login checks and sends detailed contact records to OpenAI.

Install only in a development or tightly controlled environment until the API has authentication, tenant-scoped data access, rate limits, request size limits, dependency updates, and clear disclosure/controls for sending contact notes to OpenAI. Do not deploy the current backend publicly with real network data.

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 (2)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
server.js:39
Finding

Unauthenticated Network Query Endpoint Exposes Contact Data and Paid AI Operations

Content
View full analysis
{ try { const { query, sessionId } = req.body || {}; if (!query || typeof query !== 'string' || !sessionId || typeof sessionId !== 'string') { return res.status(400).json({ error: 'Both query and sessionId are required strings.', }); } const cachedContext = await getQueryContext(sessionId); if (cachedContext && cachedContext.query === query) { return res.json({ results: cachedContext.results || [], }); } const connections = await getAllConnections(); const scoredConnections = await scoreConnections(query, connections); const topResults = await Promise.all( scoredConnections.slice(0, 5).map(async (connection) => { let actions = []; try { actions = await suggestActions(connection); } catch { actions = ['Draft intro email', 'Send quick follow-up']; } return { name: connection.name, role: connection.role, company: connection.company, platforms: connection.platforms, relevanceScore: connection.relevanceScore, reason: connection.reason, suggestedActions: actions, }; }) ); await saveQueryContext(sessionId, { query, results: topResults, createdAt: new Date().toISOString(), }); return res.json({ results: topResults }); } catch (error) { console.error('Query handling failed:', error); return res.status(500).json({ error: 'Unable to process query right now. Please try again.', }); } }); ``` ### Technical Analysis The `/api/query` route performs no authentication or authorization before loading the complete Redis-backed conne ...[truncated 2421 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
agent.js:44
Finding

Complete Contact Records and Free-Form Notes Are Transmitted to OpenAI Without Data Minimization

Content
View full analysis
({ id: connection.id, name: connection.name, role: connection.role, company: connection.company, location: connection.location, platforms: connection.platforms, tags: connection.tags, notes: connection.notes, lastInteraction: connection.lastInteraction, })), }, null, 2 ); const completion = await client.chat.completions.create({ model: MODEL, temperature: 0.2, messages: [ { role: 'system', content: SCORE_SYSTEM_PROMPT }, { role: 'user', content: userPrompt }, ], response_format: { type: 'json_object' }, }); ``` ```js const completion = await client.chat.completions.create({ model: MODEL, temperature: 0.4, messages: [ { role: 'system', content: ACTION_SYSTEM_PROMPT }, { role: 'user', content: JSON.stringify( { name: connection.name, role: connection.role, company: connection.company, tags: connection.tags, notes: connection.notes, }, null, 2 ), }, ], response_format: { type: 'json_object' }, }); ``` ### Technical Analysis For every cache miss, `scoreConnections()` serializes every Redis connection and sends it to OpenAI. The transmitted fields include direct identifiers, location, platform membership, free-form notes, and interaction dates. After ranking, selected contacts are transmitted again by `suggestActions()`. Third-party AI processing is consistent with the declared ranking functionality, so this is not hidden credential exfiltration. However, sending the complete collection and all free-form notes exceeds strict least-d ...[truncated 2244 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (40)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · .gitignore (reported line 2)May include surrounding context.

text
node_modules/
.env
.DS_Store
dist/

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · README.md (reported line 40)May include surrounding context.

Copy .env.example to .env and set real values:

bash
cp .env.example .env

Required:

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `src/components/AIChatPanel.jsx`: chat UX and `/api/query` client call.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `src/components/AIChatPanel.jsx`: chat UX and `/api/query` client call.

Known Vulnerable Dependency: adm-zip==0.5.16 — 2 advisory(ies): CVE-2026-76845 (adm-zip extraction follows destination symlinks, allowing arbitrary file overwri); CVE-2026-39244 (adm-zip: Crafted ZIP file triggers 4GB memory allocation)

High
Category
Supply Chain
Confidence
89% confidence
Finding

The lockfile includes adm-zip 0.5.16, and the cited issues affect ZIP extraction and malformed ZIP handling. In this repository, the risk is indirect because it is a transitive dependency, but if any code path processes attacker-controlled ZIP archives, it could enable arbitrary file overwrite via symlink traversal or denial of service via memory exhaustion.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: axios==1.13.6 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
97% confidence
Finding

Axios 1.13.6 is present and is directly relevant because this skill integrates external services such as Apify and OpenAI, making outbound HTTP behavior security-sensitive. If the reported proxy normalization, header handling, or prototype-pollution-related issues are reachable, they could enable SSRF, credential leakage, request manipulation, or response hijacking in a network-connected backend.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: basic-ftp==5.2.0 — 4 advisory(ies): GHSA-6v7q-wjvx-w8wg (basic-ftp: Incomplete CRLF Injection Protection Allows Arbitrary FTP Command Exe); CVE-2026-39983 (basic-ftp has FTP Command Injection via CRLF); CVE-2026-41324 (basic-ftp vulnerable to denial of service via unbounded memory consumption in Cl) +1 more

High
Category
Supply Chain
Confidence
84% confidence
Finding

basic-ftp is present transitively via networking/proxy tooling and the cited CRLF injection and memory exhaustion issues can be serious when attacker-controlled FTP URLs or endpoints are used. In this skill, FTP is not an obvious core feature, so exploitability is reduced, but if untrusted proxy/PAC/URI inputs are ever accepted, it could become a practical command-injection or DoS vector.

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
80% confidence
Finding

brace-expansion has known algorithmic complexity and resource-exhaustion issues, but here it is only a transitive utility used by tooling and matching libraries. In this project that makes it primarily a build/developer-environment risk unless untrusted glob-like patterns are processed at runtime, which is not evident from the lockfile alone.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: browserslist==4.28.1 — 2 advisory(ies): CVE-2026-73088 (Browserslist: Uncaught crash / prototype write via untrusted browserslist-stats.); CVE-2026-73089 (Browserslist: Unbounded memory growth (no cache eviction) via distinct query res)

High
Category
Supply Chain
Confidence
80% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: event-stream (Malicious package (credential theft))

High
Category
Supply Chain
Confidence
95% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

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
80% confidence
Finding

form-data 4.0.5 has CRLF injection risk in multipart field names and filenames. In a platform that may upload or relay data to external APIs, attacker-controlled multipart metadata could produce request smuggling-like effects or malformed outbound requests if this library is used with untrusted field names or filenames.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ip-address==10.1.0 — 2 advisory(ies): CVE-2026-69192 (ip-address: Address4 decodes leading-zero octets as decimal while resolvers deco); CVE-2026-42338 (ip-address has XSS in Address6 HTML-emitting methods)

High
Category
Supply Chain
Confidence
80% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: lodash==4.17.23 — 2 advisory(ies): CVE-2025-13465 (lodash vulnerable to Prototype Pollution via array path bypass in `_.unset` and ); CVE-2021-23337 (lodash vulnerable to Code Injection via `_.template` imports key names)

High
Category
Supply Chain
Confidence
86% confidence
Finding

Lodash 4.17.23 carries well-known prototype pollution and template/code-injection risks depending on which APIs are used. Because this is a backend handling structured data from external sources, prototype pollution is especially relevant if untrusted objects are merged, unset, or otherwise transformed using vulnerable patterns.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: nanoid==3.3.11 — 3 advisory(ies): CVE-2026-67214 (nanoid: non-secure generators can loop indefinitely with negative size); CVE-2026-67213 (nanoid: custom generators can loop indefinitely when size is zero); CVE-2026-73086 (nanoid: Integer Overflow or Wraparound)

High
Category
Supply Chain
Confidence
80% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill instructs use of environment-backed secrets (OPENAI_API_KEY, REDIS_URL, APIFY_TOKEN) but does not declare any explicit tool scope, permissions, or allowed-tools boundary. In an agent ecosystem, that omission can cause overbroad access assumptions and makes it harder to constrain or audit what the skill may read from the environment.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

text
3. Smoke test query endpoint:
   ```bash
   curl -X POST http://localhost:3001/api/query \
     -H "Content-Type: application/json" \
     -d "{\"query\":\"Who in my network works in AI and is based in SF?\",\"sessionId\":\"local-test-session\"}"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The code sends detailed connection profile data, including names, roles, companies, locations, tags, notes, and interaction history, to a third-party OpenAI API for ranking. Even if functionally intended, this creates a real privacy and data-governance risk when users or contacts have not been clearly informed or the data has not been minimized before external transmission.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The action-generation flow transmits professional contact attributes and notes to OpenAI, which may expose personal or confidential relationship information to an external processor. Because notes can contain sensitive free-form content, this is more dangerous than strictly structured fields and can lead to unintended disclosure or compliance issues.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This code persists connection records and query context to Redis using set/get operations, which can affect user data and privacy. Although there is error logging for client failures, there is no confirmation prompt, user disclosure, or inline documentation warning that session-related data is being stored in external infrastructure.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code saves the user's query, result set, and timestamp to Redis, which affects user data/privacy. Although the route has error logging, there is no visible confirmation prompt, user-facing notice, or explanatory comment/docstring warning that query activity is being retained.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

This code performs a POST request to /api/query containing the user's typed query and sessionId, which transmits user and session data off the client. While there is an internal comment about the backend call, there is no user-visible warning, confirmation, or disclosure in the component UI indicating that entered content will be sent to a server.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: baseline-browser-mapping==2.10.10 — 1 advisory(ies): CVE-2026-45819 (baseline-browser-mapping process termination on invalid input causes denial of s)

Low
Category
Supply Chain
Confidence
60% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: body-parser==2.2.2 — 1 advisory(ies): CVE-2026-12590 (body-parser vulnerable to denial of service when invalid limit value silently di)

Low
Category
Supply Chain
Confidence
60% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: fflate==0.8.2 — 1 advisory(ies): CVE-2026-45820 (fflate unzipSync can enter an infinite loop when parsing malformed ZIP64 archive)

Low
Category
Supply Chain
Confidence
60% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: file-type==20.5.0 — 2 advisory(ies): CVE-2026-31808 (file-type affected by infinite loop in ASF parser on malformed input with zero-s); CVE-2026-32630 (file-type: ZIP Decompression Bomb DoS via [Content_Types].xml entry)

Low
Category
Supply Chain
Confidence
81% confidence
Finding

file-type 20.5.0 has denial-of-service issues on malformed media/archive inputs. Because this skill includes ingestion and external data processing, handling attacker-controlled files or responses is plausible, so malformed content could hang parsing or trigger excessive resource use if this package is used on untrusted data.

Content

No source excerpt is available for this finding.