Back to skill

Security audit

Saas Gateway

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent SaaS gateway helper, but it exposes broad proxy and persistent MCP capabilities that can use connected-account privileges with too little scoping guidance.

Install only if you trust AISA with the connected SaaS accounts and will use it for high-impact gateway administration. Before using proxy execution or MCP creation, require exact account, destination, method, resource ID, and tool allowlist confirmation; prefer explicit allowed_tools lists and avoid entering production secrets directly into prompts or shared logs.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
references/execute_tools.md:161
Finding

Unrestricted Authenticated HTTP Proxy Can Bypass Tool-Level Security Boundaries

Content
View full analysis

Vulnerability Details

File Location: references/execute_tools.md, lines 161–186 and 362–385
Vulnerability Type: Unrestricted authenticated HTTP proxying
Risk Level: High

Vulnerable Code

markdown
## POST /tools/execute/proxy

Bypass the gateway's tool execution layer and send a raw HTTP request to a third-party API using the connected account's credentials.

```bash
curl.exe -X POST "https://api.aisa.one/apis/v1/composio/tools/execute/proxy" \
  -H "Authorization: Bearer $env:AISA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "connected_account_id": "ca_xxxxxxxx",
    "endpoint": "https://api.github.com/user",
    "method": "GET"
  }'

Request body fields:

FieldTypeRequiredDescription
endpointstringYesTarget API URL (absolute URL, or path relative to the connected account base URL)
methodstringYesHTTP method: GET, POST, PUT, PATCH, DELETE
connected_account_idstringRecommendedConnected account ID for authentication. Uses project default if omitted
bodyanyNoRequest body (for POST/PUT/PATCH)
parametersarrayNoAdditional HTTP headers or query parameters
binary_bodyobjectNoBinary upload body. URL form: {"url": "https://...", "content_type": "..."}; base64 form: {"base64": "..."}
custom_connection_dataobjectNoCustom connection data, overrides the connected account's credentials
text

The same capability is also exposed inside Tool Router sessions:

```markdown
### POST /tool_router/session/{session_id}/proxy_execute — Proxy request within session

```bash
curl.exe -X POST "https://api.aisa.one/apis/v1/composio/tool_router/session/{session_id}/proxy_execute" \
  -H "Authorization: Bearer $env:AISA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "toolkit_slug": "github",
    "endpoint": "https://api.github.com/user",
    "met
...[truncated 3372 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove arbitrary proxy execution from the default Skill workflow and prefer schema-bound tools.
  2. Require an explicit connected account; never silently use a project default.
  3. Restrict absolute destinations to a maintained allowlist of official HTTPS origins associated with the selected toolkit.
  4. Resolve and validate hostnames before requests, rejecting loopback, private, link-local, multicast, and cloud metadata addresses.
  5. Revalidate every redirect and prohibit redirects to a different origin.
  6. Reject user-supplied Authorization, Cookie, proxy, forwarding, and other credential-bearing headers.
  7. Disable custom_connection_data and remote-URL binary uploads unless the user explicitly requests them and understands the exposure.
  8. Require a dedicated confirmation immediately before every proxy request. The confirmation should display the account, destination origin, method, path, headers, and a redacted body summary.
  9. Apply separate read and write permissions. Deny POST, PUT, PATCH, and DELETE unless expressly authorized for the specific operation.
  10. Add request-size limits, audit logging, secret redaction, rate limits, and anomaly detection.
  11. Document all gateway-side destination controls so users can assess whether SSRF and cross-origin credential forwarding are prevented.

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
references/mcp_projects_usage.md:34
Finding

MCP Server Creation Defaults to All Available Tools

Content
View full analysis

Vulnerability Details

File Location: references/mcp_projects_usage.md, lines 34–52
Vulnerability Type: Excessive default MCP permissions
Risk Level: Medium

Vulnerable Code

markdown
### POST /mcp/servers — Create MCP server (single auth config)

Creates an MCP server bound to one or more existing auth configs. **Confirm with the user before executing.**

```bash
curl.exe -X POST "https://api.aisa.one/apis/v1/composio/mcp/servers" \
  -H "Authorization: Bearer $env:AISA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My GitHub MCP",
    "auth_config_ids": ["ac_xxxxxxxx"]
  }'

