zoho-email

ISSUES FOUND max severity CRITICALSkillSpector Do not install 100 registry clawhub.ai last scanned 1 scan

53 findings (18 critical, 3 high, 32 medium), mainly tool chaining abuse, data exfiltration, hardcoded secrets. Most recent scan 2026-02-07.

This Zoho Email integration skill presents MULTIPLE SERIOUS SECURITY CONCERNS that require immediate attention. The most critical issues are: (1) hardcoded credentials in test scripts exposing real email accounts, (2) insecure plaintext credential storage recommendations, (3) command injection risks in email query processing, and (4) missing tool restrictions. The skill handles sensitive email data and credentials but lacks adequate security controls. While OAuth2 support is present, the implementation stores tokens in plaintext. The bulk operation features could be abused for resource exhaustion. The skill requires significant security improvements before production use, particularly around credential management, input validation, and security documentation.

Scanner's overall assessment (LLM analyzer)

Second scanner: NVIDIA SkillSpector

Independent static run, no language model, over the same files as the Cisco scan above. How the two scanners compare across the whole corpus: Two scanners, one corpus.

What this skill does

Complete Zoho Mail integration with OAuth2, REST API (5-10x faster), HTML emails, attachments, and batch operations. Perfect for email automation and workflows.

Package
26 files, 232 KB
SKILL.md
2158 words, 12+ sections
Code
Python (9), Shell (7)
Homepage
https://github.com/briansmith80/clawdbot-zoho-email

SKILL.md covers: Zoho Email Integration · ✨ Features · 🔐 Authentication & Performance · 📧 Email Operations · ⚡ Batch & Bulk Operations · 🔒 Security · 📦 Installation · ⚙️ Setup · 1. Get an App-Specific Password · 2. Configure Credentials · 3. Test Connection · 🚀 Usage

Findings

CRITICAL Base64 encoding (often used before data exfiltration) Data Exfiltrationstatic

Pattern detected: base64.b64encode

scripts/apply_oauth2.py:103

return base64.b64encode(auth_string.encode()).decode()
Remediation: Review base64 usage, especially if combined with network calls
CRITICAL CREDENTIAL HARVESTING detected by YARA Hardcoded Secretsstatic

Detects potential exposure of sensitive information like API keys, passwords, tokens, and certificates: export credentials

SKILL.md:500

export ZOHO_PASSWORD="your-app-password"
Remediation: Review and remove credential harvesting pattern
CRITICAL INJECTION ATTACK detected by YARA Command Injectionstatic

