Back to skill

Security audit

Agent Acquisition Master -- Agent becomes a master of client acquisition.

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent client-acquisition automation, but it needs Review because it enables persistent autonomous outreach, posting, inbox reading, scraping, Telegram forwarding, and broad state writes without enough user control.

Install only after reviewing and disabling default crons, limiting account/file access, requiring human approval before any email, social post, LinkedIn action, purchase, DNS change, or Telegram forwarding, and moving secrets and lead/inbox data into scoped, redacted storage with clear retention and unsubscribe controls.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T06 · System Persistence

Error
Location
CRONS.md:1
Finding

Autonomous Scheduled-Task Persistence

Content
View full analysis

Vulnerability Details

File Location: CRONS.md, lines 1-69
Vulnerability Type: Persistent autonomous cron-job installation
Risk Level: High

Vulnerable Code

markdown
# Acquisition Crons — Agent

7 crons autonomes. Lun-Ven sauf mention contraire.
Agent configure ces crons lors du setup du skill.

---

## Format OpenClaw

```json
{
  "cron": {
    "enabled": true,
    "jobs": [

      {
        "name": "acquisition-daily-content",
        "cron": "0 8 * * 1-5",
        "message": "Exécute acquisition.content — publie le contenu du jour selon content_calendar.json. Twitter + LinkedIn. Adapte le sujet à l'actualité du moment si pertinent. Log engagement dans CONTENT_LEARNINGS.md immédiatement après chaque publication. Si un post génère un engagement notable, log dans HOOKS.md.",
        "model": "claude-sonnet-4-6",
        "session": "isolated"
      },

      {
        "name": "acquisition-daily-email",
        "cron": "0 9 * * 1-5",
        "message": "Exécute acquisition.email — envoie le batch cold email du jour (max 50). Lis leads_enriched.json, prends les prospects non encore contactés, utilise le meilleur template selon TEMPLATES_PERF.md. Log immédiatement dans AUDIT.md et sent_log.json après chaque envoi.",
        "model": "claude-sonnet-4-6",
        "session": "isolated"
      },

      {
        "name": "acquisition-qualify-inbox",
        "cron": "0 9,13,17 * * 1-5",
        "message": "Exécute acquisition.qualify — lit les nouvelles réponses Gmail depuis la dernière vérification. Classe chaque réponse : chaud / tiède / froid / désabonnement. Si lead chaud : notifie le principal sur Telegram immédiatement avec nom, message, et contexte. Log dans LESSONS.md si hook validé par une réponse positive. Log dans ERRORS.md si désabonnement ou réponse négative avec raison probable.",
        "model": "claude-haiku-4-5",
        "session": "isolated"
      },

     
...[truncated 4756 chars]
Remediation
View remediation

Remediation Suggestions

  1. Do not register cron jobs automatically during general skill setup.
  2. Present every proposed job, schedule, data source, external action, and destination to the user before installation.
  3. Require explicit opt-in approval for each individual job and default every job to disabled.
  4. Separate read-only analysis jobs from jobs that publish, send messages, or modify external systems.
  5. Require per-campaign approval before enabling email, follow-up, LinkedIn, or content-publication jobs.
  6. Add an expiration timestamp and maximum-run count to every scheduled job.
  7. Provide a documented command that disables and removes every installed job and verify cleanup after uninstalling the skill.
  8. Pin and integrity-check all referenced scripts before each invocation.
  9. Validate and sanitize mutable input files before scheduled processing.
  10. Use dedicated least-privilege service identities instead of broadly authenticated browser sessions.
  11. Add recipient allowlists, send-rate ceilings, dry-run mode, and a mandatory approval queue for outbound communications.
  12. Prevent inbox messages, prospect content, and social posts from being treated as agent instructions.

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:17
Finding

Excessive Access to Agent Configuration and Global Persistent State

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 17-27
Vulnerability Type: Excessive filesystem permissions and violation of least privilege
Risk Level: Medium

Vulnerable Code

yaml
metadata:
  openclaw:
    emoji: "🎯"
    security_level: L2
    always: false
    required_paths:
      read:
        - /workspace/USER.md
        - /workspace/AGENTS.md
        - /workspace/.learnings/LEARNINGS.md
      write:
        - /workspace/acquisition/leads.json
        - /workspace/acquisition/sequences/
        - /workspace/acquisition/sent_log.json
        - /workspace/.learnings/LEARNINGS.md
        - /workspace/AUDIT.md

Technical Analysis

The declared permissions allow the acquisition skill to read global user information, agent configuration, and cross-session learning state. It can also write to the global learning file and the workspace-wide audit file.

These permissions exceed what is necessary for a client-acquisition workflow. Prospecting and campaign management can operate using a dedicated acquisition directory without reading /workspace/USER.md, /workspace/AGENTS.md, or global learning data. Writing acquisition-derived material into /workspace/.learnings/LEARNINGS.md also crosses the boundary between task-local data and global state consumed by future sessions.

The risk is amplified because this skill processes untrusted external content from Gmail, LinkedIn, Twitter, Reddit, websites, and prospect records. Without strict separation and sanitization, externally sourced text may be incorporated into shared logs or learning summaries. The available evidence does not establish an intentional prompt-injection payload, so this finding is classified as excessive privilege rather than confirmed memory poisoning.

Attack Path

  1. The skill is activated with all declared filesystem permissions.
  2. It reads /workspace/USER.md, /workspace/AGENTS.md, and `/work ...[truncated 1330 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove read access to /workspace/USER.md, /workspace/AGENTS.md, and /workspace/.learnings/LEARNINGS.md.
  2. Remove write access to the global /workspace/.learnings/LEARNINGS.md file.
  3. Store all campaign state beneath a dedicated directory such as /workspace/acquisition/.
  4. Replace workspace-wide AUDIT.md access with an acquisition-specific audit log.
  5. Grant each scheduled workflow only the files required for that workflow.
  6. Enforce filesystem permissions that prevent acquisition scripts from traversing outside their dedicated directory.
  7. Treat email bodies, profile text, social posts, website content, and prospect records as untrusted data rather than instructions.
  8. Sanitize and structurally encode external content before placing it in logs or learning files.
  9. Add redaction for personal data, credentials, tokens, private correspondence, and unrelated user context.
  10. Require explicit user review before promoting task-local observations into any global memory store.
  11. Apply retention limits and access controls to prospect, inbox, and campaign data.
  12. Audit the absent /workspace/skills/acquisition/*.py implementations before granting them any filesystem or authenticated-session access.
Vulnerability Patterns
  • 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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (25)

Credential Access

High
Category
Privilege Escalation
Confidence
94% confidence
Finding

The skill explicitly instructs adding a BREVO_API_KEY to the agent environment as part of an automated setup flow. In the context of a skill that also performs broad logging, writes many files, and makes external requests, introducing API credentials increases the risk of secret exposure, misuse, or accidental persistence if the setup or surrounding tooling handles .env material unsafely.

Content

Scanner excerpt · SKILL.md (reported line 885)May include surrounding context.

md
→ brevo.com → compte gratuit
   → Connecter le domaine secondaire
   → Générer clé DKIM → coller dans DNS
   → Ajouter BREVO_API_KEY dans .env Agent

4. Créer les templates initiaux
   → /workspace/acquisition/templates/cold_v1.txt

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This cron explicitly automates outbound cold-email sending and follow-ups to external recipients, but the skill text does not provide a clear user warning, approval gate, or constraints around consent, recipient selection, and message review. That creates a real risk of unauthorized external communications, spam, reputational harm, and misuse of stored lead/customer data at scale.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This scheduled task reads Gmail replies, classifies message contents, and forwards lead details and context to Telegram without any explicit disclosure about handling potentially sensitive communications. The combination of inbox access, automated content processing, and cross-channel forwarding increases privacy, confidentiality, and data-minimization risks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill automates LinkedIn profile views, likes, connection activity, and personalized outreach without warning the user that it will perform visible external engagement under their identity. This can violate platform expectations, create reputational risk, and trigger unintended interactions if content or targeting is wrong.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This task schedules prospect scraping, enrichment, deduplication, and optional use of a Hunter API credential, but does not warn about third-party data collection or secret usage. That exposes the user to privacy, compliance, and credential-handling risks, especially because prospect acquisition is performed autonomously and repeatedly.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README explicitly promotes autonomous prospecting, messaging, logging, and Telegram notifications, but gives no safety boundaries around consent, platform policy compliance, third-party data handling, or external data transmission. In an acquisition automation skill, this omission is dangerous because it normalizes unsupervised outbound actions and silent export of prospect/account data to external systems, increasing the risk of privacy violations, account abuse, spam, or unauthorized disclosure.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The invocation text is very broad and can trigger this skill for common requests like finding clients, growing revenue, or building an audience. In an agent system, overly broad routing increases the chance that high-risk actions such as outreach, account changes, and external messaging occur when the user did not explicitly request them.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The operational instructions, templates, and interaction guidance are presented entirely in French, effectively imposing a specific language on the skill's outputs and behavior. There is no opt-in, fallback, or statement that the skill is intentionally limited to French-speaking users or markets.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill directs collection of email addresses through landing pages and mailing flows without requiring a privacy notice, consent language, retention policy, or lawful-basis check. That creates compliance and data-handling risk because personal data is gathered and used for nurturing without explicit safeguards.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill instructs the agent to read inbox replies, classify leads, maintain exchange histories, and notify Telegram about hot leads without clear minimization boundaries. This can expose sensitive email content and contact data to secondary channels and persistent records, especially because Telegram notifications and long-lived histories widen the disclosure surface.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill mandates detailed natural-language logging after every action, including results, context, hypotheses, lead status, and performance data. Such logs can accumulate personal data, business-sensitive information, and outreach histories in broadly readable files, creating retention and disclosure risk if accessed by other tools, users, or later tasks.

Content

No source excerpt is available for this finding.

Scope Creep

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs the agent to create and update multiple files under /workspace/acquisition/learnings/ and related paths that are not listed in the manifest's allowed write paths. This creates a permission mismatch where documented behavior exceeds declared scope, increasing the chance of unauthorized writes, hidden state, or policy bypass if the runtime does not strictly enforce path restrictions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The setup instructions tell the agent to buy domains, configure DNS, and create third-party accounts, which are external side effects with cost and security implications. Without an explicit approval gate and warning, the skill can drive irreversible account and billing changes beyond what a user may expect from a general 'acquisition' request.

Content

No source excerpt is available for this finding.

Scope Creep

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The setup flow directs creation of new files such as tracker_url.txt and other onboarding artifacts that are not included in declared write permissions. This discrepancy can lead to unexpected persistence and makes review of the skill's true write surface incomplete.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The usage trigger is extremely broad: it applies to virtually any B2B product or service sold to companies. In an agent environment, such generic activation criteria can cause the skill to fire in ordinary business conversations where outreach automation may be inappropriate, leading to unintended prospecting behavior, spammy suggestions, or policy-conflicting actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The examples are highly generic categories like SaaS, API, agency, and consulting, which do little to constrain when the skill should be invoked. This increases the chance of ambiguous or overbroad activation, causing the agent to apply sales-outreach behavior in contexts that may not warrant it and potentially amplifying unsolicited messaging risks.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This manifest-style JSON uses French throughout fields such as usage, examples, and email content, but provides no indication that the skill is intended only for French-speaking users or that users can opt into this locale. The policy explicitly calls for flagging language or locale constraints when a specific language is effectively forced without user choice or justification.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest describes a skill for client acquisition via cold email, LinkedIn outreach, lead qualification, follow-up, closing, and audience growth. This file instead defines a social/content calendar centered on trading performance, market observations, and an autonomous agent narrative, which is a materially different operational focus than client acquisition enablement.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The natural-language content throughout the file is presented only in French, including description, posting rules, and content templates, with no indication that the user can opt into another language or locale. This can violate a language/locale policy when a skill implicitly forces one language without explicit user choice or documented regional justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This JSON contains user-facing natural-language descriptions and guidance exclusively in French, including the top-level description, ICP titles, qualification prompts, and rule text. Because the file does not indicate that the skill is intentionally French-only or provide an opt-in language choice, it may violate organizational language/locale policy.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The file is written entirely in French and the operational instructions are expressed only in French, with no indication that another language is supported or that French is a required locale. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation unless clearly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The natural-language instructions and behavior description are presented entirely in French, and there is no indication that users may choose another language or opt in to this locale. The policy requires avoiding a forced language or locale unless it is documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest content, including usage and message templates, is entirely in French, but there is no indication that the skill is intentionally limited to French-speaking users or that another language can be chosen. This can violate language or locale policy when a skill implicitly forces a language without user opt-in or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This manifest-style JSON contains all user-facing usage notes and email content exclusively in French, such as the usage description and email subjects/bodies. The policy requires flagging language or locale constraints when the skill effectively forces a specific language without user opt-in or documented justification.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

This JSON manifest says the agent "adapts according to current events" but does not define what kinds of events qualify, when adaptation should occur, or any limits on the trigger scope. For a manifest file, this creates an overly broad activation/behavior condition that could lead to unintended use whenever any newsworthy event occurs.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.