Back to plugin

Security audit

OpenClaw Zalo Mod

Security checks across malware telemetry and agentic risk

Overview

This is a real Zalo administration plugin with disclosed features, but it stores broad chat/contact data locally and can perform powerful group and messaging actions, so it belongs in Review before installation.

Install only if you are comfortable giving this plugin owner-level Zalo group administration, local dashboard access, and local storage of chat/contact history. Keep the dashboard bound to localhost or use a strong token, review `pendingAuto`, report delivery, CRM import, and `agentTools.allowDestructive` settings, and treat `context.db`, profile caches, and memory files as sensitive data.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (16)

Intent-Code Divergence

High
Confidence
95% confidence
Finding
The 'Gửi ngay / Send now' action sends real reports to live destinations after a confirmation modal, but nearby preview-related wording can make users believe they are only testing output. In an admin dashboard that can message groups and owners, misleading send semantics materially increase the risk of accidental mass messaging and unintended disclosure of report contents.

Context-Inappropriate Capability

High
Confidence
94% confidence
Finding
The plugin can bulk extract member/profile/contact data from Zalo and import it into a CRM, which is substantially broader than moderation and increases the blast radius of compromise or misuse. In a moderation plugin context, this creates unnecessary access to personal data and enables mass data collection and repurposing beyond user expectations.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The dashboard exposes a generic Zalo API passthrough that can invoke many bridge actions based on user-supplied action names and parameters. Even with some classification checks, this creates a powerful remote control surface whose compromise could lead to arbitrary messaging, group changes, membership actions, or future action abuse if classification coverage is incomplete.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
Pending-member approve/reject actions trigger real membership changes immediately with no confirmation step. In a moderation dashboard, accidental clicks or UI confusion can silently approve or reject multiple users, causing unauthorized access or wrongful denial with little friction.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The unblock action performs a real access-control change immediately without prior warning or confirmation. Since unblocking restores a user's ability to re-enter or interact, a mistaken click can reverse a safety decision and re-expose the group to previously blocked users.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
Task deletion is executed directly with no confirmation, making accidental destructive actions likely. Because tasks may track customer follow-ups or operational deadlines, unintended deletion can cause loss of workflow state and missed actions.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The server injects the dashboard bearer token directly into the served HTML, making it available to any script running in the page context. If the dashboard page ever suffers XSS or loads untrusted content, that token can be stolen and reused to call privileged API endpoints.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill explicitly enables reading and summarizing group chat history, including admin notes and memory, but does not require any privacy notice, consent check, data-minimization step, or warning about sensitive content handling. Because this capability exposes potentially private communications across groups, an owner or compromised owner context could retrieve and repackage sensitive information without clear user awareness.

Missing User Warnings

Medium
Confidence
79% confidence
Finding
The workspace skill instructs the agent to read and append group memory after handling @mentions, but the skill text shown to the agent contains no requirement to notify users that their content may be persisted. In a group-chat context, silent retention of user-provided content can create privacy and data-minimization risks, especially if participants other than the owner are unaware of logging.

Ssd 3

Medium
Confidence
87% confidence
Finding
The skill explicitly directs the agent to persist user/group-derived summaries into `chat-highlights.md` in plain language. Even though this file only generates instructions, the instruction itself promotes retention of potentially sensitive conversational data in a durable store without any visible safeguards on redaction, retention period, access control, or sensitivity filtering.

Ssd 3

Medium
Confidence
96% confidence
Finding
The file explicitly buffers every group message before any mention gate and can optionally persist those messages, which creates a data-collection surface for content users did not intend to submit to the agent. Even without LLM invocation, storing message text, sender identity, quotes, and metadata prior to consent or triggering conditions can expose sensitive conversation content through logs, storage compromise, misuse by downstream features, or over-retention.

Ssd 3

Medium
Confidence
93% confidence
Finding
The engine intentionally captures every inbound group/DM message before mention gating and persists it via ConversationBuffer backed by SQLite. This creates a broad retention surface for user-generated content, including potentially sensitive chat data from users who did not explicitly invoke the bot, so compromise, misuse, or overbroad operator access would expose more data than is necessary for immediate bot response.

Ssd 3

Medium
Confidence
90% confidence
Finding
The history import path stores older chat messages so they can be read back later, explicitly expanding persistence beyond transient processing. That increases the amount and age of sensitive user content retained, which raises privacy and breach impact even if the feature is operationally useful.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
// ── Auto-duyệt member chờ (pendingAuto) — CHỈ khi bot là admin nhóm; lọc theo từ khoá tên ──
        // Lọc: pluginCfg.pendingBlockKeywords (mảng) — tên chứa từ khoá này thì BỎ QUA (không duyệt).
        async function autoApprovePending() {
            const withZaloApi = await getSafeZaloApi();
            if (!withZaloApi) return;
            const blockKw = (pluginCfg.pendingBlockKeywords || []).map(s => String(s).toLowerCase()).filter(Boolean);
Confidence
84% confidence
Finding
autoApprove

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
// Auto-duyệt member chờ — mỗi ~2 phút (throttle toàn cục, tránh gọi API dày).
                    if (Date.now() - (globalThis.__zmPendLast || 0) > 120000) {
                        globalThis.__zmPendLast = Date.now();
                        await autoApprovePending();
                    }
                } catch (e) {
                    logger.warn(`[openclaw-zalo-mod] [pendingAuto] scan error: ${e.message}`);
Confidence
84% confidence
Finding
autoApprove

Unpinned Dependencies

Low
Category
Supply Chain
Content
}
  },
  "peerDependencies": {
    "openclaw": "*"
  },
  "scripts": {
    "check": "node --check index.js",
Confidence
95% confidence
Finding
"openclaw": "*"

VirusTotal

61/61 vendors flagged this plugin as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.