Back to skill

Security audit

TinkerClaw OwnTracks Location

Security checks for vulnerabilities and agentic risk

Overview

This skill is a clearly disclosed self-hosted OwnTracks location receiver with sensitive but purpose-aligned local storage and token handling.

Install only if you are comfortable letting this skill store your recent location history locally. Keep the default loopback/private-network setup, avoid exposing plain HTTP to the public internet, prefer OS keychain token storage, and use purge/revoke when you no longer want the receiver active.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (32)

Credential Access

High
Category
Privilege Escalation
Content
const STORE_SSID = process.env.OWNTRACKS_STORE_SSID === "1";
const LOG_COORDS = process.env.OWNTRACKS_LOG_COORDS === "1";

const KEYCHAIN_SERVICE = "owntracks-location";
const KEYCHAIN_ACCOUNT = "receiver-token";

const historyFile = join(DATA_DIR, "history.json");
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
const STORE_SSID = process.env.OWNTRACKS_STORE_SSID === "1";
const LOG_COORDS = process.env.OWNTRACKS_LOG_COORDS === "1";

const KEYCHAIN_SERVICE = "owntracks-location";
const KEYCHAIN_ACCOUNT = "receiver-token";

const historyFile = join(DATA_DIR, "history.json");
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
const STORE_SSID = process.env.OWNTRACKS_STORE_SSID === "1";
const LOG_COORDS = process.env.OWNTRACKS_LOG_COORDS === "1";

const KEYCHAIN_SERVICE = "owntracks-location";
const KEYCHAIN_ACCOUNT = "receiver-token";

const historyFile = join(DATA_DIR, "history.json");
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
const STORE_SSID = process.env.OWNTRACKS_STORE_SSID === "1";
const LOG_COORDS = process.env.OWNTRACKS_LOG_COORDS === "1";

const KEYCHAIN_SERVICE = "owntracks-location";
const KEYCHAIN_ACCOUNT = "receiver-token";

const historyFile = join(DATA_DIR, "history.json");
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
const STORE_SSID = process.env.OWNTRACKS_STORE_SSID === "1";
const LOG_COORDS = process.env.OWNTRACKS_LOG_COORDS === "1";

const KEYCHAIN_SERVICE = "owntracks-location";
const KEYCHAIN_ACCOUNT = "receiver-token";

const historyFile = join(DATA_DIR, "history.json");
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
const STORE_SSID = process.env.OWNTRACKS_STORE_SSID === "1";
const LOG_COORDS = process.env.OWNTRACKS_LOG_COORDS === "1";

const KEYCHAIN_SERVICE = "owntracks-location";
const KEYCHAIN_ACCOUNT = "receiver-token";

const historyFile = join(DATA_DIR, "history.json");
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
const STORE_SSID = process.env.OWNTRACKS_STORE_SSID === "1";
const LOG_COORDS = process.env.OWNTRACKS_LOG_COORDS === "1";

const KEYCHAIN_SERVICE = "owntracks-location";
const KEYCHAIN_ACCOUNT = "receiver-token";

const historyFile = join(DATA_DIR, "history.json");
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
const STORE_SSID = process.env.OWNTRACKS_STORE_SSID === "1";
const LOG_COORDS = process.env.OWNTRACKS_LOG_COORDS === "1";

const KEYCHAIN_SERVICE = "owntracks-location";
const KEYCHAIN_ACCOUNT = "receiver-token";

const historyFile = join(DATA_DIR, "history.json");
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
console.log("🔐 Token stored in the OS keychain.");
  } else {
    writePrivate(tokenFile, token + "\n");
    console.log(`⚠️  WARNING: no OS keychain available (install libsecret's secret-tool on Linux).`);
    console.log(`⚠️  The token was written to ${tokenFile} as a plain 0600 file instead.`);
    console.log(`⚠️  Anyone who can read that file, or run as this user, can read your location.`);
  }
Confidence
86% confidence
Finding
When no OS keychain is available, the token is written to a plaintext file and later used to protect access to sensitive location history. Although permissions are tightened to 0600, compromise of the same user account, backup leakage, or weak filesystem isolation would expose the bearer token and allow an attacker to read or submit location data.

Credential Access

High
Category
Privilege Escalation
Content
}

if (flags.has("--revoke") || flags.has("--logout")) {
  const inKeychain = keychainClear();
  const hadFile = existsSync(tokenFile);
  if (hadFile) rmSync(tokenFile, { force: true });
  console.log(`🔓 Keychain entry: ${inKeychain ? "cleared" : "none found"}`);
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
}

if (flags.has("--revoke") || flags.has("--logout")) {
  const inKeychain = keychainClear();
  const hadFile = existsSync(tokenFile);
  if (hadFile) rmSync(tokenFile, { force: true });
  console.log(`🔓 Keychain entry: ${inKeychain ? "cleared" : "none found"}`);
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
#!/usr/bin/env bash
# Focused tests for the OwnTracks receiver: loopback default, auth on every data
# endpoint, retention/cap, and the purge off-switch. Uses a throwaway data dir and
# an env-supplied token, so no keychain entry and no real trail are touched.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/.." && pwd)"
SERVER="$SRC/scripts/server.mjs"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Static analysis

No suspicious patterns detected.