Detects embedded scripting payloads (JS, VBScript, etc.) in MCP tool descriptions: \033[0;31m

test-app-password.sh:9

RED='\033[0;31m'
Remediation: Review and remove injection attack pattern
CRITICAL INJECTION ATTACK detected by YARA Command Injectionstatic

Detects embedded scripting payloads (JS, VBScript, etc.) in MCP tool descriptions: \033[1;33m

test-app-password.sh:10

YELLOW='\033[1;33m'
Remediation: Review and remove injection attack pattern
CRITICAL INJECTION ATTACK detected by YARA Command Injectionstatic

Detects embedded scripting payloads (JS, VBScript, etc.) in MCP tool descriptions: \033[0;34m

test-app-password.sh:11

BLUE='\033[0;34m'
Remediation: Review and remove injection attack pattern
CRITICAL INJECTION ATTACK detected by YARA Command Injectionstatic

Detects embedded scripting payloads (JS, VBScript, etc.) in MCP tool descriptions: \033[0m

test-app-password.sh:12

NC='\033[0m' # No Color
Remediation: Review and remove injection attack pattern
CRITICAL INJECTION ATTACK detected by YARA Command Injectionstatic

Detects embedded scripting payloads (JS, VBScript, etc.) in MCP tool descriptions: </script>

scripts/oauth-setup.py:57

<script>setTimeout(function() { window.close(); }, 3000);</script>
Remediation: Review and remove injection attack pattern
CRITICAL INJECTION ATTACK detected by YARA Command Injectionstatic

Detects embedded scripting payloads (JS, VBScript, etc.) in MCP tool descriptions: setTimeout(

scripts/oauth-setup.py:57

<script>setTimeout(function() { window.close(); }, 3000);</script>
Remediation: Review and remove injection attack pattern
CRITICAL INJECTION ATTACK detected by YARA Command Injectionstatic

Detects embedded scripting payloads (JS, VBScript, etc.) in MCP tool descriptions: function(

scripts/oauth-setup.py:57

<script>setTimeout(function() { window.close(); }, 3000);</script>
Remediation: Review and remove injection attack pattern
CRITICAL CREDENTIAL HARVESTING detected by YARA Hardcoded Secretsstatic

Detects potential exposure of sensitive information like API keys, passwords, tokens, and certificates: export ZOHO_EMAIL='your-email@domain.com'", file

scripts/apply_oauth2_cli.py:131

print("  export ZOHO_EMAIL='your-email@domain.com'", file=sys.stderr)
Remediation: Review and remove credential harvesting pattern
CRITICAL CREDENTIAL HARVESTING detected by YARA Hardcoded Secretsstatic

Detects potential exposure of sensitive information like API keys, passwords, tokens, and certificates: export ZOHO_PASSWORD='your-app-specific-password'", file

scripts/apply_oauth2_cli.py:132

print("  export ZOHO_PASSWORD='your-app-specific-password'", file=sys.stderr)'''
Remediation: Review and remove credential harvesting pattern
CRITICAL CREDENTIAL HARVESTING detected by YARA Hardcoded Secretsstatic

Detects potential exposure of sensitive information like API keys, passwords, tokens, and certificates: export ZOHO_EMAIL='your-email@domain.com'", file

scripts/apply_oauth2_cli.py:137

print("     export ZOHO_EMAIL='your-email@domain.com'", file=sys.stderr)
Remediation: Review and remove credential harvesting pattern
CRITICAL CREDENTIAL HARVESTING detected by YARA Hardcoded Secretsstatic

Detects potential exposure of sensitive information like API keys, passwords, tokens, and certificates: export ZOHO_PASSWORD='your-app-specific-password'", file

scripts/apply_oauth2_cli.py:138

print("     export ZOHO_PASSWORD='your-app-specific-password'", file=sys.stderr)'''
Remediation: Review and remove credential harvesting pattern
CRITICAL CREDENTIAL HARVESTING detected by YARA Hardcoded Secretsstatic

Detects potential exposure of sensitive information like API keys, passwords, tokens, and certificates: export ZOHO_EMAIL='your-email@domain.com'", file

scripts/add_oauth_cli.py:114

print("  export ZOHO_EMAIL='your-email@domain.com'", file=sys.stderr)
Remediation: Review and remove credential harvesting pattern
CRITICAL CREDENTIAL HARVESTING detected by YARA Hardcoded Secretsstatic

Detects potential exposure of sensitive information like API keys, passwords, tokens, and certificates: export ZOHO_PASSWORD='your-app-specific-password'", file

scripts/add_oauth_cli.py:115

print("  export ZOHO_PASSWORD='your-app-specific-password'", file=sys.stderr)''',
Remediation: Review and remove credential harvesting pattern
CRITICAL CREDENTIAL HARVESTING detected by YARA Hardcoded Secretsstatic

Detects potential exposure of sensitive information like API keys, passwords, tokens, and certificates: export ZOHO_EMAIL='your-email@domain.com'", file

scripts/add_oauth_cli.py:119

print("     export ZOHO_EMAIL='your-email@domain.com'", file=sys.stderr)
Remediation: Review and remove credential harvesting pattern
CRITICAL CREDENTIAL HARVESTING detected by YARA Hardcoded Secretsstatic

Detects potential exposure of sensitive information like API keys, passwords, tokens, and certificates: export ZOHO_PASSWORD='your-app-specific-password'", file

scripts/add_oauth_cli.py:120

print("     export ZOHO_PASSWORD='your-app-specific-password'", file=sys.stderr)'''
Remediation: Review and remove credential harvesting pattern
CRITICAL Hardcoded Credentials in Test Scripts Data Exfiltrationllm

Multiple test scripts contain hardcoded email addresses (brian@creativestudio.co.za) that could expose the developer's actual email account. While these appear to be test scripts, they demonstrate a pattern of hardcoding sensitive information and could lead to credential exposure if users copy these patterns.

test-rest-api-fixes.sh

export ZOHO_EMAIL="brian@creativestudio.co.za" in test scripts and TEST_RECIPIENT="brian@creativestudio.co.za" in examples
Remediation: Remove all hardcoded email addresses from test scripts. Use environment variables or placeholder values like 'user@example.com'. Add warnings in documentation about not committing real credentials.
HIGH Insecure Credential Storage Recommendation Data Exfiltrationllm

The skill's setup instructions recommend storing credentials in plaintext files (~/.clawdbot/zoho-credentials.sh) with only basic file permissions (chmod 600). While better than no protection, this approach stores passwords in plaintext on disk, making them vulnerable to file system access, backups, or malware.

SKILL.md

Create ~/.clawdbot/zoho-credentials.sh with export ZOHO_EMAIL and export ZOHO_PASSWORD in plaintext
Remediation: Recommend using system keychains (macOS Keychain, Windows Credential Manager, Linux Secret Service) or encrypted credential stores. Provide examples using keyring libraries. Emphasize OAuth2 as the preferred authentication method.
HIGH Command Injection Risk in Email Processing Command Injectionllm

The zoho-email.py script processes email content and subjects that could contain malicious payloads. While the code uses json.dumps for output, there are multiple places where email content is processed without sanitization, particularly in search queries and email body handling. The IMAP search functionality accepts user-controlled query strings that are passed directly to IMAP commands.

scripts/zoho-email.py

query parameter in search_emails() is passed to IMAP search without sanitization: mail.search(None, query)
Remediation: Implement strict input validation and sanitization for all email-related queries. Use parameterized queries where possible. Validate and escape IMAP search query syntax. Add content security warnings in documentation about processing untrusted email content.
HIGH Unrestricted Tool Usage - Missing allowed-tools Declaration Unauthorized Tool Usellm

The skill does not declare 'allowed-tools' in its YAML manifest, meaning it can use any agent tool without restriction. The skill executes Python scripts that perform network operations, file I/O, and email operations. Users cannot verify what tools the skill will use before installation.

SKILL.md

YAML manifest shows: allowed-tools: Not specified. Python scripts perform network requests, file operations, and execute external commands.
Remediation: Add 'allowed-tools: [Python, Bash, Read, Write]' to YAML manifest to explicitly declare tool requirements. This allows users to make informed decisions about granting permissions.
MEDIUM HTTP client library imports that enable external communication Data Exfiltrationstatic

Pattern detected: import requests

scripts/zoho-email.py:114

import requests
Remediation: Ensure network access is necessary and documented. Review all URLs
MEDIUM HTTP client library imports that enable external communication Data Exfiltrationstatic

Pattern detected: import requests

scripts/zoho-email.py:141

import requests
Remediation: Ensure network access is necessary and documented. Review all URLs
MEDIUM HTTP client library imports that enable external communication Data Exfiltrationstatic

Pattern detected: import urllib.request

scripts/zoho-email.py:1808

import urllib.request
Remediation: Ensure network access is necessary and documented. Review all URLs
MEDIUM Reading environment variables that may contain secrets Data Exfiltrationstatic

Pattern detected: os.environ.get('ZOHO_PASSWORD

scripts/zoho-email.py:26

PASSWORD = os.environ.get('ZOHO_PASSWORD')
Remediation: Minimize access to environment variables. Document why needed
MEDIUM Reading environment variables that may contain secrets Data Exfiltrationstatic

Pattern detected: os.environ.get("ZOHO_PASSWORD

scripts/zoho-email.py:1768

"zoho_password_env_set": bool(os.environ.get("ZOHO_PASSWORD")),
Remediation: Minimize access to environment variables. Document why needed
MEDIUM HTTP client library imports that enable external communication Data Exfiltrationstatic

Pattern detected: import urllib.request

scripts/apply_oauth2.py:79

import urllib.request
Remediation: Ensure network access is necessary and documented. Review all URLs
MEDIUM HTTP client library imports that enable external communication Data Exfiltrationstatic

Pattern detected: import urllib.request

scripts/oauth-setup.py:99

import urllib.request
Remediation: Ensure network access is necessary and documented. Review all URLs
MEDIUM HTTP client library imports that enable external communication Data Exfiltrationstatic

Pattern detected: import urllib.request

scripts/oauth-setup.py:126

import urllib.request
Remediation: Ensure network access is necessary and documented. Review all URLs
MEDIUM Reading environment variables that may contain secrets Data Exfiltrationstatic

Pattern detected: os.environ.get('ZOHO_PASSWORD

examples/batch-cleanup.py:163

if not os.environ.get('ZOHO_EMAIL') or not os.environ.get('ZOHO_PASSWORD'):
Remediation: Minimize access to environment variables. Document why needed
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get Specific Email

SKILL.md:220

python3 scripts/zoho-email.py get Inbox 4590
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get latest email

SKILL.md:332

# List attachments
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get specific email

SKILL.md:365

email = zoho.get_email(folder="Sent", email_id="4590")
Remediation: Review and remove tool chaining abuse pattern
MEDIUM SKILL DISCOVERY ABUSE detected by YARA Skill Discovery Abusestatic

Detects manipulation of skill discovery to increase unwanted activation: Perfect

SKILL.md:562

python3 scripts/zoho-email.py mark-unread INBOX 1004 1005
Remediation: Review and remove skill discovery abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get email: python3 scripts/zoho-email

test.sh:60

echo "  • Get email: python3 scripts/zoho-email.py get INBOX <email_id>"
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get attachments for this email

examples/attachment-demo.py:73

# Get attachments for this email
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Read, Search, Monitor, Send

scripts/zoho-email.py:4

Handles: Read, Search, Monitor, Send emails
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: GET, POST

scripts/zoho-email.py:183

method: HTTP method (GET, POST, PATCH, DELETE)
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: get('email', EMAIL

scripts/zoho-email.py:357

'fromAddress': self.tokens.get('email', EMAIL),
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: get('email') or EMAIL

scripts/zoho-email.py:641

self.email = self.oauth_tokens.get('email') or EMAIL
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get a specific email

scripts/zoho-email.py:922

"""Get a specific email by ID"""
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get unread: python3 zoho-email

scripts/zoho-email.py:1669

print("  Get unread:      python3 zoho-email.py unread")
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get email: python3 zoho-email

scripts/zoho-email.py:1670

print("  Get email:       python3 zoho-email.py get <folder> <id>")
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: read: python3 zoho-email

scripts/zoho-email.py:1678

print("  Mark as read:    python3 zoho-email.py mark-read <folder> <id1> <id2> ...")
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get unread: python3 zoho-email

scripts/zoho-email.py:1718

print("  Get unread:      python3 zoho-email.py unread")
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Get email: python3 zoho-email

scripts/zoho-email.py:1719

print("  Get email:       python3 zoho-email.py get <folder> <id>")
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: read: python3 zoho-email

scripts/zoho-email.py:1728

print("  Mark as read:    python3 zoho-email.py mark-read <folder> <id1> <id2> ...")
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: get("email

scripts/zoho-email.py:1788

report["oauth_email_in_token"] = bool(tokens.get("email") or tokens.get("user") or tokens.get("user_email"))
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Read, Search, Monitor, Send

scripts/apply_oauth2.py:16

Handles: Read, Search, Monitor, Send emails
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: Read, Search, Monitor, Send

scripts/apply_oauth2.py:20

Handles: Read, Search, Monitor, Send emails
Remediation: Review and remove tool chaining abuse pattern
MEDIUM TOOL CHAINING ABUSE detected by YARA Tool Chaining Abusestatic

Detects suspicious tool chaining patterns that could lead to data exfiltration: get('email') or EMAIL

scripts/apply_oauth2.py:201

self.email = self.oauth_tokens.get('email') or EMAIL
Remediation: Review and remove tool chaining abuse pattern
MEDIUM OAuth2 Token Storage Without Encryption Data Exfiltrationllm

OAuth2 tokens are stored in plaintext JSON files (~/.clawdbot/zoho-mail-tokens.json) without encryption. While file permissions may restrict access, the tokens (including refresh tokens) are vulnerable if the file system is compromised. Refresh tokens provide long-term access and should be protected with encryption.

scripts/zoho-email.py

with open(token_path, 'w') as f: json.dump(tokens, f, indent=2) - tokens stored in plaintext
Remediation: Encrypt OAuth2 tokens at rest using system keychain services or encrypted storage. Use libraries like 'keyring' for cross-platform secure storage. Add file integrity checks to detect token tampering.
MEDIUM Potential Resource Exhaustion in Bulk Operations Resource Abusellm

The bulk_action and empty-spam/empty-trash functions can process large numbers of emails without rate limiting or resource constraints. The code includes a limit parameter but defaults to processing 100 emails at once, which could cause performance issues or trigger rate limits on Zoho's servers.

scripts/zoho-email.py

limit parameter defaults to 100, no rate limiting between operations, no timeout protection for large batches
Remediation: Implement rate limiting between batch operations. Add configurable delays between API calls. Set reasonable default limits (e.g., 50 emails). Add progress indicators and allow interruption of long-running operations. Document Zoho API rate limits.

What is in the package

26 files, 232 KB. Show the list.
FileKindSize
CHANGELOG.mddoc13 KB
OAUTH2_SETUP.mddoc11 KB
README.mddoc7.0 KB
SKILL.mddoc17 KB
requirements.txtdoc910 B
test-app-password.shscript4.2 KB
test-batch-operations.shscript2.6 KB
test-rest-api-fixes.shscript3.7 KB
test.shscript2.0 KB
examples/attachment-demo.pyscript5.1 KB
examples/auto-reply.pyscript1.3 KB
examples/batch-cleanup.pyscript5.8 KB
examples/morning-briefing.shscript538 B
examples/send-html-newsletter.pyscript3.9 KB
examples/vip-monitor.shscript854 B
scripts/add_oauth_cli.pyscript5.5 KB
scripts/apply_oauth2.pyscript15 KB
scripts/apply_oauth2_cli.pyscript6.8 KB
scripts/oauth-setup.pyscript14 KB
scripts/zoho-email.pyscript92 KB
examples/clawdbot-commands/emails.shscript1.2 KB
examples/templates/README.mddoc5.3 KB
examples/templates/announcement.htmldata4.4 KB
examples/templates/newsletter.htmldata3.1 KB
examples/templates/simple.htmldata1.6 KB
examples/templates/welcome.htmldata5.4 KB

External hosts referenced

accounts.zoho.com github.com api-console.zoho.com img.shields.io mail.zoho.com clawdhub.com your-site.com keepachangelog.com semver.org tools.ietf.org www.zoho.com

Hostnames that appear in the skill's files. Referencing a host is not a finding; compare against the findings above and the skill's stated purpose.

Environment variables referenced

ZOHO_EMAIL API_MODE ZOHO_PASSWORD MESSAGE_ID ZOHO_API_BASE_URL EMAIL_ID TEST_EMAIL ZOHO_API_RATE_DELAY ZOHO_API_TIMEOUT BASE_DIR EMAIL EMAILS PASSED ZOHO_IMAP_PORT ZOHO_SMTP_PORT ZOHO_TOKENS_JSON

Package contents recorded 2026-10-22. The scan above ran against the version current at scan time; the two can differ if the skill has since been updated.

What we checked

What we did not check

Sources