Back to skill

Security audit

Skill

Security checks across malware telemetry and agentic risk

Overview

This looks like a legitimate OKKI Go prospecting and outreach skill, but it needs review because it can run installers, create optional scheduled update reminders, and store sensitive contact/outreach data locally by default.

Review before installing if you are not comfortable with an agent running an npm installer, saving API keys locally, creating an optional scheduled update reminder, or retaining raw prospect/contact/email data on disk. Use platform secret storage where possible, decline update notifications unless needed, confirm every paid unlock or email send, and periodically delete local OKKI Go temp/artifact files that contain contacts or message content.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Rogue AgentSelf-Modification, Session Persistence
Findings (19)

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill declares no permissions while explicitly instructing use of shell commands, environment variables, and outbound network calls. This creates a transparency and governance gap: users and the hosting platform may not realize the skill can access credentials, execute commands, and contact external services, increasing the risk of unauthorized data access or command misuse.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The documented purpose omits or downplays several sensitive behaviors, including local state/profile management, credential/authentication handling, installer/update utilities, and cron-like management. This mismatch can mislead users and reviewers about the skill's true trust boundary, enabling persistence, storage of sensitive business data, or account-affecting actions outside the advertised prospecting-only scope.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill directs the agent to execute installation and credential-management shell commands, including persistent auth setup, which exceeds the core business actions of prospecting and outreach. In an agent context, this broadens the action surface from API usage to local system modification and secret handling, increasing the chance of unintended command execution or persistence on the host.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The file includes account creation, legal acceptance capture, email verification, and API-key provisioning flows even though the skill metadata says it is not for account settings. That mismatch is dangerous because it can cause the agent to collect personal data and perform account lifecycle actions users may not expect from this skill.

Description-Behavior Mismatch

Medium
Confidence
97% confidence
Finding
The README documents a substantial set of update-notification, cron, and post-install scripts that are outside the declared B2B prospecting/email scope of the skill. In an agent-skill setting, undocumented or unjustified operational capabilities broaden the attack surface and can induce the host agent to run local setup or persistence-related commands that are not necessary for the user’s requested workflow.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The documented ability to create local scheduled jobs and OpenClaw push notifications enables persistent local execution and outbound messaging behavior unrelated to the core prospecting workflow. Even if framed as update reminders, persistence mechanisms are security-sensitive because they can be repurposed for repeated execution, user tracking, or unsolicited notifications once an agent follows the documented commands.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
This script creates and manages a persistent scheduled job that periodically queries external package metadata and displays update messages, which is unrelated to the skill's stated prospecting/email workflow. Even if framed as convenience, adding persistence and background external communication expands the skill's operational scope and attack surface, making supply-chain abuse or unexpected host-side behavior more dangerous.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The API reference exposes outbound email-sending endpoints that can contact real recipients and consume paid EDM quota, but it lacks an explicit warning that these actions have external side effects and financial cost. In an agent-skill context, this increases the risk that an LLM or wrapper triggers bulk or personalized email sends without clear user confirmation, potentially causing spam, unintended outreach, quota depletion, or reputational harm.

Natural-Language Policy Violations

Medium
Confidence
89% confidence
Finding
The playbook states that branch payloads should use Chinese target-side index terms by default, which enforces a specific language choice without explicit user opt-in. This can misalign searches with the user's locale or intent, reduce transparency, and cause the agent to perform actions using assumptions the user did not authorize.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The script automatically persists raw API responses for `task` and `mail` detail commands even when the user did not request `--save-raw`. Those responses can contain sensitive prospecting and email data, and writing them to disk by default increases the risk of unintended retention, local disclosure, backup propagation, and access by other users/processes on the host.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
This code assembles installation, agent, model, campaign, and source identifiers into outbound HTTP headers, which can expose persistent identifiers to remote services without any local consent, minimization, or clear disclosure at the point of use. Even if intended for telemetry or attribution, these headers enable tracking and correlation of users, environments, or agent deployments across requests.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
This script persists raw company search results and metadata to disk by default via writeJsonFile(rawPath, compact.raw), and also updates selection/batch pointer state. In a prospecting tool, those results can include sensitive business contact data and search intent, so writing them locally without an explicit warning, opt-in, or retention control increases the risk of unintended disclosure through shared workspaces, backups, or later compromise of the host.

