Back to skill

Security audit

Ringg Voice Agent

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Ringg voice-call integration, but it can initiate real phone calls and campaigns and expose webhook-driven agent actions without enough confirmation, consent, or webhook security guidance.

Review before installing. Use this only with a Ringg workspace you control, require explicit approval before every outbound call or campaign launch, verify recipient consent and legal compliance, minimize dynamic variables and contact fields, protect the API key, and do not expose webhook endpoints publicly unless you enforce signed webhook verification, replay protection, strict event allowlists, and safe handling of transcripts and summaries.

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:150
Finding
Unauthenticated Public Webhook Can Trigger Agent Actions## Vulnerability Details **File Location**: `SKILL.md:150-169` **Vulnerability Type**: Missing webhook authentication and replay protection **Risk Level**: High ### Vulnerable Code ```markdown ## Webhook Integration (Inbound Events) Ringg AI can push real-time call events to OpenClaw via webhooks. To receive call status updates, transcripts, and dispositions: 1. Expose OpenClaw's webhook endpoint: ```bash ngrok http 18789 ``` 2. Configure the webhook URL in Ringg AI dashboard or via API: ```bash curl -X POST "https://api.ringg.ai/v1/webhooks" \ -H "Authorization: Bearer $RINGG_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-ngrok-url.ngrok.io/webhook/ringg", "events": ["call.completed", "call.failed", "call.transcript_ready"] }' ``` 3. OpenClaw will receive POST payloads with call events that can trigger agent actions. ``` The related API reference at `references/api_reference.md:248-258` describes the signing secret as optional: ```markdown ### Register Webhook ``` POST /webhooks ``` **Body:** ```json { "url": "https://your-endpoint.example.com/webhook/ringg", "events": ["call.completed", "call.failed", "call.transcript_ready", "campaign.completed"], "secret": "optional-signing-secret" } ``` ``` ### Technical Analysis The documented procedure exposes OpenClaw's local port through a public ngrok tunnel and states that received webhook events can trigger agent actions. However, the registration example omits a signing secret, while the API reference characterizes that secret as optional. The documentation also provides no requirement to verify a cryptographic signature over the raw request body before processing an event. No timestamp validation, event-ID deduplication, replay prevention, source authentication, strict payload schema, or identifier allowlisting is specified. Consequently, possession or discovery of the public endpoint URL may be sufficient to submit f ...[truncated 1592 chars]
Remediation
## Remediation Suggestions 1. Require a cryptographically random webhook secret during registration; do not describe signing as optional. 2. Verify the provider's signature over the exact raw HTTP request body before parsing or processing the payload. 3. Use constant-time signature comparison and reject missing, malformed, or invalid signatures. 4. Require a signed timestamp and enforce a narrow acceptance window to prevent stale-event replay. 5. Persist processed event IDs and reject duplicates to provide idempotency and replay protection. 6. Apply a strict schema to every event and allowlist accepted event types, call IDs, assistant IDs, and campaign IDs where feasible. 7. Treat summaries, transcripts, dispositions, and other webhook fields as untrusted data rather than agent instructions. 8. Ensure webhook events cannot directly invoke privileged tools without explicit authorization and policy checks. 9. Rate-limit the endpoint, cap request sizes, log rejected requests, and alert on repeated authentication failures. 10. Use temporary tunnel exposure only when necessary and add network-level access restrictions where supported. 11. Update the documented registration example to include a secret and provide corresponding receiver-side verification instructions.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (16)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
### Delete Webhook
```
DELETE /webhooks/{webhook_id}
```

---
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).

Vague Triggers

Medium
Confidence
89% confidence
Finding
The trigger phrases are broad enough to activate on generic requests involving calls or Ringg, which can route users into a skill capable of initiating real-world phone actions. In this context, unintended activation is more dangerous because the skill supports outbound calling and campaign launches that can contact external numbers and expose call data.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill documents actions that place outbound calls and launch campaigns to real phone numbers without requiring an explicit safety warning or user confirmation. That creates a risk of accidental or unauthorized contact, spam-like behavior, charges, and disclosure of personal data to third parties through dynamic variables and call content.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Basic outbound call
curl -X POST "https://api.ringg.ai/v1/calls/outbound" \
  -H "Authorization: Bearer $RINGG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
87% confidence
Finding
This endpoint sends outbound call instructions, phone numbers, and dynamic variables to an external service. External transmission is expected for the integration, but it is still security-relevant because it involves third-party disclosure of contact data and can trigger real-world actions with cost and privacy consequences.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Basic outbound call
curl -X POST "https://api.ringg.ai/v1/calls/outbound" \
  -H "Authorization: Bearer $RINGG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
