Back to skill

Security audit

Phone Call

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it claims, but it uses macOS Accessibility automation to place calls and auto-click broad system dialogs, which is powerful enough to warrant careful review.

Install only if you are comfortable granting the OpenClaw runner macOS Accessibility/Automation control and letting it initiate real calls. Prefer using --no-confirm or another explicit human approval workflow for live calls, verify the exact phone number before each call, and avoid running it while unrelated system dialogs are open.

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

Warning
Location
scripts/call.sh:104
Finding

Overly Broad UI Automation Can Confirm Unrelated System Dialogs

Content
View full analysis

Vulnerability Details

File Location: scripts/call.sh, lines 104–127
Vulnerability Type: Unsafe accessibility-based UI automation
Risk Level: Medium

Vulnerable Code

applescript
set buttonNames to {"Call", "Anrufen", "Anruf", "Audio", "FaceTime Audio", "Fortfahren", "Continue", "OK", "Wählen", "Dial"}
set candidateProcesses to {"Phone", "Telefon", "FaceTime", "CoreServicesUIAgent", "UserNotificationCenter"}

repeat while ((current date) < deadline and clicked is false)
  delay 0.25
  tell application "System Events"
    repeat with procName in candidateProcesses
      if exists process (procName as text) then
        tell process (procName as text)
          try
            repeat with win in windows
              if my clickMatchingButton(win, buttonNames) then
                set clicked to true
                exit repeat
              end if
            end repeat
          end try
        end tell
      end if
      if clicked then exit repeat
    end repeat
  end tell
end repeat

The recursively invoked matching routine clicks any button whose accessibility name or description exactly matches one of the listed labels:

applescript
repeat with btnName in buttonNames
  if n is (btnName as text) or d is (btnName as text) then
    click container
    return true
  end if
end repeat

Technical Analysis

The script searches every window of several processes and clicks broadly named buttons such as OK, Continue, and Fortfahren. Its targets include CoreServicesUIAgent and UserNotificationCenter, which can display dialogs unrelated to the telephone call.

The script does not verify that a candidate window:

  • Was created as a consequence of the current call request.
  • Contains the normalized destination telephone number.
  • Has call-specific text or accessibility identifiers.
  • Belongs exclusively to Phone or FaceTime.
  • Is the expected confirmation dialog rather than an unrelated notification or permission prompt ...[truncated 1759 chars]
Remediation
View remediation

Remediation Suggestions

  1. Restrict automation to the specific Phone or FaceTime process expected for the selected URL scheme. Do not scan CoreServicesUIAgent or UserNotificationCenter unless a tightly validated, unavoidable workflow requires it.
  2. Remove generic labels such as OK, Continue, and Fortfahren. Match only call-specific controls such as Call or Dial.
  3. Validate the complete dialog context before clicking:
    • Require call-specific window text.
    • Require the normalized destination telephone number to appear.
    • Check stable accessibility roles and identifiers.
    • Confirm the expected application bundle identifier and frontmost window.
  4. Record the preexisting windows before opening the call URL and only inspect a newly created, expected dialog afterward.
  5. Prefer explicit user confirmation instead of automatic clicking where macOS does not provide a narrowly scoped calling API.
  6. Fail safely when no verified call dialog is found. Do not treat arbitrary matching UI as sufficient evidence that confirmation is appropriate.
  7. Add automated tests using mock accessibility trees containing unrelated OK and Continue buttons to ensure they are never clicked.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (33)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The documented behavior goes beyond a simple 'make phone calls' skill: it requires Accessibility/Automation privileges, uses UI scripting to click call confirmation dialogs, and supports agent-generated speech into a live call. That combination materially increases the skill's authority and abuse potential, and the incomplete top-level description can mislead users or reviewers about the actual risk surface.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
scripts/call.sh +491234567890

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

--no-confirm is a dangerous parameter because it weakens a safety control on a privileged tool that can initiate real phone calls and inject speech. An attacker or misaligned agent could abuse this flag to convert a user-approved utility into an unsupervised calling mechanism, with privacy, financial, and social-engineering consequences.

Content

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

scripts/call.sh --scheme tel-phoneapp +491234567890 scripts/call.sh --scheme facetime-audio +491234567890 scripts/call.sh --timeout 15 +491234567890 scripts/call.sh --no-confirm +491234567890

text

### Speak During a Call

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% 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 · scripts/call-agent.sh (reported line 32)May include surrounding context.

sh
#!/usr/bin/env bash
# Make phone calls via macOS Phone/FaceTime.
# Usage: call.sh [--dry-run] [--no-confirm] [--scheme tel|tel-phoneapp|facetime-audio] +491234567890
#
# macOS may show a confirmation sheet/dialog after opening phone URLs.
# This script opens the call URL and tries to click a visible confirmation button

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% 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 · scripts/call.sh (reported line 3)May include surrounding context.

sh
#!/usr/bin/env bash
# Make phone calls via macOS Phone/FaceTime.
# Usage: call.sh [--dry-run] [--no-confirm] [--scheme tel|tel-phoneapp|facetime-audio] +491234567890
#
# macOS may show a confirmation sheet/dialog after opening phone URLs.
# This script opens the call URL and tries to click a visible confirmation button

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% 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 · scripts/call.sh (reported line 20)May include surrounding context.

