Back to skill

Security audit

informat

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real Informat platform operator skill, but it needs review because it has broad administrative/mutating power and its helper can transmit the agent token over plaintext HTTP.

Install only in a trusted Informat deployment. Require INFORMAT_HOST to use HTTPS, use a least-privilege and revocable agent token, avoid scripts/.env for secrets, and ensure users explicitly approve destructive operations such as deletes, publishing, member/role changes, Git credential saves, script execution, listeners, and scheduled tasks.

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
scripts/call_informat.js:43
Finding

Agent Token and Sensitive API Payloads Can Be Transmitted over Plaintext HTTP

Content
View full analysis

Vulnerability Details

File Location: scripts/call_informat.js:43-48, 851-879, 922-925
Vulnerability Type: Cleartext transmission of credentials and sensitive API data
Risk Level: High

Vulnerable Code

javascript
function post(targetUrl, headers, body, callback) {
  var parsed = new urlMod.URL(targetUrl);
  var mod = parsed.protocol === "https:" ? https : http;
  var req = mod.request(parsed, {
    method: "POST",
    headers: Object.assign({}, headers, { "Content-Length": Buffer.byteLength(body) }),
    timeout: 60000,
  }, function (res) {
javascript
var host = (process.env.INFORMAT_HOST || env.INFORMAT_HOST || "").trim();
if (!host) { console.error("Missing INFORMAT_HOST"); process.exit(1); }
var agentToken = (process.env.INFORMAT_AGENT_TOKEN || env.INFORMAT_AGENT_TOKEN || "").trim();
if (!agentToken) { console.error("Missing INFORMAT_AGENT_TOKEN"); process.exit(1); }
if (host.charAt(host.length - 1) !== "/") host += "/";

// Build API path
var apiPath;
if (methodName.startsWith("_company_")) {
  apiPath = "web0/aiagent/company_agent";
} else if (methodName.startsWith("_wb_")) {
  apiPath = "web0/aiagent/wb_agent";
} else if (appId) {
  apiPath = "web0/aiagent/app_agent/" + appId;
} else {
  apiPath = "web0/aiagent/common_agent";
}

var url = host + apiPath;
var body = JSON.stringify({
  jsonrpc: "2.0", id: 1,
  params: {
    name: methodName,
    arguments: methodArgs,
    threadId: informatAgentThreadId || null,
  },
});
javascript
postWithRetry(url, {
  "Content-Type": "application/json",
  "X-INFORMAT-AGENT-TOKEN": agentToken,
}, body, function (err, text) {

Technical Analysis

The client accepts INFORMAT_HOST without enforcing HTTPS. The transport implementation selects Node.js's plaintext http module whenever the configured URL does not use the https: protocol:

javascript
var mod = parsed.protocol === "https:" ? https : http;

Consequently, configuring INFORMAT_HOST as an http:// URL ca ...[truncated 2809 chars]

Remediation
View remediation

Remediation Suggestions

  1. Enforce HTTPS before constructing or sending any request

    javascript
    const parsedHost = new URL(host);
    if (parsedHost.protocol !== "https:") {
      throw new Error("INFORMAT_HOST must use HTTPS");
    }
    
  2. Reject unsupported or ambiguous URL forms

    • Permit only https:.
    • Reject URLs containing embedded credentials.
    • Normalize the host with URL rather than string concatenation.
    • Reject fragments and unexpected paths if the deployment expects an origin only.
  3. Restrict credential destinations

    • Maintain an allowlist of approved Informat domains or origins.
    • Compare the final request origin against the configured approved origin before attaching X-INFORMAT-AGENT-TOKEN.
    • Do not forward credentials across redirects.
  4. Remove or harden .env credential fallback

    • Prefer runtime secret injection from a managed secret store.
    • If .env support is required for development, require an explicit development flag.
    • Verify restrictive file permissions and reject files writable by untrusted users.
    • Never rely on .gitignore as a credential-protection control.
  5. Use least-privilege tokens

    • Separate team, workbench, common, and application-operation credentials where possible.
    • Limit each token to the specific methods and applications required.
    • Use short-lived, revocable credentials.
  6. Protect network transport

    • Use valid certificate verification without disabling TLS checks.
    • Consider certificate or public-key pinning in managed deployments.
    • Rotate the Agent token immediately if plaintext transmission may already have occurred.
  7. Add automated tests

    • Confirm that http:// hosts are rejected.
    • Confirm that credentials are never attached to unapproved origins.
    • Confirm that malformed or unsupported protocols fail closed before network activity.
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
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Rogue AgentSelf-Modification, Session Persistence
Findings (358)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
`${...}` (automation step values, formula fields, flow conditions, etc.) while `informat.expression.md` has not been read this session. Informat expressions are

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
`${...}` (automation step values, formula fields, flow conditions, etc.) while `informat.expression.md` has not been read this session. Informat expressions are

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
1. cat references/doc/markdown/informat.bpmn.md -> workflow design doc (required; calling _bpmn_* is gated by the doc-read gate)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
1. cat references/doc/markdown/informat.bpmn.md -> workflow design doc (required; calling _bpmn_* is gated by the doc-read gate)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
ard` | Create/edit chart card (query table structure to get field IDs first) | `references/system_save_dashboard_prochart_card.json` MUST READ |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `informat.automatic.md` | Automation Process Documentation |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `informat.listeners.md` | App Listener Documentation |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `informat.script.md` | Script Development Overview |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `informat.table.md` | Data Table Design Documentation |

Context Leakage

High
Category
Data Exfiltration
Confidence
85% confidence
Finding

Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.

Content

Scanner excerpt · references/doc/markdown/informat.automatic.md (reported line 167)May include surrounding context.

md
| Requirement | Wrong Choice | Correct Choice | Reason |
|------|---------|---------|------|
| "**Open** the create-record dialog → Toast after creation" | `OutputDynamicForm` + `InsertRecord` | `OutputRecordCreate` + `OutputToast` | "Open" clearly indicates frontend interaction; `OutputRecordCreate` is a one-stop solution |
| "User clicks button → **Create a** project record → Toast" | Choose any single implementation | First ask the user: "Pop up a form for the user, or silently create with preset fields?" | No "open / pop up" mentioned, ambiguous, must confirm |
| "User fills form → **Start** a leave-of-absence workflow" | `OutputDynamicForm` + `CreateBpmnProcess` | Use `OutputBpmnProcess` directly | The platform already provides a dedicated interactive step for "user starts workflow" |
| "Daily sync external API data into records" | `Http` + `InsertRecord` step | Server-side → `CallScript` (script does request + DB write) | Scheduled tasks are server-side, `Output*` is forbidden; and `Http` / `InsertRecord` are not legal step types |

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The documentation explicitly exposes informat.system.runProcess(args) for arbitrary system command execution from platform scripts, including user-controlled command arrays and examples invoking OS binaries. In a low-code multi-tenant platform, this materially expands the attack surface from application automation to host-level command execution, enabling remote code execution, data exfiltration, lateral movement, or sandbox escape if the runtime is not perfectly isolated.

Content

No source excerpt is available for this finding.

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · references/doc/markdown/script/datasource.md (reported line 18)May include surrounding context.

md
::: tip

- An exception will be thrown if the connection cannot be created
- When `autoCommit` is set to `true`, transactions will be automatically committed when executing update, insert, and delete statements
- After script execution, you need to manually close the created connection

:::

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · references/doc/markdown/script/jdbc.md (reported line 23)May include surrounding context.

md
::: tip

- An exception will be thrown if the connection cannot be created
- When `autoCommit` is set to `true`, transactions will be automatically committed when executing update, insert, and delete statements
- After script execution, you need to manually close the created connection

:::

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · references/doc/markdown/script/excel.md (reported line 74)May include surrounding context.

text

::: tip
If the file exists, saving will overwrite the original file content
:::

| Parameter | Type       | Description |

Missing User Warnings

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The createEntry, deleteEntry, and renameEntry sections document highly sensitive directory administration actions, including user and OU creation, deletion, and movement, but do not clearly warn about destructive or privilege-sensitive outcomes. In LDAP/AD environments, mistakes here can disable business processes, orphan identities, misplace objects, or facilitate unauthorized account lifecycle changes if copied into automation without safeguards.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/doc/markdown/script/storage.md (reported line 249)May include surrounding context.

text

# createFileToken
Create a file access token

```javascript
informat.storage.createFileToken(path, fileName, expireTime)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/doc/markdown/script/storage.md (reported line 263)May include surrounding context.

text

# createFileToken
Create a file access token

```javascript
informat.storage.createFileToken(path, fileName, expireTime)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/doc/markdown/script/storage.md (reported line 284)May include surrounding context.

md
| Parameter | Type   | Description       |
|-----------|--------|-------------------|
| fileToken | String | File access TOKEN |


# createFileDownloadUrl

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/doc/markdown/script/storage.md (reported line 296)May include surrounding context.

md
| Parameter | Type   | Description       |
|-----------|--------|-------------------|
| fileToken | String | File access TOKEN |


# createFileDownloadUrl

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

This documentation exposes a system-global API that can spawn arbitrary OS processes via caller-controlled command arrays. In the context of an agent skill for operating the Informat platform, this creates a direct host-execution primitive that can be repurposed for remote code execution, data exfiltration, lateral movement, or destructive system changes if surfaced to untrusted workflows or prompts.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

runNodeJS allows execution of script files with attacker-influenced command-line arguments, stdin, and environment variables, which is effectively a programmable code-execution capability on the host. In this skill context, that is more dangerous than normal documentation because it gives platform operators or agent integrations a convenient path to execute arbitrary logic outside normal application boundaries.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

This interface documents permanent deletion capability without any warning, confirmation flow, or safeguard fields, which is dangerous for agent-driven use. Because this skill is for the Informat platform and covers automations, deleting an automation group could disable business processes, schedules, listeners, or related logic, causing operational disruption and potentially broad loss of automation state.

Content

No source excerpt is available for this finding.

Context Leakage

High
Category
Data Exfiltration
Confidence
85% confidence
Finding

Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.

Content

Scanner excerpt · references/system_automatic_save_define.json (reported line 336)May include surrounding context.

json
},
								"titleVar": {
									"type": "string",
									"description": "Upload dialog title expression."
								},
								"dialogTopVar": {
									"type": "string",

Context Leakage

High
Category
Data Exfiltration
Confidence
85% confidence
Finding

Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.

Content

Scanner excerpt · references/system_automatic_save_define.json (reported line 2081)May include surrounding context.

json
},
								"titleVar": {
									"type": "string",
									"description": "Upload dialog title expression."
								},
								"dialogTopVar": {
									"type": "string",

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The function explicitly exposes arbitrary JavaScript execution from a string, which is substantially broader than the stated purpose of operating within the Informat platform. Even with the note that Informat APIs cannot be used directly, generic code execution can still enable unsafe computation, sandbox escape attempts, denial of service, or abuse through any surrounding privileges or connected data paths.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/doc/markdown/script/app.md:370

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/doc/markdown/script/codec.md:218

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/doc/markdown/script/system.md:361