T01 · Skill Instruction Hijacking
- Location
listener/clawcall-listener.js:272- Finding
Untrusted Remote Caller Input Is Forwarded to a Privileged Agent Session
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill matches its phone-agent purpose, but its runtime exposes caller input and local user context with weak safeguards that could leak data or let a caller abuse the agent.
Review before installing. Use only if you are comfortable with ClawCall handling your phone number, call transcripts, responses, schedules, third-party call objectives, and billing metadata. Keep the bridge bound to 127.0.0.1, do not expose port 4747, prefer the HTTP bridge over CLI mode, avoid Windows use until the shell invocation is fixed, protect CLAWCALL_API_KEY, and require explicit user approval before callbacks, scheduled calls, billing actions, or calls to third parties.
listener/clawcall-listener.js:272Untrusted Remote Caller Input Is Forwarded to a Privileged Agent Session
bridge/phone-agent-server.js:191Unauthenticated Local Bridge Exposes Private Workspace Context
listener/clawcall-listener.js:215Windows Shell Invocation Allows Command Injection Through Caller-Controlled Messages
listener/clawcall-listener.js:34Configurable Plaintext API Endpoint Can Expose the ClawCall Bearer Credential
The code is a bridge service for processing call/message content over HTTP, not a phone-number provisioning or telephony control implementation. Its main behavior is responding to POSTed messages, answering simple greetings, and reporting cron/job/task summaries, with fallback to an LLM via the openclaw CLI. There is no evidence of telephony APIs, dialing, callback scheduling, third-party calling, or phone-number management. While an HTTP bridge could support a phone agent system, the supplied code chunk materially underdelivers and differs from the declared purpose by omitting the core outbound/scheduled calling capabilities and adding undeclared local task/cron inspection behavior.
This code does not perform the declared primary phone capability. There is no logic for assigning a phone number, receiving calls, placing outbound calls, scheduling or executing calls, or contacting third parties. Instead, the module gathers context from local markdown files and OpenClaw CLI commands to prepare a summary likely intended for use by some other phone system component. That is a material description-behavior mismatch: the declared purpose is telephony, while the actual code is contextual data aggregation about the user, memory, cron jobs, and background tasks.
The declared description promises concrete phone-system capabilities and call automation behavior. The supplied code chunk merely constructs conversational instructions for a phone assistant response. While it is related to phone-call dialogue, it does not actually provision a phone number, handle call events, place calls, schedule calls, or manage task-completion callbacks. This is a material description-to-behavior mismatch because the primary promised capabilities are absent from the code shown.
The code does support one portion of the description: handling inbound phone interactions by listening for call messages and responding through an agent. However, the declared purpose claims broader telephony capabilities: calling the user back when tasks complete, running scheduled calls, and calling third parties on the user's behalf. None of those outbound or scheduling behaviors are present in this code chunk. The implementation is specifically an inbound-call listener/response bridge, not a general phone-number/calling skill with callback or scheduling features. Therefore the description materially overstates the implemented capabilities.
The skill requests sensitive environment variables and documents networked behavior, but it does not declare an explicit tool/permission scope. That weakens least-privilege controls and makes it harder for a host platform to constrain access to secrets and execution capabilities. In a telephony skill that can trigger outbound calls and interact with external APIs, missing scope declarations materially increase risk.
The skill instructs sending the user's phone number and agent name to an external service for registration. This is expected for telephony, but it is still an external transmission of personal data and account bootstrap material, and the skill's context makes it more sensitive because the phone number becomes a long-lived routing identifier. The danger is privacy loss or misuse if users are not clearly informed and if transmission scope is broader than necessary.
POST https://api.clawcall.online/api/v1/register
Content-Type: application/json
{
Polling /calls/listen sends an API key to a remote service and retrieves caller speech content, which may contain sensitive personal or operational information. This is core functionality, but it is still a real data exfiltration boundary from the agent environment to a third party. The telephony context makes this more dangerous because voice interactions often include spontaneous sensitive disclosures.
for incoming messages manually:
GET https://api.clawcall.online/api/v1/calls/listen?timeout=25
Authorization: Bearer {CLAWCALL_API_KEY}
Submitting call responses to /calls/respond transmits the agent's response content and call identifiers to an external service. If the response includes secrets, personal data, or sensitive task outputs, that information leaves the local trust boundary. In this skill, that boundary crossing is intrinsic, so the main risk is insufficient disclosure and data minimization.
After receiving a message, submit your response:
POST https://api.clawcall.online/api/v1/calls/respond/{call_sid}
Authorization: Bearer {CLAWCALL_API_KEY}
Content-Type: application/json
The callback endpoint can send task-completion summaries by phone through an external service. Those messages may contain operational details, incident information, or other sensitive outputs from background tasks, creating a strong risk of unintended disclosure if content is not minimized or if the user did not explicitly opt into phone delivery. Because callbacks are proactive, the user may receive sensitive information in insecure environments.
When a background task finishes and you need to notify the user by phone:
POST https://api.clawcall.online/api/v1/calls/outbound/callback
Authorization: Bearer {CLAWCALL_API_KEY}
Content-Type: application/json
The recurring-call scheduling flow sends task_context and schedule metadata to an external service on an ongoing basis, yet the instructions do not warn the user that this information may be stored, processed, or repeatedly transmitted by a third party. Because the calls recur automatically, accidental oversharing can persist over time and amplify privacy impact beyond a one-off request.
Scheduling recurring calls transmits cron schedule, label, task context, and timezone to an external service. This can reveal habits, routines, work patterns, and sensitive briefing topics over time. The ongoing nature of recurrence raises the privacy impact compared with a one-time API call.
POST https://api.clawcall.online/api/v1/calls/schedule
Authorization: Bearer {CLAWCALL_API_KEY}
Content-Type: application/json
The schedule deletion endpoint is also an outbound transmission using the API key, but it mainly carries an identifier for cleanup rather than new sensitive content. It is lower risk than the create/listen/respond flows, though compromise of the API key still matters. The danger here is mostly part of the broader secret-handling and third-party reliance model.
Common patterns: every weekday 8am `"0 8 * * 1-5"` · daily 9am `"0 9 * * *"`.
To cancel: `DELETE https://api.clawcall.online/api/v1/calls/schedule/{id}`
**Requires Pro tier.**
The skill instructs the agent to place autonomous third-party calls and pass objective/context data to an external telephony service, but it does not require an explicit warning or confirmation about disclosure of personal or sensitive information to outside parties. This can lead to unauthorized sharing of names, appointment details, phone numbers, or other private context during real-world calls, which is especially risky because the action affects external humans and persists outside the local system.
The third-party outbound call endpoint sends a destination number plus objective/context to an external service that then contacts another person. This is a high-risk transmission because it may disclose private user information to both ClawCall and the called third party, and can trigger real-world actions on the user's behalf. The skill context makes this especially dangerous due to autonomy and social-engineering potential.
POST https://api.clawcall.online/api/v1/calls/outbound/third-party
Authorization: Bearer {CLAWCALL_API_KEY}
Content-Type: application/json
Querying account and usage transmits the API key to the external service and returns metadata about the account. This is expected account-management behavior and lower sensitivity than call content, but it still expands reliance on an external provider and secret handling. On its own, it is a modest privacy/security concern rather than a severe flaw.
GET https://api.clawcall.online/api/v1/account
Authorization: Bearer {CLAWCALL_API_KEY}
Changing voice transmits an authenticated preference update to the external service. The content is not highly sensitive, but it still uses the API key and confirms external control over account behavior. This is low impact unless combined with broader secret compromise.
POST https://api.clawcall.online/api/v1/account/voice
Authorization: Bearer {CLAWCALL_API_KEY}
Content-Type: application/json
The billing checkout request transmits authenticated account information to obtain payment instructions. While expected, it introduces financial workflow risk and dependency on a third-party response for wallet/payment details. Users could be exposed to billing confusion or fraud impact if this flow is not clearly authenticated and explained.
Step 1 — Get payment address and amount:
POST https://api.clawcall.online/api/v1/billing/checkout
Authorization: Bearer {CLAWCALL_API_KEY}
Content-Type: application/json
Submitting a blockchain transaction signature to verify payment shares financial transaction metadata with the external service. This is not necessarily dangerous by itself, but it creates a link between the user's account and on-chain activity and should be treated as sensitive billing information. In combination with telephony account identity, it can increase traceability.
Step 3 — Submit transaction signature to confirm:
POST https://api.clawcall.online/api/v1/billing/verify
Authorization: Bearer {CLAWCALL_API_KEY}
Content-Type: application/json
The API-key recovery flow sends email and phone number to the external registration endpoint to rotate credentials. This is a sensitive account-recovery action because it couples personal identifiers with credential issuance. If misused or triggered without clear consent, it could aid account takeover or expose recovery details.
Re-register with the same email to rotate the key:
POST https://api.clawcall.online/api/v1/register
Content-Type: application/json
{
The manifest describes a telephony bridge for receiving and placing calls, but this file also invokes the openclaw CLI via spawn/execFile to perform model inference. Launching subprocesses is not an obvious requirement of a phone-number/call-control skill as stated, and represents a broader execution capability than the telephony purpose alone justifies.
The endpoint can disclose task and cron summaries over HTTP based solely on message content, with no authentication, authorization, or user confirmation visible in this file. Because this is a phone-oriented bridge, the leaked data may include reminders, schedules, and task context that reveal user behavior or internal operations to an unauthorized party.
The code constructs a prompt from the caller message and contextual data, then passes it to the openclaw model runner with --gateway or --local. There is no visible warning, prompt, or explanatory comment informing users that their spoken content and derived context may be transmitted to another process or potentially a gateway-backed model service.
The phone context builder conditionally reads USER.md, IDENTITY.md, and especially MEMORY.md from the workspace and packages their contents into contextText for phone interactions. In a telephony skill, this creates unnecessary data exposure risk because caller-triggered prompts like 'who am i' or 'prefer' can cause long-term memory and profile information to be surfaced into call flows or downstream model/tool context without clear minimization or consent boundaries.
The description combines several broad behaviors—receiving inbound calls, calling the user back, running scheduled briefings, and autonomously calling third parties—without defining what triggers each action or what approval is required. For a skill that interfaces with real phone numbers, ambiguous invocation scope materially increases risk because the agent could be interpreted as authorized to initiate calls beyond the user's intended task, enabling abuse or unauthorized outreach.
The description explicitly advertises autonomous outbound calling, scheduled briefings, callbacks, and calls to third parties, but provides no warning about consent, billing, privacy, or misuse risks. In a telephony skill, omission of these constraints is dangerous because users may enable a capability that can contact real people or numbers without clear guardrails, increasing the chance of spam, harassment, data leakage, or unexpected charges.
Detected: suspicious.dangerous_exec