Missing User Warnings

Medium
Confidence
81% confidence
Finding
The script sends normalized search payloads to an authenticated remote endpoint using authHeaders(), which may include business targeting criteria and other potentially sensitive prospecting inputs. In the context of this skill, remote transmission is expected functionality, but the lack of explicit disclosure in this file means users may unknowingly send sensitive search data to a third-party service.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The script persists the full outbound email request payload and API response to disk, which can include recipient addresses, message content, and possibly contact or campaign metadata. In a prospecting/email-sending skill, that creates a real confidentiality risk because sensitive outreach data is stored locally by default without minimization, redaction, or explicit user disclosure.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The script performs paid unlock operations and then automatically retrieves company profiles and contact emails/phones, which involves transmitting selected company identifiers and collecting personal/business contact data. In an agent skill context, doing this without an explicit pre-action disclosure or confirmation increases the risk of users triggering credit spend and data collection without informed consent.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The script writes raw JSON, audit logs, and markdown detail files containing unlocked company data and contact details to local storage by default, including fallback locations. In an agent environment, silent persistence of sensitive prospect/contact information can expose data to other users, processes, artifacts, backups, or later prompts, creating a meaningful confidentiality and privacy risk.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
Use this flow when a user asks to install, set up, add, update, or enable OKKI Go. Do not rely on the npm package's interactive prompt. Ask the install questions in chat, map the answers to installer flags, then execute the installer yourself when the host provides shell/tool execution. Do not just display the command.

Do not ask the user to choose a language. Use the user's current conversation language for all prompts and explanations.

One-step execution path: when the user already named a runtime and install location, or a preinstalled agent knows its own known runtime and the default global location is appropriate, skip the wizard questions and execute the flagged installer directly.
Confidence
86% confidence
Finding
Do not ask the user

Credential Access

High
Category
Privilege Escalation
Content
Primary persistent storage:

- Credential cache: `${XDG_CONFIG_HOME:-$HOME/.config}/okki-go/credentials.json`, mode `0600`.
- Registered source: `${XDG_CONFIG_HOME:-$HOME/.config}/okki-go/auth-source.json`, mode `0600`, non-secret source metadata only.

Resolution order:
Confidence
88% confidence
Finding
credentials.json

Session Persistence

Medium
Category
Rogue Agent
Content
exit 0
fi

# Create cron job
PAYLOAD='CURRENT=$(cat ~/.openclaw/workspace/skills/okki-go/VERSION 2>/dev/null); if [ -z "$CURRENT" ]; then CURRENT=$(grep "^version:" ~/.openclaw/workspace/skills/okki-go/SKILL.md 2>/dev/null | awk '\''{print $2}'\''); fi; if [ -z "$CURRENT" ]; then CURRENT="unknown"; fi; LATEST=$(clawhub search okki go --limit 1 2>/dev/null | jq -r '\''if .[0] then .[0].version else "unknown" end'\''); if [ -n "$LATEST" ] && [ "$CURRENT" != "$LATEST" ] && [ "$LATEST" != "unknown" ]; then CHANGELOG=$(clawhub show okki-go@$LATEST --changelog 2>/dev/null | head -15); echo "📦 OKKI Go new version available"; echo ""; echo "Current version: $CURRENT"; echo "Latest version:  $LATEST"; echo ""; echo "What'\''s new:"; echo "$CHANGELOG"; echo ""; echo "Update command: openclaw skills update okki-go"; echo "Skip: dismiss this notification, remind again next week"; elif [ "$CURRENT" = "$LATEST" ]; then echo "✅ OKKI Go is already up to date ($CURRENT)"; fi'

echo ""
Confidence
92% confidence
Finding
Create cron job PAYLOAD='CURRENT=$(cat ~/.openclaw/workspace/skills/okki-go/VERSION 2>/dev/null); if [ -z "$CURRENT" ]; then CURRENT=$(grep "^version:" ~/.openclaw

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/lib/okki-api.js:15

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/test/company-search-display.test.js:75

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/test/company-search-split.test.js:99

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/test/context-firewall.test.js:64

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/test/debug-metadata.test.js:70

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/test/paid-wrapper-contracts.test.js:20

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/test/runtime-attribution.test.js:59

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/test/unlock-plan-contracts.test.js:20

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/unlock-companies.js:427