Request body fields:

FieldTypeRequiredDescription
namestringYesMCP server name (4–30 characters; letters, numbers, spaces, and hyphens allowed)
auth_config_idsstring[]YesList of existing auth config IDs (ac_ prefix). The MCP server uses these auth configs
allowed_toolsstring[]NoWhitelist of tool slugs to enable. If omitted, all available tools are allowed
managed_auth_via_composiobooleanNoWhether the AISA gateway manages authentication (default false)
no_auth_appsstring[]NoApps that should be enabled but require no authentication (NO_AUTH type apps)
text

### Technical Analysis

The example omits `allowed_tools`, while the documented default grants all available tools associated with the selected authentication configurations. Consequently, a user intending to expose one or a few operations may unintentionally create an MCP server with every available read and write operation.

Although server creation requires confirmation, the confirmation guidance does not require the Agent to enumerate the resulting tools or distinguish destructive operations. A generic confirmation therefore does not adequately communicate the authorization scope.

This violates least privilege because the declared task 
...[truncated 1445 chars]
Remediation
View remediation

Remediation Suggestions

  1. Make allowed_tools mandatory and require a non-empty explicit allowlist.
  2. Change the safe default from “all tools” to “no tools.”
  3. Update every creation example to include only the tools needed for the stated task.
  4. Derive the allowlist from the user's specific request rather than the toolkit's full catalog.
  5. Before creation, display the exact authentication configurations, applications, accounts, and tool slugs that will be exposed.
  6. Identify read, write, and destructive tools separately and require additional confirmation for destructive capabilities.
  7. Require authenticated MCP connections and use short-lived, revocable credentials where supported.
  8. Periodically review active MCP servers and remove stale tools, instances, and account associations.
  9. Provide a restricted preset for common read-only use cases.
  10. Ensure server updates cannot silently broaden the allowlist without renewed user confirmation.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (146)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Details: `references/execute_tools.md`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Details: `references/execute_tools.md`

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Details: `references/execute_tools.md`

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

This skill exposes high-impact management operations for MCP servers, including create, update, and delete, and later relies mainly on procedural text telling the agent to confirm with the user. In an adversarial or ambiguous prompt scenario, an agent could be induced to pass attacker-chosen IDs into destructive endpoints, causing unauthorized deletion, reconfiguration, or creation of privileged MCP connectivity that expands access to connected SaaS tools.

Content

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

md
3. Create a custom MCP server with multiple apps: **Confirm with user**, then `POST /apis/v1/composio/mcp/servers/custom` — body: `{"apps": [{"slug": "github"}, {"slug": "slack"}], "name": "My Multi-App MCP"}`
4. Generate an MCP URL: `POST /apis/v1/composio/mcp/servers/generate` — produces a connection URL for the agent
5. Manage instances: `GET /apis/v1/composio/mcp/servers/{serverId}/instances`, `POST ...` to create, `DELETE .../instances/{instanceId}` to remove
6. Get/update/delete a server: `GET/PATCH/DELETE /apis/v1/composio/mcp/{id}`

Details: `references/endpoint_catalog.md` (group: `mcp`)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
82% confidence
Finding

Project deletion and API-key regeneration are highly sensitive operations because they can destroy tenant resources or rotate credentials that gate broader access. The skill provides direct pathways to these endpoints with only natural-language confirmation requirements, so prompt injection, user confusion, or parameter substitution could lead to destructive actions against the wrong project if IDs are not strongly verified.

Content

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

md
**Projects:**
- List projects: `GET /apis/v1/composio/org/owner/project/list`
- Create project: **Confirm with user**, then `POST /apis/v1/composio/org/owner/project/new`
- Get/update/delete: `GET/DELETE /apis/v1/composio/org/owner/project/{nano_id}`
- Regenerate API key: **Confirm with user**, then `POST /apis/v1/composio/org/owner/project/{nano_id}/regenerate_api_key`