87% confidence
Finding
This endpoint sends outbound call instructions, phone numbers, and dynamic variables to an external service. External transmission is expected for the integration, but it is still security-relevant because it involves third-party disclosure of contact data and can trigger real-world actions with cost and privacy consequences.

External Transmission

Medium
Category
Data Exfiltration
Content
Trigger a batch calling campaign for multiple contacts.

```bash
curl -X POST "https://api.ringg.ai/v1/campaigns/launch" \
  -H "Authorization: Bearer $RINGG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
90% confidence
Finding
Launching a campaign transmits batches of contact records to an external provider and can initiate multiple real-world phone calls. In this skill context, that increases the chance of accidental mass outreach, privacy exposure, regulatory issues, and financial cost if misused or triggered unintentionally.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# Recent call history
curl -X GET "https://api.ringg.ai/v1/calls/history?limit=20" \
  -H "Authorization: Bearer $RINGG_API_KEY"

# Analytics for a time range
Confidence
81% confidence
Finding
Retrieving call history sends a request to a third-party service and returns potentially sensitive metadata about recent calls. In a voice-agent context, this may reveal who was contacted, timing, outcomes, and summaries, so users should be warned that operational and personal data is being accessed from an external platform.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RINGG_API_KEY"

# Analytics for a time range
curl -X GET "https://api.ringg.ai/v1/analytics?from=2026-02-01&to=2026-02-06" \
  -H "Authorization: Bearer $RINGG_API_KEY"
```
Confidence
80% confidence
Finding
Analytics queries to an external provider can expose aggregated operational data and potentially sensitive patterns about call activity. While expected for the integration, the skill does not mention data sensitivity or access restrictions, which makes this a valid security concern in environments handling customer communications.

External Transmission

Medium
Category
Data Exfiltration
Content
### 6. Get Call Transcript

```bash
curl -X GET "https://api.ringg.ai/v1/calls/{call_id}/transcript" \
  -H "Authorization: Bearer $RINGG_API_KEY"
```
Confidence
92% confidence
Finding
Fetching transcripts from a third-party service involves highly sensitive conversational content that may include personal, financial, or business information. The absence of any warning, consent, or access-control guidance makes this particularly risky compared with generic API reads.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The webhook guidance encourages exposing an endpoint via ngrok and receiving transcripts, dispositions, and call events, but does not warn that sensitive call data is being transmitted to an externally reachable endpoint. Without explicit mention of authentication, signature verification, and transport/data-handling safeguards, this can lead to data leakage or spoofed event ingestion.

External Transmission

Medium
Category
Data Exfiltration
Content
2. Configure the webhook URL in Ringg AI dashboard or via API:
   ```bash
   curl -X POST "https://api.ringg.ai/v1/webhooks" \
     -H "Authorization: Bearer $RINGG_API_KEY" \
     -H "Content-Type: application/json" \
     -d '{
Confidence
94% confidence
Finding
Registering a webhook causes Ringg to send call events and transcript-related data to an externally exposed endpoint, potentially through a temporary public tunnel. This is dangerous without guidance on event authentication, endpoint hardening, and sensitive-data handling because it expands the attack surface and risks data exposure or spoofed callbacks.

External Transmission

Medium
Category
Data Exfiltration
Content
# Ringg AI API Reference

Base URL: `https://api.ringg.ai/v1`

Authentication: Bearer token via `Authorization: Bearer <RINGG_API_KEY>` header.
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# Ringg AI API Reference

Base URL: `https://api.ringg.ai/v1`

Authentication: Bearer token via `Authorization: Bearer <RINGG_API_KEY>` header.
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
# Ringg AI API Reference

Base URL: `https://api.ringg.ai/v1`

Authentication: Bearer token via `Authorization: Bearer <RINGG_API_KEY>` header.
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The reference documents outbound calling and campaign launch capabilities that can send phone numbers, names, emails, and custom fields to an external voice platform, but it provides no privacy, consent, or data-minimization guidance. In a calling/telephony skill, this omission increases the risk of unauthorized outreach, regulatory noncompliance, and misuse of personal data at scale.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The transcript and webhook sections describe exporting conversation content, contact data, summaries, and call metadata to external endpoints without warning about sensitive-data exposure or webhook trust boundaries. Because transcripts may contain PII or confidential business information, sending them to arbitrary webhook URLs can create significant leakage and retention risks.

Static analysis

No suspicious patterns detected.