Back to skill

Security audit

Crm Add Record

Security checks for vulnerabilities and agentic risk

Overview

This CRM skill is purpose-related but exposes a CRM username and password and can submit records to an external CRM without clear safeguards.

Review before installing. Do not use this package with real CRM access until the exposed credentials are revoked or rotated, secrets are removed from files and outputs, and the skill requires a preview plus explicit confirmation before saving records. Use only a dedicated least-privilege account for any CRM automation.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:34
Finding

Hard-Coded CRM Credentials Exposed in Documentation and Script Output

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:34-36, SKILL.md:115, and scripts/main.sh:26-27
Vulnerability Type: Hard-coded credentials and plaintext secret disclosure
Risk Level: High

Vulnerable Code

SKILL.md:34-36:

bash
# Fill credentials: username="weiyj", password="weiyj123"
agent-browser fill @<username_field> "weiyj"
agent-browser fill @<password_field> "weiyj123"

SKILL.md:115:

text
- Verify credentials are correct: weiyj / weiyj123

scripts/main.sh:26-27:

bash
echo "CRM login URL: https://niw26kl7.fractaltest.cn/Crm/Backend/login.html"
echo "Login username: weiyj | Password: weiyj123"

The final snippet is an English rendering of the source strings; the URL, username, password, and executable behavior are unchanged.

Technical Analysis

A reusable CRM username and password are embedded directly in the skill documentation and shell script. Secrets stored in source files are accessible to anyone who can read the package, repository history, archives, build artifacts, or deployment image.

The shell script compounds the exposure by printing the CRM URL and credentials to standard output. Consequently, the password may be captured in terminal scrollback, CI/CD logs, agent execution transcripts, monitoring systems, or redirected output files.

Exploitation does not require code execution or sophisticated techniques. An attacker only needs read access to the skill package or access to output from scripts/main.sh. The exposed credential can then be submitted to the declared CRM login endpoint. No evidence establishes the exact server-side permissions of this account, so the maximum privilege level cannot be stated; however, the documented workflow demonstrates that the account is intended to authenticate and create CRM records.

Attack Path

  1. An attacker obtains read access to the skill package, repository, artifact, agent transcr ...[truncated 1483 chars]
Remediation
View remediation

Remediation Suggestions

  1. Immediately rotate or revoke the exposed CRM password and invalidate active sessions associated with the account.
  2. Investigate CRM authentication logs for unexpected access, record creation, modification, deletion, or export activity.
  3. Remove the username and password from SKILL.md, scripts/main.sh, repository history, packaged artifacts, examples, logs, and agent transcripts wherever feasible.
  4. Retrieve credentials at runtime from an approved secret manager or protected environment variables. Do not place secret values in command output, documentation, source code, command-line arguments, or error messages.
  5. Change the shell script so it never prints passwords. If diagnostic output is required, display only a redacted identifier such as Password: [REDACTED].
  6. Require operators or the execution environment to supply authentication securely at runtime. Fail safely when credentials are absent rather than falling back to a hard-coded value.
  7. Use a dedicated service account restricted to the minimum CRM operations needed by the skill. Deny data export, user administration, destructive actions, and unrelated record access unless explicitly required.
  8. Enable multi-factor authentication, short-lived credentials, session expiration, login rate limiting, and source restrictions where supported.
  9. Add automated secret scanning to source-control and release pipelines to prevent future committed credentials.
  10. Add log-redaction controls so authentication values cannot be captured by CI/CD systems, agent transcripts, terminal recording, or monitoring tools.
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 Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

There is a clear description-behavior mismatch. The declared purpose promises end-to-end CRM record creation automation in Fractal CRM, including navigation, login, field mapping, and submission. In reality, the script is a minimal formatter: it accepts fixed-position inputs, substitutes default placeholders, and prints the resulting record for a human to copy manually into the CRM. It also reveals a specific CRM login address and plaintext credentials, which is a sensitive behavior not reflected in the description. The primary purpose of the code is therefore not automated CRM entry, but manual-assist record formatting plus credential disclosure.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description presents this skill as an end-to-end CRM automation tool that adds records to the Fractal CRM system, including navigation, authentication, field mapping, and submission. The supplied code only implements a local parser for natural language text, extracting a phone number, contact name, region, and leftover basic info from CLI input and outputting JSON. While the parsing behavior is loosely related to the 'intelligent field mapping' portion of the description, the primary declared purpose—actually adding CRM records via system interaction—is not present in this code chunk. Therefore, the code materially under-implements the declared behavior, making the description inaccurate for this supplied code.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The description claims a broad end-to-end CRM automation capability for adding records to Fractal CRM. The actual code is a narrow utility parser that extracts limited fields from text using regex. While this supports the 'intelligent field mapping from natural language input' portion of the description, it does not implement the primary advertised behavior of automating CRM entry, navigation, login, or submission. Therefore the declared description materially overstates what the code chunk actually does.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill embeds plaintext CRM credentials (username and password) directly in documentation and operational steps. Hardcoded credentials are dangerous because they enable unauthorized access if the skill file is exposed, reused broadly, or logged, and they normalize secret handling in an insecure way.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill metadata promises automated CRM navigation, login, and submission, but the implementation instead prints customer data alongside a CRM login URL and plaintext credentials for manual use. This mismatch is dangerous because users or downstream agents may trust the declared capability and unknowingly receive sensitive credentials, increasing the chance of credential leakage and unauthorized CRM access.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
100% confidence
Finding

The script directly discloses hardcoded CRM credentials to whoever runs or inspects it. In the context of a CRM skill, this is especially dangerous because CRM systems commonly contain customer PII, sales data, and internal notes; exposed credentials can lead to unauthorized access, data theft, modification, or account takeover.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The activation description is broad enough that the skill could trigger on routine CRM-related requests without sufficiently clear scoping or confirmation. In a write-capable skill, over-broad invocation increases the chance of unintended record creation or use in contexts the user did not explicitly authorize.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill is designed to submit data into an external CRM but does not clearly warn that it will perform a write operation. Lack of explicit user notice and confirmation can lead to accidental data entry, privacy issues, and operational mistakes in a production business system.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Although the script appears to only generate a standardized CRM record, it also appends a login URL and hardcoded account credentials. Embedding secret access details in user-facing output creates an immediate disclosure channel for sensitive information and can enable unauthorized login if the script is invoked in shared logs, chat transcripts, or multi-user environments.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code explicitly restricts contact and region extraction to Chinese characters and Chinese regional/title suffixes, which imposes a specific language/locale behavior. Under the policy, forcing a specific language without user opt-in or clear documented justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code explicitly restricts contact extraction to Chinese characters and region parsing to Chinese administrative suffixes, which imposes a specific language/locale behavior. The file does not indicate that this is an opt-in China-specific parser or offer any alternative for other locales, so it creates a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

The title, field mapping, examples, and workflow are written entirely in Chinese and assume Chinese-language inputs and labels, but the file does not state that the skill is intentionally limited to a Chinese-language CRM context. Under the policy, imposing a specific language without opt-in or justification is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The script's comments and all user-visible output strings are written exclusively in Chinese. Under the natural-language policy rules, a fixed language without user opt-in or documented regional justification can be a locale policy violation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.