**Usage statistics:**

MCP Config Access

High
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

Content

Scanner excerpt · references/endpoint_catalog.md (reported line 68)May include surrounding context.

MCP Servers

GET /mcp/servers — List MCP servers

bash
curl "https://api.aisa.one/apis/v1/composio/mcp/servers?limit=20" \

MCP Config Access

High
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

Content

Scanner excerpt · references/endpoint_catalog.md (reported line 69)May include surrounding context.

MCP Servers

GET /mcp/servers — List MCP servers

bash
curl "https://api.aisa.one/apis/v1/composio/mcp/servers?limit=20" \

MCP Config Access

High
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill accesses MCP server configuration files (mcp.json). MCP configs contain server URLs, authentication tokens, and tool definitions — reading them allows the skill to discover and potentially abuse other tool integrations.

Content

Scanner excerpt · references/mcp_projects_usage.md (reported line 12)May include surrounding context.

MCP Servers

GET /mcp/servers — List MCP servers

bash
curl "https://api.aisa.one/apis/v1/composio/mcp/servers?limit=20" \

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · references/mcp_projects_usage.md (reported line 146)May include surrounding context.

md
| `allowed_tools` | string[] | No | Updated list of enabled tool slugs |
| `managed_auth_via_composio` | boolean | No | Whether the AISA gateway manages authentication |

### DELETE /mcp/{id} — Delete MCP server

**Confirm before executing** — deletion is irreversible.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · references/mcp_projects_usage.md (reported line 244)May include surrounding context.

-H "Authorization: Bearer $AISA_API_KEY"

text

### DELETE /org/owner/project/{nano_id} — Delete project

**Confirm before executing.**

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
93% confidence
Finding

A documented DELETE endpoint that accepts only a path identifier can be abused if an agent is tricked into supplying the wrong triggerId, leading to unauthorized or unintended deletion of production triggers. In this skill, triggers represent active automations, so parameter misuse can directly disable business workflows and cause data-processing outages.

Content

Scanner excerpt · references/triggers_webhooks.md (reported line 74)May include surrounding context.

Note: Enum values are enable/disable (verbs), not enabled/disabled (adjectives).

DELETE /trigger_instances/manage/{triggerId} — Delete a trigger

bash
curl.exe -X DELETE "https://api.aisa.one/apis/v1/composio/trigger_instances/manage/{triggerId}" \

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
92% confidence
Finding

The webhook endpoint deletion action is vulnerable to parameter abuse because a single supplied nano_id determines which receiver configuration is removed. If an agent is manipulated into using an attacker-chosen or mistaken ID, inbound integrations can be severed, causing loss of webhook processing and service disruption.

Content

Scanner excerpt · references/triggers_webhooks.md (reported line 185)May include surrounding context.

|-------|------|----------|-------------| | data | object | Yes | Key-value pairs matching toolkit setup_fields. Only include fields to update; omitted fields remain unchanged |

DELETE /webhook_endpoints/{nano_id} — Delete

bash
curl.exe -X DELETE "https://api.aisa.one/apis/v1/composio/webhook_endpoints/{nano_id}" \

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
91% confidence
Finding

Deleting a webhook subscription based solely on an ID is susceptible to parameter abuse if an agent is induced to target the wrong subscription. This can silently reroute or stop event delivery, undermining monitoring, automation, or incident response flows that depend on those events.

Content

Scanner excerpt · references/triggers_webhooks.md (reported line 270)May include surrounding context.

| enabled_events | string[] | No | Replacement list of subscribed event types (full replace, not append) | | version | string | No | Webhook payload version. Enum: V1, V2, V3 |

DELETE /webhook_subscriptions/{id} — Delete subscription

bash
curl.exe -X DELETE "https://api.aisa.one/apis/v1/composio/webhook_subscriptions/{id}" \

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
- If still `PENDING` after 2 minutes, tell the user the link may have expired and offer to create a new link
5. On success, save `items[].id` (nanoid) as `connected_account_id` for tool execution

