Back to skill

Security audit

Zoho

Security checks across malware telemetry and agentic risk

Overview

This Zoho skill is purpose-aligned, but it needs Review because it can change business data, use long-lived Zoho access, and send meeting recordings to Google Gemini without strong consent or safety controls.

Install only if you trust the publisher and can review or obtain the missing zoho CLI wrapper. Use a dedicated least-privilege Zoho OAuth app, avoid unnecessary ALL scopes, protect the refresh token and Gemini key, require explicit confirmation for writes/deletes, and run meeting transcription only with organizational and participant approval for third-party Gemini processing.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (12)

Lp3

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding
The skill clearly instructs use of shell commands (`zoho`, `curl`, `jq`, `ffmpeg`) but does not declare corresponding permissions or capabilities. This creates a trust and sandboxing gap: an agent or reviewer may underestimate the operational power of the skill, including filesystem access, token handling, and external network calls.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The documented behavior extends beyond Zoho integration into downloading recordings, extracting audio, transcribing content, and sending meeting data to Google's Gemini API. That mismatch is dangerous because users may authorize the skill expecting only Zoho data operations, while sensitive meeting content is exfiltrated to a third-party service not disclosed in the skill description.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The standup summarization pipeline processes meeting recordings with `ffmpeg` and sends transcript/audio-derived content to external LLM services. In the context of enterprise meetings, this can expose confidential business discussions, personal data, and regulated information outside Zoho without clear consent or boundary controls.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The script sends Zoho meeting audio and derived transcript content to Google Gemini, a third-party processor, even though the skill is presented as a Zoho integration. This creates a real data exfiltration and privacy/compliance risk because meeting recordings commonly contain sensitive internal discussions, customer data, or regulated information, and users are not clearly informed that data leaves Zoho.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The README promotes direct CRM mutations, project/task changes, and automated meeting recording download/transcription without clearly warning users that these actions can modify production business data and export sensitive audio/content to third-party services. In an agent skill context, natural-language commands can reduce friction and increase the chance of users triggering high-impact actions or privacy-sensitive processing without understanding the consequences.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
Recommending cron-based automation for the standup summarizer encourages unattended processing of meeting recordings, including download and transcription, but the README does not warn that this may continuously transfer sensitive meeting content without interactive review. In a workplace setting, this can expose confidential discussions, personal data, or regulated information to unintended storage locations or third-party processors.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The trigger description is very broad, covering common business terms like CRM, deals, projects, tasks, meetings, and recordings. Over-broad activation can cause the skill to run in unintended contexts, increasing the chance of unnecessary access to Zoho data or execution of sensitive operations when the user did not intend to invoke this integration.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill documents highly sensitive operations such as printing access tokens, handling client secrets/refresh tokens, and deleting CRM records, but does not prominently warn about credential exposure or destructive effects. In practice, this can lead users or agents to leak bearer tokens into logs/terminal history or perform irreversible data changes without adequate confirmation.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The script uploads meeting-derived audio data to external Gemini endpoints without any user-facing warning, consent gate, or disclosure of third-party processing. In the context of a Zoho-focused skill, this mismatch makes the behavior more dangerous because operators may reasonably assume data remains within Zoho-related boundaries.

External Transmission

Medium
Category
Data Exfiltration
Content
if [[ "$WAV_BYTES" -gt 20000000 ]]; then
    # Large file: upload via File API first
    echo "   📤 Large file — uploading to Gemini File API..."
    UPLOAD_RESP=$(curl -s -X POST \
      "https://generativelanguage.googleapis.com/upload/v1beta/files?key=${GEMINI_API_KEY}" \
      -H "X-Goog-Upload-Command: start, upload, finalize" \
      -H "X-Goog-Upload-Header-Content-Length: ${WAV_BYTES}" \
Confidence
97% confidence
Finding
curl -s -X POST \ "https://generativelanguage.googleapis.com/upload/v1beta/files?key=${GEMINI_API_KEY}" \ -H "X-Goog-Upload-Command: start, upload, finalize" \ -H "X-Goog-Upload-Head

External Transmission

Medium
Category
Data Exfiltration
Content
GEMINI_BODY_FILE="${TMP_DIR}/gemini_body_${i}.json"
  echo "$GEMINI_BODY" > "$GEMINI_BODY_FILE"
  GEMINI_RESP=$(curl -s -X POST \
    "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}" \
    -H "Content-Type: application/json" \
    -d "@${GEMINI_BODY_FILE}")
Confidence
96% confidence
Finding
curl -s -X POST \ "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${GEMINI_API_KEY}" \ -H "Content-Type: application/json" \ -d

External Transmission

Medium
Category
Data Exfiltration
Content
echo "   🔄 Retrying with gemini-2.5-flash..."
    GEMINI_BODY_FILE="${TMP_DIR}/gemini_body_${i}.json"
    echo "$GEMINI_BODY" > "$GEMINI_BODY_FILE"
    GEMINI_RESP=$(curl -s -X POST \
      "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${GEMINI_API_KEY}" \
      -H "Content-Type: application/json" \
      -d "@${GEMINI_BODY_FILE}")
Confidence
95% confidence
Finding
curl -s -X POST \ "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${GEMINI_API_KEY}" \ -H "Content-Type: application/json" \ -d

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.