Back to skill

Security audit

Orderly Api Authentication

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Orderly authentication guide, but its examples include unsafe private-key handling and live trading or asset-moving flows that require review before use.

Review carefully before installing or copying code. Use testnet first, remove any private-key logging, store keys only in a secret manager or protected local store, restrict signing helpers to approved Orderly API origins, use the minimum API key scopes, and treat withdrawal or trading examples as real financial actions when pointed at mainnet.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:267
Finding

Generated Ed25519 Private Key Disclosed Through Standard Output

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:759
Finding

Authentication Helper Sends Signed Credentials to Arbitrary Caller-Supplied Origins

Content
View full analysis
{ const timestamp = Date.now(); const encoder = new TextEncoder(); const url = new URL(input); let message = `${String(timestamp)}${init?.method ?? 'GET'}${url.pathname}${url.search}`; if (init?.body) { message += init.body; } const orderlySignature = await signAsync(encoder.encode(message), privateKey); return fetch(input, { headers: { 'Content-Type': init?.method !== 'GET' && init?.method !== 'DELETE' ? 'application/json' : 'application/x-www-form-urlencoded', 'orderly-timestamp': String(timestamp), 'orderly-account-id': orderlyAccountId, 'orderly-key': `ed25519:${encodeBase58(await getPublicKeyAsync(privateKey))}`, 'orderly-signature': Buffer.from(orderlySignature).toString('base64url'), ...(init?.headers ?? {}), }, ...(init ?? {}), }); } ``` ### Technical Analysis The helper accepts an unrestricted absolute URL through `input` and sends Orderly authentication headers to that destination without validating its scheme, hostname, or port. The private key itself is used locally and is not transmitted. Base64url encoding is applied only to the Ed25519 signature, as required by the documented protocol. However, the destination receives the account ID, public key, timestamp, and a valid signature for the selected HTTP method, path, query string, and body. Because the signature message does not bind the destination hostname, a signature collected by an attacker-co ...[truncated 1978 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (10)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 80)May include surrounding context.

typescript
// Get supported chains for your broker
const response = await fetch(`https://api.orderly.org/v1/public/chain_info?broker_id=${BROKER_ID}`);

const { data } = await response.json();
// data.chains contains supported chain_ids

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 354)May include surrounding context.

typescript
// Get supported chains for your broker
const response = await fetch(`https://api.orderly.org/v1/public/chain_info?broker_id=${BROKER_ID}`);

const { data } = await response.json();
// data.chains contains supported chain_ids

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 1026)May include surrounding context.

typescript
// Get supported chains for your broker
const response = await fetch(`https://api.orderly.org/v1/public/chain_info?broker_id=${BROKER_ID}`);

const { data } = await response.json();
// data.chains contains supported chain_ids

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 · SKILL.md (reported line 1051)May include surrounding context.

typescript
// Get supported chains for your broker
const response = await fetch(`https://api.orderly.org/v1/public/chain_info?broker_id=${BROKER_ID}`);

const { data } = await response.json();
// data.chains contains supported chain_ids

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · SKILL.md (reported line 211)May include surrounding context.

Send the signed payload to create the Orderly Account ID:

typescript
const registerResponse = await fetch('https://testnet-api.orderly.org/v1/register_account', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · SKILL.md (reported line 462)May include surrounding context.

Send the signed payload to create the Orderly Account ID:

typescript
const registerResponse = await fetch('https://testnet-api.orderly.org/v1/register_account', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · SKILL.md (reported line 317)May include surrounding context.

Register the API key:

typescript
const keyResponse = await fetch('https://testnet-api.orderly.org/v1/orderly_key', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · SKILL.md (reported line 512)May include surrounding context.

Register the API key:

typescript
const keyResponse = await fetch('https://testnet-api.orderly.org/v1/orderly_key', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The withdrawal section provides ready-to-use instructions that initiate a funds-moving operation but does not clearly and explicitly warn the reader that executing the example can move real assets. In an authentication-focused skill, this omission increases the risk of accidental fund transfer, especially because the example includes concrete request construction and signing steps that a user may copy with production credentials.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 · SKILL.md (reported line 1026)May include surrounding context.

md
message: addKeyMessage,
});

const registerResponse = await fetch('https://api.orderly.org/v1/orderly_key', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({