Back to skill

Security audit

ofw-fpx

Security checks for vulnerabilities and agentic risk

Overview

This skill needs review because it enables changes and deletions to sensitive family records without requiring approval for each action.

Install only if you intend to grant an agent direct OFW write access. Require your approval before sending, deleting, changing expenses or visibility, uploading shared files, or creating journal entries. For retrieval alone, prefer an integration with enforced read-only limits. Reading an unread message can mark it read, and browser pairing remains until revoked.

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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (12)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The service, resource, and curl implementation align with the description, but deleting messages materially exceeds the stated purpose of accessing OFW data. This is an undeclared destructive capability, not merely a supporting implementation detail.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The GET request matches the declared expense-access purpose. The PUT request introduces an undeclared state-changing capability, explicitly setting isPrivate to false. Changing record visibility is materially different from retrieving OFW data, not merely a supporting implementation detail. The supplied body contains a placeholder, so the chunk does not establish that the update would execute successfully as written.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The endpoint and authentication mechanism align with the declared OFW integration, but deleting calendar events goes beyond the described data-access purpose. The description does not disclose destructive calendar operations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

The declared purpose emphasizes accessing OFW data, but the supplied command performs a state-changing file upload. Although it uses the expected OFW domain and authentication mechanism, transmitting local file contents and creating an uploaded file are additional capabilities not disclosed in the description. The command does not itself send a message.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

The code uses the declared OFW API and authentication mechanism, but performs an externally visible write: POSTing a message with draft set to false. The description emphasizes accessing OFW data and does not disclose sending messages or otherwise modifying account state. The subsequent GET is supporting verification, not a separate mismatch.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

The service and direct REST access match the description, but the description frames the skill as accessing OFW data without declaring write operations. This code changes server-side calendar data rather than merely retrieving it, introducing an undeclared modification capability.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/requests.md (reported line 82)May include surrounding context.

md
attachments:{myFileIDs:$myFileIDs}, draft:($draft=="true"),
    includeOriginal:($includeOriginal=="true"), replyToId:$replyToId}')

RESP=$(curl -s -X POST 'https://ofw.ourfamilywizard.com/pub/v3/messages' \
  "${AUTH_HEADERS[@]}" -H 'Content-Type: application/json' --data "$BODY")

NEW_ID=$(jq -r '.id // .entityId // empty' <<<"$RESP")

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/requests.md (reported line 174)May include surrounding context.

eventFor: "neither", children: [67890] }') curl -s -X POST 'https://ofw.ourfamilywizard.com/pub/v1/calendar/events'
"${AUTH_HEADERS[@]}" -H 'Content-Type: application/json' --data "$BODY" | jq .

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/requests.md (reported line 181)May include surrounding context.

Update an event (send only the fields you're changing):

sh
curl -s -X PUT "https://ofw.ourfamilywizard.com/pub/v1/calendar/events/${EVENT_ID}" \
  "${AUTH_HEADERS[@]}" -H 'Content-Type: application/json' \
  --data '{"title":"Soccer practice (moved)","startDate":"2026-07-20T17:00:00"}' | jq .

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/requests.md (reported line 236)May include surrounding context.

single receipt file are optional.

sh
curl -s -X POST 'https://ofw.ourfamilywizard.com/pub/v2/expense' \
  "${AUTH_HEADERS[@]}" -H 'Content-Type: application/json' \
  --data '{
    "title":"Soccer cleats",

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/requests.md (reported line 263)May include surrounding context.

sh
curl -s "https://ofw.ourfamilywizard.com/pub/v2/expense/expenses/${EXPENSE_ID}" "${AUTH_HEADERS[@]}" | jq .
curl -s -X PUT "https://ofw.ourfamilywizard.com/pub/v2/expense/expenses/${EXPENSE_ID}" \
  "${AUTH_HEADERS[@]}" -H 'Content-Type: application/json' \
  --data '{ …every current field…, "isPrivate":false }' | jq .

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/requests.md (reported line 280)May include surrounding context.

Create an entry (write — journal entries are a permanent court record):

sh
curl -s -X POST 'https://ofw.ourfamilywizard.com/pub/v1/journals' \
  "${AUTH_HEADERS[@]}" -H 'Content-Type: application/json' \
  --data '{"title": "Missed pickup", "body": "Co-parent arrived 45 min late without notice."}' | jq .

Static analysis

No suspicious patterns detected.