Back to skill

Security audit

Ynab Api

Security checks for vulnerabilities and agentic risk

Overview

This YNAB skill appears purpose-aligned, but it needs Review because it can read and write a live budget while being declared prompt-only and triggered by broad finance requests.

Install only if you intentionally want an agent to access your YNAB account and potentially create transactions or transfers. Prefer environment variables or a protected config file, verify the skill only contacts the official YNAB API, require confirmation before any write action, and be careful with generic finance requests because the skill may activate even when you did not explicitly mention YNAB.

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 (4)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/transfer.sh:50
Finding
Unsafe JSON Construction in Authenticated Financial Transactions<![CDATA[ ## Vulnerability Details **File Location**: `scripts/transfer.sh:50-63`; `scripts/ynab-helper.sh:77-92` **Vulnerability Type**: Unescaped input interpolation into JSON request bodies **Risk Level**: High ### Vulnerable Code From `scripts/transfer.sh:50-63`: ```bash RESPONSE=$(curl -s -X POST "$YNAB_API/budgets/$BUDGET_ID/transactions" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"transaction\": { \"account_id\": \"$SOURCE_ACCOUNT_ID\", \"date\": \"$DATE\", \"amount\": $AMOUNT_MILLIUNITS, \"payee_id\": \"$TRANSFER_PAYEE_ID\", \"memo\": \"$MEMO\", \"approved\": true } }") ``` A second instance exists in `scripts/ynab-helper.sh:77-92`: ```bash curl -X POST "$YNAB_API/budgets/$BUDGET_ID/transactions" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"transaction\": { \"account_id\": \"$ACCOUNT_ID\", \"date\": \"$DATE\", \"amount\": $AMOUNT_MILLI, \"payee_name\": \"$PAYEE\", \"category_id\": \"$CATEGORY_ID\", \"memo\": \"$MEMO\", \"approved\": true } }" | jq . ``` ### Technical Analysis Both scripts construct JSON by directly inserting shell variables into a double-quoted string. Values such as `MEMO`, `PAYEE`, `ACCOUNT_ID`, `CATEGORY_ID`, and `DATE` are not JSON-escaped. A value containing a quotation mark, backslash, newline, or JSON syntax can terminate the intended string and add or alter properties in the request body. At minimum, ordinary input containing these characters produces malformed JSON and prevents the transaction from being created. A deliberately crafted value may modify request semantics, depending on how YNAB handles duplicate JSON properties. The affected requests use a valid bearer token and invoke a financial write endpoint, making robust serialization essential. ### Attack Path 1. An attacker or untrusted user supplies a crafted memo, payee ...[truncated 1095 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Construct request bodies with a JSON serializer rather than string interpolation. For example: ```bash PAYLOAD=$(jq -n \ --arg account_id "$SOURCE_ACCOUNT_ID" \ --arg date "$DATE" \ --arg payee_id "$TRANSFER_PAYEE_ID" \ --arg memo "$MEMO" \ --argjson amount "$AMOUNT_MILLIUNITS" \ '{ transaction: { account_id: $account_id, date: $date, amount: $amount, payee_id: $payee_id, memo: $memo, approved: true } }') RESPONSE=$(curl --fail-with-body --silent --show-error \ -X POST "$YNAB_API/budgets/$BUDGET_ID/transactions" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ --data-binary "$PAYLOAD") ``` Apply the same pattern to `ynab-helper.sh`. Additional hardening should include: 1. Validate account, category, and payee identifiers against expected UUID formats or API-derived identifiers. 2. Validate dates using a strict `YYYY-MM-DD` pattern and calendar round-trip check. 3. Validate amounts before passing them as `--argjson`. 4. Reject control characters where they are not required. 5. Display the fully normalized transaction and request explicit confirmation before a financial write. 6. Check the HTTP status and response schema before reporting success. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/transfer.sh:38
Finding
jq Program Injection Through Untrusted Search and Account Names<![CDATA[ ## Vulnerability Details **File Location**: `scripts/transfer.sh:38-41`; `scripts/ynab-helper.sh:34-36` **Vulnerability Type**: Untrusted input embedded in jq program source **Risk Level**: Medium ### Vulnerable Code From `scripts/transfer.sh:38-41`: ```bash TRANSFER_PAYEE_ID=$(curl -s "$YNAB_API/budgets/$BUDGET_ID/accounts" \ -H "Authorization: Bearer $API_KEY" | \ jq -r ".data.accounts[] | select(.name == \"$DEST_ACCOUNT_NAME\") | .transfer_payee_id") ``` A second instance exists in `scripts/ynab-helper.sh:34-36`: ```bash curl -s "$YNAB_API/budgets/$BUDGET_ID/transactions" \ -H "Authorization: Bearer $API_KEY" | \ jq ".data.transactions[] | select(.payee_name | contains(\"$PAYEE\"))" ``` ### Technical Analysis `DEST_ACCOUNT_NAME` and `PAYEE` are inserted directly into jq source code. They are not passed as jq data arguments. An input containing quotation marks and jq syntax can terminate the intended string literal and alter the filter. This is jq program injection, not direct shell command injection: shell syntax contained in the variable is not automatically re-evaluated as shell code. Nevertheless, the attacker can change how the complete authenticated YNAB response is filtered and emitted. For transfers, a modified filter may select an unintended account's `transfer_payee_id`. The script also fails to verify that the destination lookup returns exactly one result. For searches, an injected filter can expose unrelated fields or transactions already present in the API response. ### Attack Path 1. An attacker supplies a crafted destination account name or payee search value. 2. The value is concatenated into the jq program. 3. Embedded quotation marks terminate the intended jq string. 4. Additional jq expressions alter account selection or transaction filtering. 5. In `ynab-helper.sh`, unrelated financial data from the fetched response may be printed. 6. In `transfer.sh`, the modified result may select an unintended transfer payee ...[truncated 684 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Pass external values through `--arg` so jq treats them strictly as data: ```bash TRANSFER_PAYEE_ID=$( curl --fail-with-body --silent --show-error \ "$YNAB_API/budgets/$BUDGET_ID/accounts" \ -H "Authorization: Bearer $API_KEY" | jq -r --arg destination "$DEST_ACCOUNT_NAME" ' .data.accounts[] | select(.name == $destination) | .transfer_payee_id ' ) ``` For payee searches: ```bash jq --arg payee "$PAYEE" ' .data.transactions[] | select((.payee_name // "") | contains($payee)) ' ``` Additional controls should include: 1. Count destination matches and require exactly one active account. 2. Prefer immutable account IDs over display names. 3. Reject empty or null `transfer_payee_id` values. 4. Verify the selected destination with the user before creating a transfer. 5. Use `curl --fail-with-body --silent --show-error` and validate the API response before invoking jq. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/transfer.sh:19
Finding
Insufficient Validation of Transaction-Critical Amounts and Dates<![CDATA[ ## Vulnerability Details **File Location**: `scripts/transfer.sh:19-34`; `scripts/ynab-helper.sh:63-75` **Vulnerability Type**: Missing validation of financial transaction inputs **Risk Level**: Medium ### Vulnerable Code From `scripts/transfer.sh:19-34`: ```bash SOURCE_ACCOUNT_ID="$1" DEST_ACCOUNT_NAME="$2" AMOUNT_EUROS="$3" DATE="$4" MEMO="${5:-Transfer}" if [ -z "$SOURCE_ACCOUNT_ID" ] || [ -z "$DEST_ACCOUNT_NAME" ] || [ -z "$AMOUNT_EUROS" ] || [ -z "$DATE" ]; then echo "Usage: $0 SOURCE_ACCOUNT_ID DEST_ACCOUNT_NAME AMOUNT_EUROS DATE [MEMO]" >&2 echo "Example: $0 abc123 'Savings' 100.50 2026-02-21 'Monthly savings'" >&2 exit 1 fi YNAB_API="https://api.ynab.com/v1" # Convert euros to milliunits (negative for outbound transfer) AMOUNT_MILLIUNITS=$(echo "$AMOUNT_EUROS * -1000" | bc | cut -d. -f1) ``` From `scripts/ynab-helper.sh:63-75`: ```bash read -p "Account ID (or press Enter for default): " ACCOUNT_ID if [ -z "$ACCOUNT_ID" ]; then ACCOUNT_ID=$(jq -r '.default_account_id // .accounts[0]' "$CONFIG_FILE") fi read -p "Date (YYYY-MM-DD, default today): " DATE DATE="${DATE:-$(date +%Y-%m-%d)}" read -p "Amount (negative for expense): " AMOUNT AMOUNT_MILLI=$((AMOUNT * 1000)) read -p "Payee name: " PAYEE read -p "Category ID: " CATEGORY_ID read -p "Memo (optional): " MEMO ``` ### Technical Analysis The scripts verify only that certain arguments are nonempty. They do not enforce: - A strict numeric representation for amounts. - Expected sign semantics. - Reasonable minimum or maximum amounts. - Decimal precision. - A valid calendar date. - Valid account or category identifier formats. `transfer.sh` always multiplies the supplied amount by `-1000`. Supplying a negative amount therefore reverses the intended direction. Arbitrary calculator expressions are also passed to `bc`, which can cause unexpected values or resource consumption. `ynab-helper.sh` uses Bash integer arithmetic, despite prompting for a general amount. Decimal values s ...[truncated 1310 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Implement strict validation before any calculation or API request. For transfer amounts: ```bash if [[ ! "$AMOUNT_EUROS" =~ ^[0-9]+([.][0-9]{1,2})?$ ]]; then echo "Error: amount must be a positive decimal with at most two fractional digits" >&2 exit 1 fi AMOUNT_MILLIUNITS=$( awk -v amount="$AMOUNT_EUROS" 'BEGIN { printf "%.0f\n", amount * -1000 }' ) ``` Further hardening should include: 1. Reject zero and enforce a documented maximum amount. 2. Require positive input for `transfer.sh`, because the script determines the outbound sign. 3. Clearly support decimal amounts in `ynab-helper.sh` rather than using Bash integer arithmetic. 4. Validate dates with both a regex and a calendar round trip. 5. Validate identifiers against expected UUID syntax or confirm that they exist in the authenticated API response. 6. Confirm that source and destination accounts are different. 7. Present the source, destination, normalized date, and exact milliunit amount for explicit confirmation before submission. 8. Use an import ID or duplicate check to reduce accidental repeated transactions. ]]>

other

Warning
Location
skill.toml:97
Finding
Runtime Metadata Understates Executable and Financial Capabilities<![CDATA[ ## Vulnerability Details **File Location**: `skill.toml:97-109` **Vulnerability Type**: Capability declaration mismatch **Risk Level**: Medium ### Vulnerable Code ```toml tags = [ "openclaw-compat", "prompt-only", ] [runtime] type = "promptonly" entry = "" [tools] provided = [] [requirements] tools = [] capabilities = [] ``` ### Technical Analysis The package declares itself as prompt-only and lists no required tools or capabilities. In practice, it ships eight executable shell scripts and directs the Agent to use them. Those scripts require or use: - Shell execution. - `curl`, `jq`, and, in some cases, `bc` and `awk`. - Access to environment variables and files under `~/.config/ynab/`. - Network access to `https://api.ynab.com`. - A bearer token for private financial data. - Authenticated financial write operations for transactions and transfers. This mismatch can prevent a platform or reviewer from accurately applying least-privilege controls, consent prompts, or sandbox policies. The code itself does not bypass permissions, but the declaration materially understates the skill's operational behavior. ### Attack Path 1. A platform or user evaluates the package based on `skill.toml`. 2. The package is classified as prompt-only with no tool or capability requirements. 3. The skill instructions direct the Agent to invoke bundled shell scripts. 4. Those scripts read credentials, access private financial data over the network, and can submit authenticated financial writes. 5. Execution occurs under a capability profile that may not have communicated or enforced the actual privilege requirements. ### Impact Assessment The mismatch does not directly provide privilege escalation. Its security impact is governance and control failure: - Users may not receive appropriate notice before financial data access or modification. - Automated review may fail to identify shell, filesystem, credential, and network requirements. - Sandboxing or pol ...[truncated 219 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Update the manifest to accurately describe the package's behavior. At minimum, declare: 1. Shell-script execution. 2. Required command-line tools: `curl`, `jq`, `awk`, and either `bc` or a safer replacement. 3. Read access to `YNAB_API_KEY`, `YNAB_BUDGET_ID`, and optional YNAB configuration files. 4. Outbound HTTPS access restricted to `api.ynab.com`. 5. Private financial-data read capability. 6. Authenticated transaction and transfer write capability. 7. Separate consent or confirmation requirements for write operations. Remove the `prompt-only` tag unless executable scripts are removed and the skill is redesigned to contain instructions only. Where supported, separate read-only reporting capabilities from financial write capabilities so that users can grant the minimum privileges needed for each operation. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (44)

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding
The description claims a full-featured YNAB management skill that can add transactions, create transfers, track goals, monitor spending, and generate reports, and says it should be used for a wide range of finance intents such as 'add an expense' or 'upcoming bills'. The actual code only implements one narrow capability: a scheduled, read-only daily budget check/report. It accesses YNAB budget/month and scheduled transaction data and formats a morning summary, but contains no write operations, no transaction creation, no transfer support, and no general-purpose interaction handling. While parts of the description related to spending analysis, goal tracking, Age of Money, and budget reports are consistent, the declared scope materially overstates the implemented behavior.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The code is clearly YNAB-related and does support one declared capability: adding transactions, plus limited spending lookup. However, the description substantially overstates the skill’s scope. The script does not implement goal tracking, transfers, budget reports, Age of Money, upcoming bills, or general personal-finance management. Its actual behavior is a small CLI helper around a few YNAB endpoints, not a full-featured budget management skill matching the broad trigger guidance. There are no obvious undeclared malicious capabilities, but there is a material description-versus-behavior mismatch due to the claimed breadth of functionality.

Vague Triggers

High
Confidence
97% confidence
Finding
The invocation guidance is extremely broad, telling the system to use this skill whenever the user mentions general budgeting or personal finance, even without naming YNAB. In context, this is dangerous because the skill includes write-capable financial actions such as adding transactions and creating transfers, so over-triggering can cause unintended access to financial data or accidental state-changing operations.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
| Accounts | `GET /v1/budgets/{id}/accounts` |
| Categories | `GET /v1/budgets/{id}/categories` |
| Transactions | `GET/POST /v1/budgets/{id}/transactions` |
| Single transaction | `GET/PUT/DELETE /v1/budgets/{id}/transactions/{id}` |
| Month summary | `GET /v1/budgets/{id}/months/current` |
| Scheduled | `GET /v1/budgets/{id}/scheduled_transactions` |
| Payees | `GET /v1/budgets/{id}/payees` |
Confidence
80% 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).

Scope Creep

High
Confidence
98% confidence
Finding
The manifest advertises a prompt-only skill with no tools or capabilities, yet the embedded instructions direct use of curl, jq, local config files, environment variables, and a remote API. This mismatch can bypass platform safety gating and mislead orchestrators into invoking a skill that expects network access, credential handling, and filesystem interaction without explicit declaration.

Vague Triggers

High
Confidence
97% confidence
Finding
The trigger language is extremely broad, covering generic phrases like 'add an expense', 'how much did I spend', and 'check my budget' even when YNAB is not mentioned. In context, this is risky because the skill supports financial record modification, so over-triggering could route unrelated finance requests into a workflow that assumes access to a live personal budget and may prompt or perform sensitive actions.

Session Persistence

Medium
Category
Rogue Agent
Content
# YNAB API Skill for Claude Code

Manage your [YNAB](https://www.ynab.com/) budget directly from Claude Code. Add transactions, track goals, monitor spending, create transfers, and generate reports.

## Installation
Confidence
60% confidence
Finding
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.

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill declares shell-capable behavior but does not define any explicit tool scope such as allowed tools or permissions. That creates an authorization gap where the agent may invoke shell functionality more broadly than intended, increasing the chance of unintended command execution or access to sensitive local data and environment variables.

Session Persistence

Medium
Category
Rogue Agent
Content
---
name: ynab-api
description: "YNAB (You Need A Budget) budget management via API. Add transactions, track goals, monitor spending, create transfers, and generate budget reports. Use this skill whenever the user mentions YNAB, budget tracking, spending analysis, budget goals, Age of Money, or wants to manage their personal finances -- even if they just say 'add an expense', 'how much did I spend', 'check my budget', or 'upcoming bills' without naming YNAB explicitly. Also use for automated budget reports and financial summaries."
user-invocable: true
metadata: {"requiredEnv": ["YNAB_API_KEY", "YNAB_BUDGET_ID"]}
---
Confidence
76% confidence
Finding
The skill encourages broad reuse across ongoing personal-finance interactions, which increases the chance that sensitive budget context, account identifiers, or prior transaction assumptions persist across requests. In a financial-management context, over-retention or over-application of session context can lead to mistaken actions, privacy leakage, or unauthorized use of stale financial state.

External Transmission

Medium
Category
Data Exfiltration
Content
## Common API Operations

```bash
YNAB_API="https://api.ynab.com/v1"

# Add a transaction
# POST \/budgets/\/transactions
Confidence
91% confidence
Finding
The skill is designed to send budget and transaction data to an external service endpoint, which is a real external-transmission behavior. In context this is expected for a YNAB integration, but it still carries confidentiality risk because personal financial data and API credentials are involved, and accidental invocation or overbroad use could expose sensitive information to the third-party API.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
Several guidance and troubleshooting lines are written as mandatory instructions in Italian, including 'riprovare silenziosamente' and 'NON assumere subito', without offering the user a language choice or documenting a justified locale restriction. This creates a natural-language policy issue because the skill imposes a specific language/locale in its operational instructions without opt-in.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill instructs users to configure a live YNAB API token and use scripts that can create transactions and transfers, but it does not clearly warn that these operations affect a real budget. In a personal-finance skill, silent state-changing behavior increases the risk of unintended financial record modification, duplicate entries, or accidental transfers if the agent invokes scripts without explicit confirmation.

Session Persistence

Medium
Category
Rogue Agent
Content
## Configuration

Set environment variables `YNAB_API_KEY` and `YNAB_BUDGET_ID`, or create `~/.config/ynab/config.json`:

```json
{
Confidence
77% confidence
Finding
The skill recommends persistent storage of the API key in ~/.config/ynab/config.json, which creates session/credential persistence on disk. While common, this becomes a security issue if the file is left world-readable, synced insecurely, or exposed via backups or local compromise, especially because the token can authorize modifications to financial records.

Session Persistence

Medium
Category
Rogue Agent
Content
API_KEY=$(jq -r .api_key "${YNAB_CONFIG:-$HOME/.config/ynab/config.json}")
  BUDGET_ID=$(jq -r '.budget_id // "last-used"' "${YNAB_CONFIG:-$HOME/.config/ynab/config.json}")
else
  echo "Error: YNAB config not found. Set YNAB_API_KEY+YNAB_BUDGET_ID or create ~/.config/ynab/config.json" >&2
  exit 1
fi
Confidence
82% confidence
Finding
The script supports long-lived storage of an API key in a local JSON file under ~/.config/ynab/config.json, which can expose sensitive financial API credentials if file permissions are weak, the host is shared, or backups/logging capture the file. In the context of a finance skill, compromise of this token could allow unauthorized access to budget and transaction data and potentially modification via the API.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
exit 1
fi

YNAB_API="https://api.ynab.com/v1"
TODAY=$(date -u '+%Y-%m-%d')
TOMORROW=$(date -u -d "+1 day" '+%Y-%m-%d')
END_7_DAYS=$(date -u -d "+7 days" '+%Y-%m-%d')
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.