**If an ACTIVE connection already exists:** If `GET connected_accounts` already returns an `ACTIVE` connection for the given `user_id` + `toolkit_slug`, **reuse that `connected_account_id` directly — no re-OAuth needed**. Only create a new link when the user explicitly requests re-authorization (the old link is not automatically removed; ask the user whether to keep it).

Details: `references/connect_account.md`

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
### 4. Triggers and webhooks (read-first)

1. `GET /apis/v1/composio/trigger_instances/active` — list active triggers (read-only, no confirmation needed)
2. `GET /apis/v1/composio/triggers_types` — browse available trigger types
3. **Confirm with user** before any create/update/delete on triggers or webhook subscriptions
4. `GET /apis/v1/composio/webhook_endpoints` — list registered webhook URLs

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 · references/auth_and_session.md (reported line 48)May include surrounding context.

Create auth config

bash
curl -X POST "https://api.aisa.one/apis/v1/composio/auth_configs" \
  -H "Authorization: Bearer $AISA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation explicitly includes auth_config.client_secret as a field to transmit to the remote gateway but provides no warning about secret handling, storage, redaction, or least-privilege use. In a skill focused on OAuth onboarding, this increases the chance that operators paste real production client secrets into logs, transcripts, or untrusted environments, leading to credential exposure.

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 · references/auth_and_session.md (reported line 75)May include surrounding context.

Get auth config by ID

bash
curl "https://api.aisa.one/apis/v1/composio/auth_configs/{nanoid}" \
  -H "Authorization: Bearer $AISA_API_KEY"

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 · references/auth_and_session.md (reported line 108)May include surrounding context.

Enable or disable auth config

bash
curl -X PATCH "https://api.aisa.one/apis/v1/composio/auth_configs/{nanoid}/enabled" \
  -H "Authorization: Bearer $AISA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "enabled": true }'

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 · references/connect_account.md (reported line 55)May include surrounding context.

Confirm with user before calling — creates a production connection.

bash
curl -X POST "https://api.aisa.one/apis/v1/composio/connected_accounts/link" \
  -H "Authorization: Bearer $AISA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation instructs users to submit raw API keys, bearer tokens, and basic-auth credentials directly in request bodies without any accompanying guidance on secure secret handling, redaction, storage, or logging avoidance. In an agent-skill context, this increases the chance that highly sensitive credentials are pasted into prompts, shell history, telemetry, or application logs and then transmitted to the gateway or exposed to operators.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This duplicate finding corresponds to the connected-account creation example that includes direct submission of sensitive credentials to the gateway. The danger is elevated because the skill context encourages users or agents to operationalize third-party secrets through an intermediary service, increasing exposure opportunities.

Content

Scanner excerpt · references/connect_account.md (reported line 91)May include surrounding context.

For non-OAuth toolkits that use API keys.

bash
curl -X POST "https://api.aisa.one/apis/v1/composio/connected_accounts" \
  -H "Authorization: Bearer $AISA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This duplicate finding corresponds to the connected-account creation example that includes direct submission of sensitive credentials to the gateway. The danger is elevated because the skill context encourages users or agents to operationalize third-party secrets through an intermediary service, increasing exposure opportunities.

Content

Scanner excerpt · references/connect_account.md (reported line 91)May include surrounding context.

For non-OAuth toolkits that use API keys.

bash
curl -X POST "https://api.aisa.one/apis/v1/composio/connected_accounts" \
  -H "Authorization: Bearer $AISA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{

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 · references/connect_account.md (reported line 130)May include surrounding context.

Get connected account

bash
curl "https://api.aisa.one/apis/v1/composio/connected_accounts/{nanoid}" \
  -H "Authorization: Bearer $AISA_API_KEY"

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 · references/connect_account.md (reported line 158)May include surrounding context.

Refresh credentials

bash
curl -X POST "https://api.aisa.one/apis/v1/composio/connected_accounts/{nanoid}/refresh" \
  -H "Authorization: Bearer $AISA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Static analysis

No suspicious patterns detected.