T05 · Unauthorized Access and Privilege Escalation
- Location
findmy-location.py:50- Finding
Full-screen capture transmits excessive sensitive data to an external vision service
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is purpose-related but needs careful review because it automates Find My, captures full-screen location screenshots, may upload them to an external vision API, and can process the wrong contact.
Install only after the publisher fixes target verification, screenshot minimization, explicit upload consent, cleanup of temporary images, and the Hammerspoon click helper scope. Treat it as a privacy-sensitive Review item, especially if SKILLBOSS_API_KEY is set.
findmy-location.py:50Full-screen capture transmits excessive sensitive data to an external vision service
findmy-location.py:95Configured target is ignored, allowing the wrong contact's location to be processed and uploaded
findmy-location.py:124Sensitive full-screen screenshots are stored in predictable temporary files without cleanup
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
with open(screenshot_path, "rb") as f:
img_b64 = base64.b64encode(f.read()).decode()
r = requests.post(
f"{SKILLBOSS_API_BASE}/pilot",
headers={
"Authorization": f"Bearer {SKILLBOSS_API_KEY}",
The README explicitly states that if local landmark matching fails, the skill sends a screenshot of a person's live Find My location to an external vision API. Because the skill is specifically designed for tracking a shared contact's location with street-level accuracy, this can expose highly sensitive location data and nearby map context to a third party without an explicit, prominent privacy warning and consent flow.
The documented purpose understates materially sensitive behavior: GUI automation of Find My, screenshot capture, reading local configuration, and sending screenshots to an external vision service. This mismatch is dangerous because users may authorize the skill for simple location lookup without understanding that it can capture broader screen contents and exfiltrate images off-device.
The documentation does not clearly warn users that screenshots may be transmitted to an external vision API for processing. Because screenshots can contain more than the intended map details, this creates significant exfiltration and privacy risk, particularly in a tool centered on precise geolocation of another person.
Using shell=True in a generic command runner enables tool-parameter abuse and command injection if any controllable value influences the command string. Since this function is reused for many operations and interpolated values include paths and coordinates, the pattern creates a broad and fragile attack surface.
}
def run(cmd):
return subprocess.run(cmd, shell=True, capture_output=True, text=True).stdout.strip()
def load_config():
if os.path.exists(CONFIG_PATH):
A screenshot of the Find My app containing precise location data is uploaded to an external API without any user-facing warning, consent, or data minimization. This is especially dangerous in context because the screenshot may reveal a person's real-time whereabouts, nearby landmarks, and other sensitive map information to a third party.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
server:start()
Reload config (Hammerspoon menu → Reload Config), then create `~/.local/bin/hsclick`:
```bash
#!/bin/bash
curl -s -X POST localhost:9090/click -d "{\"x\":$2,\"y\":$3}"
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
server:start()
Reload config (Hammerspoon menu → Reload Config), then create `~/.local/bin/hsclick`:
```bash
#!/bin/bash
curl -s -X POST localhost:9090/click -d "{\"x\":$2,\"y\":$3}"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Reload config (Hammerspoon menu → Reload Config), then create ~/.local/bin/hsclick:
#!/bin/bash
curl -s -X POST localhost:9090/click -d "{\"x\":$2,\"y\":$3}"
chmod +x ~/.local/bin/hsclick
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Reload config (Hammerspoon menu → Reload Config), then create ~/.local/bin/hsclick:
#!/bin/bash
curl -s -X POST localhost:9090/click -d "{\"x\":$2,\"y\":$3}"
chmod +x ~/.local/bin/hsclick
The skill declares no explicit tool scope even though its documented behavior requires environment access, shell execution, local file access, GUI automation, and network communication. In a security-sensitive skill that captures location data and screenshots, missing permissions metadata prevents users and platforms from accurately assessing or constraining what the skill can do.
The skill handles highly sensitive personal data: a shared contact's precise real-time location, address inference, and screenshots. Failing to present a clear privacy warning increases the chance of covert or poorly understood surveillance use, especially because the output includes street-level location context and stored image paths.
The instructions create a local HTTP server that accepts click coordinates and triggers arbitrary screen clicks. Even if intended for reliability, this exposes a generic UI control primitive that exceeds the stated task and could be abused by any local process to drive clicks in other applications, enabling unintended actions or data access.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
import requests
SKILLBOSS_API_KEY = os.environ.get("SKILLBOSS_API_KEY", "")
SKILLBOSS_API_BASE = "https://api.heybossai.com/v1"
CONFIG_PATH = os.path.expanduser("~/.config/findmy-location/config.json")
DEFAULT_CONFIG = {
The skill relies on shell execution and GUI automation to control the Find My app, a privileged capability not apparent from the brief description. Hidden automation of a location-tracking app increases risk because users may not realize the skill can manipulate desktop state, click contacts, and capture sensitive UI contents.
The helper wraps arbitrary shell command strings with subprocess.run(..., shell=True), which creates a command-injection primitive if any future or indirect input reaches cmd. In this file, several commands interpolate variables such as executable paths and coordinates, so the unsafe pattern is real even if current inputs are mostly locally derived.
}
def run(cmd):
return subprocess.run(cmd, shell=True, capture_output=True, text=True).stdout.strip()
def load_config():
if os.path.exists(CONFIG_PATH):
The skill reads local USER.md files to infer a target name without user request or clear necessity, expanding data access beyond the stated task. This is dangerous because it silently harvests local profile information and creates an unexpected dependency on unrelated files that may contain sensitive personal context.
This outbound request transmits screenshot-derived location data to an external service. In the context of a Find My tracking skill, external transmission materially increases privacy and surveillance risk because it shares precise whereabouts and map context outside the local device boundary.
with open(screenshot_path, "rb") as f:
img_b64 = base64.b64encode(f.read()).decode()
r = requests.post(
f"{SKILLBOSS_API_BASE}/pilot",
headers={
"Authorization": f"Bearer {SKILLBOSS_API_KEY}",
The skill automatically opens Find My, brings it frontmost, and clicks a shared contact without disclosure or confirmation. Undisclosed UI automation is risky because it can surprise users, interact with the wrong target, and expose sensitive location data through visible app manipulation or subsequent capture.
The skill stores a screenshot of Find My in /tmp, which may be accessible to other local processes or persist longer than intended. Because the image can contain highly sensitive real-time location information, leaving it in a shared temporary directory creates unnecessary exposure on the host.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_DIR="$HOME/.local/bin"
mkdir -p "$BIN_DIR"
mkdir -p "$HOME/.config/findmy-location"
# Link the script
No suspicious patterns detected.