Back to skill

Security audit

Acumatica Customization Management

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-built for Acumatica customization management, but it can make high-impact ERP changes and its examples permit sending credentials over plain HTTP.

Review this before installing if it will touch production Acumatica. Use only a trusted HTTPS instance URL, a least-privileged Customizer account, and a protected acumatica.conf file. Treat publish, unpublish, delete, import, and maintenance commands as production-impacting actions and confirm the target tenant and instance manually before running them.

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
acumaticahelper.sh:149
Finding

Cleartext Transport Permitted for Credentials and Authenticated Sessions

Content
View full analysis

Vulnerability Details

File Location: acumaticahelper.sh:20, 149-157; insecure examples also appear in SKILL.md:24-26 and README.md:27-30
Vulnerability Type: Cleartext transmission of sensitive information
Risk Level: High

Vulnerable Code

bash
# Configuration — stored in acumatica.conf (same directory as this script):
#   ACUMATICA_URL=http://host/instance
#   ACUMATICA_USERNAME=admin
#   ACUMATICA_PASSWORD=secret
bash
response_body=$(curl -s -w "\n%{http_code}" \
    -c "$_COOKIE_FILE" \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d "$payload" \
    "${ACUMATICA_URL}/entity/auth/login")

The documentation reinforces this insecure configuration:

ini
ACUMATICA_URL=http://host/instance
ACUMATICA_USERNAME=admin
ACUMATICA_PASSWORD=secret

Technical Analysis

The script accepts an arbitrary ACUMATICA_URL and does not require the https:// scheme. Its own configuration examples explicitly use http://. During login, the username and password are inserted into a JSON request body and transmitted to ${ACUMATICA_URL}/entity/auth/login. All subsequent authenticated API requests send the resulting session cookie to the same origin.

When HTTP is used, neither the credentials nor the session cookie receive transport confidentiality or server authentication. A network-positioned attacker can observe the login request, steal the cookie, modify API responses, or tamper with authenticated requests. Quoting shell variables and using JSON encoding do not mitigate transport-layer interception.

Attack Path

  1. An administrator follows the provided example and configures ACUMATICA_URL with an http:// URL.
  2. The administrator invokes any command, causing _login to send the configured username and password over cleartext HTTP.
  3. An attacker positioned on the same network, an upstream gateway, or another traffic-observation point captures the credentials or sess ...[truncated 820 chars]
Remediation
View remediation

Remediation Suggestions

  1. Require ACUMATICA_URL to begin with https:// and reject cleartext HTTP before authentication:
bash
case "$ACUMATICA_URL" in
    https://*) ;;
    *)
        echo "Error: ACUMATICA_URL must use HTTPS." >&2
        return 1
        ;;
esac
  1. If HTTP is indispensable for isolated local development, require an explicit opt-in such as ALLOW_INSECURE_HTTP=true, restrict it to loopback addresses where practical, and display a prominent warning. It should never be the default.
  2. Replace every http:// configuration example in acumaticahelper.sh, README.md, and SKILL.md with https://.
  3. Keep curl certificate verification enabled. Do not add -k or --insecure; configure the correct private certificate authority using --cacert when an internal CA is used.
  4. Use a dedicated, least-privileged Acumatica account restricted to only the necessary instance and operations.
  5. Protect acumatica.conf with owner-only permissions, avoid committing it to source control, and rotate credentials that may previously have traversed an untrusted HTTP connection.
  6. Consider enforcing secure-cookie attributes and short session lifetimes on the Acumatica server as defense in depth.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (18)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The markdown lists commands such as publish, unpublish [Current|All], delete, and maintenance mode toggles that can alter live ERP customization state or availability, but it does not include an explicit warning about potential service disruption, irreversible changes, or the need to verify the target environment first. For markdown files, safety-relevant behavior that can affect user data or system integrity should be clearly disclosed.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · README.md (reported line 106)May include surrounding context.

restrict file permissions:

