Back to skill

Security audit

Candidate Sourcing

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed LinkedIn candidate-sourcing integration that uses Veezee for searches and profile enrichment, with no hidden destructive or unrelated behavior found.

Install this only if you are comfortable sending recruiting search criteria and LinkedIn profile lookups to Veezee and with the SDK/CLI or MCP connection storing a reusable Veezee API key. Keep use to recruiting and candidate-sourcing workflows, monitor credit usage, and do not expect the skill to provide emails or phone numbers.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (2)

Vague Triggers

Medium
Confidence
92% confidence
Finding
The skill description uses very broad trigger language such as 'source, find, or search for candidates, talent, or people matching criteria,' which can cause the agent to invoke this skill for loosely related people-search requests. Because the skill performs external LinkedIn lookups and profile enrichment, unintended invocation can lead to unnecessary third-party data transmission, privacy issues, and unexpected credit consumption.

External Transmission

Medium
Category
Data Exfiltration
Content
Every call needs an API key. Minting one is free and human-free: no signup, no card. A call without a key fails with `KEY_REQUIRED` (401) carrying `mint_url`; the fix is the free mint below, never a payment. A fresh `vz_trial_` key runs under a free per-IP daily budget of 200 credits, cached data only, first page only on any cursor sequence. Two equivalent surfaces; pick whichever your environment has:

- MCP: add the server `https://mcp.veezee.io/linkedin` (streamable-http; `https://mcp.veezee.io/all` exposes every tool). Hosts that support MCP authorization (Claude Code, claude.ai) open a Veezee sign-in on connect (email code, no password): that is the whole auth step. Other hosts: mint a key with `POST https://api.veezee.io/v1/keys/mint` (empty body; the key is shown once) and put it in the connection's `Authorization: Bearer` header.
- SDK: `import { VeezeeClient } from "@veezee/sdk"`; `const client = new VeezeeClient(); await client.mint();` mints and stores the free key the first time and reuses it on later runs. Platform methods live on the namespace (`client.linkedin.getProfile/searchPeople/getCompany/getPosts`); `client.resolveUrl` and `client.getUsage` are top-level. The client sends retries and Idempotency-Keys for you. The `veezee` CLI (`npx @veezee/sdk init`) mints and stores the same key.

When the free budget or a trial cap runs out (`TRIAL_CAP_EXCEEDED`, `INSUFFICIENT_CREDITS`, `BUDGET_EXHAUSTED`), the error carries `upgrade_url` (https://veezee.io/upgrade) and a machine-readable `offer`. Hand that link to your human; purchases credit the same key directly and it keeps working unchanged. Note: one search plus a couple of profile fetches makes a real dent in the free daily budget, so sourcing runs at any real volume need purchased credits.
Confidence
95% confidence
Finding
The skill instructs the agent to connect to external Veezee endpoints, mint and store an API key, and transmit candidate search criteria and profile lookups to a third-party service. This is security-relevant because it enables outbound data transfer, persistent credential creation/storage, and processing of potentially sensitive hiring queries and personal data outside the host environment.

Static analysis

No suspicious patterns detected.