sh
#!/usr/bin/env bash
# Make phone calls via macOS Phone/FaceTime.
# Usage: call.sh [--dry-run] [--no-confirm] [--scheme tel|tel-phoneapp|facetime-audio] +491234567890
#
# macOS may show a confirmation sheet/dialog after opening phone URLs.
# This script opens the call URL and tries to click a visible confirmation button

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% 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 · scripts/call.sh (reported line 29)May include surrounding context.

sh
#!/usr/bin/env bash
# Make phone calls via macOS Phone/FaceTime.
# Usage: call.sh [--dry-run] [--no-confirm] [--scheme tel|tel-phoneapp|facetime-audio] +491234567890
#
# macOS may show a confirmation sheet/dialog after opening phone URLs.
# This script opens the call URL and tries to click a visible confirmation button

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
94% confidence
Finding

The documented --no-confirm option explicitly allows bypassing a confirmation step for a sensitive real-world action: placing a phone call. In an agent setting, this materially raises the risk of autonomous misuse, accidental dialing, or socially engineered call placement without the user's immediate awareness.

Content

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

scripts/call.sh --scheme tel-phoneapp +491234567890 scripts/call.sh --scheme facetime-audio +491234567890 scripts/call.sh --timeout 15 +491234567890 scripts/call.sh --no-confirm +491234567890

text

### Speak During a Call

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
86% confidence
Finding

The skill is designed to proceed with call initiation based on UI state and may continue without an explicit fresh confirmation if no dialog appears. In the context of a telephony skill with TTS, this enables an agent to autonomously place or continue a live outbound communication action, increasing the chance of unauthorized or unintended calls.

Content

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

md
## How It Works

- `scripts/call.sh` validates E.164 numbers, opens a macOS phone URL (`tel:` by default), then searches visible Phone/FaceTime/System dialogs for German/English confirmation buttons (`Anrufen`, `Call`, `Fortfahren`, etc.).
- If no confirmation button appears, it continues successfully because recent macOS versions may start the call directly after the user has granted permission.
- `scripts/speak.sh` plays TTS through the active Mac output device. In a normal MacBook/iPhone Continuity call this can be heard through the call path when the call uses Mac audio.
- `scripts/call-agent.sh` combines both pieces for agents: call first, then speak an intro and/or piped text.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
65% 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 · scripts/call-agent.sh (reported line 32)May include surrounding context.

sh
#!/usr/bin/env bash
# Make phone calls via macOS Phone/FaceTime.
# Usage: call.sh [--dry-run] [--no-confirm] [--scheme tel|tel-phoneapp|facetime-audio] +491234567890
#
# macOS may show a confirmation sheet/dialog after opening phone URLs.
# This script opens the call URL and tries to click a visible confirmation button

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
65% 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 · scripts/call.sh (reported line 3)May include surrounding context.

sh
#!/usr/bin/env bash
# Make phone calls via macOS Phone/FaceTime.
# Usage: call.sh [--dry-run] [--no-confirm] [--scheme tel|tel-phoneapp|facetime-audio] +491234567890
#
# macOS may show a confirmation sheet/dialog after opening phone URLs.
# This script opens the call URL and tries to click a visible confirmation button

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
65% 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 · scripts/call.sh (reported line 20)May include surrounding context.

sh
#!/usr/bin/env bash
# Make phone calls via macOS Phone/FaceTime.
# Usage: call.sh [--dry-run] [--no-confirm] [--scheme tel|tel-phoneapp|facetime-audio] +491234567890
#
# macOS may show a confirmation sheet/dialog after opening phone URLs.
# This script opens the call URL and tries to click a visible confirmation button

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
65% 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 · scripts/call.sh (reported line 29)May include surrounding context.

sh
#!/usr/bin/env bash
# Make phone calls via macOS Phone/FaceTime.
# Usage: call.sh [--dry-run] [--no-confirm] [--scheme tel|tel-phoneapp|facetime-audio] +491234567890
#
# macOS may show a confirmation sheet/dialog after opening phone URLs.
# This script opens the call URL and tries to click a visible confirmation button

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
96% confidence
Finding

The script enables AUTO_CONFIRM by default, meaning it will not only initiate a phone call but also attempt to dismiss or click system confirmation dialogs via Accessibility automation. In an agent skill context, this removes an important user-consent barrier and allows an autonomous agent to perform a real-world action with billing, privacy, and social-engineering consequences.

Content

Scanner excerpt · scripts/call.sh (reported line 12)May include surrounding context.

sh
set -euo pipefail

AUTO_CONFIRM=1
DRY_RUN=0
SCHEME="${PHONE_CALL_URL_SCHEME:-tel}"
TIMEOUT_SECONDS="${PHONE_CALL_CONFIRM_TIMEOUT:-10}"

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% 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 · scripts/call.sh (reported line 30)May include surrounding context.

sh
--dry-run)
      DRY_RUN=1; shift ;;
    --no-confirm)
      AUTO_CONFIRM=0; shift ;;
    --confirm)
      AUTO_CONFIRM=1; shift ;;
    --scheme)

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
92% confidence
Finding

This parser branch explicitly allows --confirm to enable automated clicking of call confirmation dialogs. In a skill intended for agent use, exposing a flag that authorizes autonomous confirmation of phone calls materially increases the ability of the agent to take external actions without contemporaneous human review.

Content

Scanner excerpt · scripts/call.sh (reported line 32)May include surrounding context.

sh
--no-confirm)
      AUTO_CONFIRM=0; shift ;;
    --confirm)
      AUTO_CONFIRM=1; shift ;;
    --scheme)
      SCHEME="${2:-}"; shift 2 ;;
    --timeout)

Static analysis

No suspicious patterns detected.