bash
chmod 600 acumatica.conf

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill exposes shell-based operational capabilities but does not declare any explicit tool scope or allowed-tools boundary. In an agent environment, this can enable unintended execution of sensitive commands against production Acumatica instances, especially because the skill includes authentication, publish/unpublish, delete, import, and maintenance-mode actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger guidance is overly broad because it activates on generic terms like "publish," "unpublish," and "acumaticahelper," which may appear in unrelated contexts. This increases the chance the agent invokes a high-impact shell skill unnecessarily, potentially leading to unintended access to credentials or execution of destructive ERP customization lifecycle actions.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
98% confidence
Finding

This login request transmits credentials to a configurable ACUMATICA_URL, and the documented configuration example explicitly permits plain HTTP. If the URL uses HTTP or points to an attacker-controlled host, credentials and session material can be exposed or redirected, making this more dangerous in a reusable agent skill context.

Content

Scanner excerpt · acumaticahelper.sh (reported line 154)May include surrounding context.

sh
'{name: $name, password: $password}')

    local response_body http_code
    response_body=$(curl -s -w "\n%{http_code}" \
        -c "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 216)May include surrounding context.

sh
echo "Querying published customization projects on ${ACUMATICA_URL}..."

    local response
    response=$(curl -s \
        -b "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 282)May include surrounding context.

sh
echo "Querying published customization projects on ${ACUMATICA_URL}..."

    local response
    response=$(curl -s \
        -b "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 426)May include surrounding context.

sh
echo "Querying published customization projects on ${ACUMATICA_URL}..."

    local response
    response=$(curl -s \
        -b "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 476)May include surrounding context.

sh
echo "Querying published customization projects on ${ACUMATICA_URL}..."

    local response
    response=$(curl -s \
        -b "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 501)May include surrounding context.

sh
echo "Querying published customization projects on ${ACUMATICA_URL}..."

    local response
    response=$(curl -s \
        -b "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 550)May include surrounding context.

sh
echo "Querying published customization projects on ${ACUMATICA_URL}..."

    local response
    response=$(curl -s \
        -b "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 594)May include surrounding context.

sh
echo "Querying published customization projects on ${ACUMATICA_URL}..."

    local response
    response=$(curl -s \
        -b "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 633)May include surrounding context.

sh
echo "Querying published customization projects on ${ACUMATICA_URL}..."

    local response
    response=$(curl -s \
        -b "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The import operation base64-encodes and transmits the entire customization ZIP to a configurable remote endpoint. In an agent skill, this can exfiltrate proprietary source/customization contents if ACUMATICA_URL is misconfigured, maliciously supplied, or uses insecure transport.

Content

Scanner excerpt · acumaticahelper.sh (reported line 382)May include surrounding context.

sh
echo "Importing '$project_name'..."

    local response
    response=$(curl -s \
        -b "$_COOKIE_FILE" \
        -X POST \
        -H "Content-Type: application/json" \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The unpublish command performs a destructive tenant-wide operation immediately, with an option to target all tenants, and there is no confirmation, dry-run, or explicit force flag. In an automation skill that can be triggered by natural-language requests, this materially increases the risk of accidental service-impacting changes from operator error or prompt ambiguity.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The delete command irreversibly removes customization project data without any confirmation gate. In a tool designed to automate ERP customization lifecycle actions, this creates a realistic risk of accidental destructive changes, especially when invoked through an agent or script.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 661)May include surrounding context.

sh
echo "  Request : PUT $url"

    local response_body http_code
    response_body=$(curl -s -w "\n%{http_code}" \
        -b "$_COOKIE_FILE" \
        -X PUT \
        -H "Content-Type: application/json" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · acumaticahelper.sh (reported line 712)May include surrounding context.

sh
echo "  Request : PUT $url"

    local response_body http_code
    response_body=$(curl -s -w "\n%{http_code}" \
        -b "$_COOKIE_FILE" \
        -X PUT \
        -H "Content-Type: application/json" \

Static analysis

No suspicious patterns detected.