Rhindon Cyber logo
    Support & Documentation
    Contact Support

    Shadow AI Browser Extension

    How the RAIC browser extension detects Shadow AI usage across your organization — what it observes, what it never captures, and how data flows back to the platform.

    Overview

    The extension is a lightweight Manifest V3 background service that passively observes when users visit known AI tools (ChatGPT, Claude, Gemini, Microsoft Copilot, GitHub Copilot, and ~60 others) and forwards anonymized sightings to AI Discovery in RAIC.

    It does not read page content, intercept network requests, inject scripts, or capture keystrokes. Detection is based purely on the browser's tab URL and page title.

    Detection Approaches

    1. Tab URL & title observation — listens to chrome.tabs.onUpdated for completed navigations. Only the hostname, path prefix, and tab title are read.
    2. Curated AI domain catalog — bundled ai-domains.js ships with ~60 known vendors. Updated with each extension release.
    3. Hostname suffix matching — matches subdomains (e.g. enterprise.openai.com).
    4. Path-scoped matching — for general-purpose hosts, matches only specific paths (e.g. github.com/copilot) to avoid false positives.
    5. Local buffering — events queue in chrome.storage.local, capped at 500 entries to bound memory.
    6. Periodic syncchrome.alarms triggers a sync every 5 minutes plus a heartbeat for liveness.
    7. Trusted enrollment — the RAIC web app pairs the extension via externally_connectable, validated against a strict origin allowlist.

    Permissions & Privacy

    The extension requests the following permissions:

    • tabs — to read the active tab's URL and title on navigation.
    • storage — to buffer pending sightings and store the device token.
    • alarms — to schedule the 5-minute sync interval.
    • webRequest + <all_urls> — required only for optional API endpoint detection (see below). The listener exits immediately if your org has not enabled the feature.

    Never captured: page DOM, form fields, prompts, responses, request/response bodies, request headers, query strings, cookies, localStorage of visited sites, or screen content.

    API Endpoint Detection (Optional, Per-Org)

    In addition to detecting AI tabs users open, the extension can optionally detect background calls made by other apps to known AI APIs (e.g. api.openai.com,api.anthropic.com,generativelanguage.googleapis.com). This catches Shadow AI embedded inside internal tools, IDE plugins, and SaaS apps that wouldn't surface as a tab visit.

    Opt-in per organization. Default is off. Org Admins toggle it under Admin Panel → Org Settings → Browser Extension. When off, the webRequest listener exits immediately and no API URLs are observed.

    When on, each match captures only: the AI API hostname/path, the calling app's hostname (page domain), the page title, and — for v1.2+ — the specific AI model identifier (e.g. anthropic.claude-3-5-sonnet-20241022-v2:0,gpt-4o-2024-08-06) extracted from the URL path (AWS Bedrock, Azure OpenAI/Foundry, Google Vertex/Gemini) or, for OpenAI/Anthropic Direct, the single JSON model field from the request body — no other body fields are inspected. Same 10-minute dedup window applies per (source_domain, api_domain, model_id) tuple, so model switches surface as separate detections. Detections appear in AI Discovery with an API Call badge, a Detected Model column, and a Called by: attribution.

    Sync Behavior (Automatic vs. Manual)

    The extension syncs automatically on its own schedule via chrome.alarms. The Sync now button in the popup is a manual override that now refreshes the latest catalog, org config, and approved-list cache before flushing detections.

    • Detection sync — every 30 minutes. Flushes the local detection buffer to the shadow-ai-ingest edge function.
    • Config refresh — every 6 hours. Polls get-extension-config to refresh the org's API-detection toggle and tier eligibility.
    • Catalog refresh — every 24 hours. Pulls the latest published AI domain catalog from get-ai-catalog.
    • Approved-list refresh — every 24 hours. Polls get-org-approved-catalog for warn-enabled state and approved catalog entry IDs.
    • On install / popup open. A silent reconnect runs immediately if the user is signed into RAIC in any tab.
    • On RAIC sign-in. The web app fires a handshake event the extension picks up in real time.
    • Manual "Sync now". Forces an immediate catalog/config/approved-list refresh and then flushes detections without waiting for the next scheduled refresh.

    The device token persists in chrome.storage.local until it is revoked, expires from inactivity (90-day sliding window via last_seen_at), or the org's tier/status changes.

    Architecture Flow

    1. User navigates to a tab in Chrome / Edge / Brave / Firefox.
    2. Extension background service receives the onUpdated event.
    3. Detector matches hostname / path against the AI catalog.
    4. Matched event is appended to the local buffer (capped at 500).
    5. Every 5 minutes, the alarm fires and POSTs queued events to the shadow-ai-ingest edge function with a device bearer token.
    6. Pre-submission deduplication — before each sync, the buffer is collapsed so identical events post only once. Web visits are keyed by (domain, title); API calls by (source_domain, api_domain, model_id). Earliest detected_at wins. This protects against tab-reload storms and service-worker restarts that would otherwise drop the in-memory 10-min API dedup map.
    7. Edge function authenticates the device, validates payload, and writes to discovered_ai_apps + discovery_events.
    8. Org admins see results in AI Discovery, scoped by org via RLS.

    Data Captured per Detection

    • Matched vendor / app name (from catalog)
    • Hostname (e.g. chat.openai.com)
    • Path prefix only — never query strings or fragments
    • Page title (truncated)
    • Detected model identifier & provider family (v1.2+, API detection only)
    • Timestamp (UTC)
    • Device label + authenticated user ID + org ID

    Backend Ingestion

    The shadow-ai-ingest edge function authenticates each device session, validates the payload, and writes results to discovered_ai_apps. All rows are tagged with org_id and protected by Row Level Security so each tenant only sees its own discoveries.

    Device sessions can be revoked at any time from Admin → Integrations → Connected Devices.

    Catalog Maintenance & Extensibility

    The AI domain catalog is now dynamic. The bundledai-domains.js serves only as an offline fallback. On install and every 24 hours thereafter, the extension fetches the latest published catalog from the get-ai-catalogedge function and caches it in chrome.storage.local.

    Platform Managers (Super Admins) maintain the catalog under Account Tools → AI Catalog. Edits are staged until a new version is explicitly published, and any prior version can be restored via Version History. All publishes and rollbacks are fully audited.

    Approved-List Warning (v1.5.0+)

    When an organization admin enables "Warn users about unapproved AI services" under Admin → Integrations → Browser Extension, the extension shows a non-blocking dialog whenever a user visits or invokes an AI service that is not on the organization's approved list.

    A service is considered approved when it is mapped to a catalog entry on a registered AI system whose status is Approvedor Conditionally Approved. If a system is later disapproved, retired, or unmapped, it is automatically removed from the approved list.

    The dialog reads: "This AI service is not on your organization's approved list. If you need it for business use, please submit a use case or AI system for review." It offers two actions: Submit for Review (opens the intake page) and Dismiss for 8 hours (per-host, per-organization suppression persisted in chrome.storage.local so the 8-hour cooldown survives browser restarts and new tabs on the same site — fixed in v1.5.4).

    To minimize network traffic, the approved list is refreshed at most once every 24 hours per device using a server-side versioncounter — when the device's cached version matches, no payload is transferred. The list also force-refreshes when the AI catalog itself is bumped.

    Limitations & Future Enhancements

    • Only catalogued domains are detected today — novel AI tools require a catalog update.
    • Embedded AI features inside SaaS (Salesforce Einstein, Slack AI, Zoom AI Companion) are on the roadmap.
    • A heuristic / fingerprint-based detector for uncatalogued AI UIs is planned.
    • A catalog version indicator in the popup and admin dashboard is planned.