Search Copilot AI Assistant for Chrome

ID: bbdnohkpnbkdkmnkddobeafboooinpla

Could be malicious

Supported Languages

🇸🇦Arabic
🇨🇳Chinese (Simplified)
🇳🇱Dutch
🇺🇸English
🇫🇷French
🇩🇪German
🇮🇳Hindi
🇮🇹Italian
🇯🇵Japanese
🇰🇷Korean
🇷🇺Russian
🇪🇸Spanish

Extension Info & Metadata

Status
Removed
Version
1.0.0
Size
1.06 MB
Rating
4.8/5
Reviews
14
Users
20,000
Type
Extension
Updated
Jul 17, 2024
Category
Productivity Workflow
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
ai.techprosperityView Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Total Extensions
1
Active
0
Obsolete
1
Listed
1
Unlisted
0
Total Users
20,000

Display answers from Search Copilot AI Assistant directly next to Google results

Display answers from Search Copilot AI Assistant directly next to Google results. Copilot, the new LLM from Microsoft, enhances your search experience effortlessly. This extension provides a convenient way to access AI-generated summaries of your search queries while allowing you to deepen your search by following Google links as usual. Main Features: ✔ Enhance Your Search: Upgrade your familiar search engine with smart AI integration. ✔ Ask Any Question: Search Copilot AI will browse the web and deliver intelligent answers. ✔ Compatible with Major Search Engines: Works seamlessly with Google, Bing, DuckDuckGo, Ecosia, and Brave Search. ✔ Dark Mode Adaptation: Enjoy a visually comfortable experience with light or dark mode. Customizability: ✔ Instant or On-Demand Answers: Choose to generate answers instantly when you search or trigger them as needed. ✔ Conversation Styles: Select from "Balanced", "Precise", and "Creative" styles powered by GPT-4. Premium Features: ☆ Continue Conversations with Copilot: Maintain dialogue directly within the Google results page. ☆ Save and Revisit Conversations: Save your conversations and return to them later on the Copilot web page. ☆ Disable Internal Searches: Turn off internal searches by Copilot to save time. Search Copilot AI Assistant for Chrome is your ultimate companion for a smarter, more efficient search experience. Whether you seek quick answers or in-depth information, Copilot enhances your online search journey.

Item
Type
Severity
Description
declarativeNetRequestWithHostAccess
Permission
Critical
This permission combines network request modification with host permissions. Rated Critical because it can modify requests for specific domains, potentially targeting sensitive websites with precise attack rules.
webRequest
Permission
Critical
This permission enables the extension to monitor and analyze all web requests made by the browser. Rated Critical because it can observe all network traffic including sensitive data, track browsing behavior, and gather authentication tokens.
<all_urls>
Host
Critical
Broad host access — the extension can read/modify content on every website.
offscreen
Permission
High
This permission creates hidden browser documents with full DOM access. Rated High because it can run background operations invisibly, potentially executing malicious code without user awareness.
Contextual Risk Factors
Risk Factor
High
The following context increases the overall risk:• 10% increase: Early script execution enables pre-emptive content manipulation
Broad Host Permissions
Risk Factor
High
This extension has broad host permissions allowing it to access many or all websites.
storage
Permission
Medium
This permission allows storing data locally in the browser. Rated Medium because it can persist sensitive user data, track user activities over time, and potentially store malicious payloads.
Early Content Script Execution
Risk Factor
Medium
This extension runs content scripts at document_start.

declarativeNetRequest rule overrides User-Agent, Sec-CH-UA, Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version-List and a base64 origin-trial token to impersonate Microsoft Edge 112 on every bing.com main_frame navigation. This is browser/client-fingerprint spoofing performed silently against the user's outbound traffic to evade Bing's browser-gated Copilot access controls.

src/rule_resources/rules.json (Line 1)
[  {    "id": 1,    "priority": 1,    "action": {      "type": "modifyHeaders",      "requestHeaders": [        {          "header": "User-Agent",          "operation": "set",          "value": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48"        },        {          "header": "Useragentreductionoptout",          "operation": "set",          "value": "A7kgTC5xdZ2WIVGZEfb1hUoNuvjzOZX3VIV/BA6C18kQOOF50Q0D3oWoAm49k3BQImkujKILc7JmPysWk3CSjwUAAACMeyJvcmlnaW4iOiJodHRwczovL3d3dy5iaW5nLmNvbTo0NDMiLCJmZWF0dXJlIjoiU2VuZEZ1bGxVc2VyQWdlbnRBZnRlclJlZHVjdGlvbiIsImV4cGlyeSI6MTY4NDg4NjM5OSwiaXNTdWJkb21haW4iOnRydWUsImlzVGhpcmRQYXJ0eSI6dHJ1ZX0="        },        {          "header": "Sec-CH-UA",          "operation": "set",          "value": "\"Chromium\";v=\"112\", \"Microsoft Edge\";v=\"112\", \"Not:A-Brand\";v=\"99\""        }      ]    },    "condition": {      "regexFilter": ".*bing\\.com.*",      "resourceTypes": [        "main_frame"      ]    }  }]

The background service worker exposes an unauthenticated `fetch` proxy: any content script (injected on every https://*/* page) can post `{action:'fetch', url, params}` and the SW will issue an arbitrary cross-origin request with the extension's `<all_urls>` privileges, returning the body to the page. This is a CORS/origin-bypass primitive that any compromised or malicious page-side code can abuse for SSRF, credentialed scraping, and exfiltration.

src/background/background.js (Line 33)
async function handleActionFetch(action) {  const response = await fetch(action.url, action.params && JSON.parse(action.params))    .catch(e => ({      errorInBackgroundScript: true,      error: e.toString()    }));  if (response.type === "opaqueredirect") {    return {      status: 302    };  }  if (!response.ok)    return {      status: response.status,      ...(response.text && {        body: response.text()      })    };  const contentType = response.headers.get('content-type') ?? '';  if (contentType.startsWith("application/json")) {    const text = await response.text();    try {      return JSON.parse(text);    } catch (e) {      return text;    };  }  if (contentType.startsWith("text/event-stream")) {    eventStreams.push(response.body.getReader());    return {      eventStream: true,      id: eventStreams.length - 1    };  }  return response.text();}

The service worker uses webRequest with the `extraHeaders` opt-in to capture the full outgoing request headers for bing.com (including Cookie, Authorization and other normally-redacted values) and persists them verbatim into chrome.storage.local under `bing_head_rq`. Storing a user's authenticated Bing session headers on disk is sensitive data collection that goes beyond what the chat UX needs and exposes the credentials to any other code running in the extension's storage scope.

src/background/background.js (Line 203)
chrome.webRequest.onBeforeSendHeaders.addListener(  function(e) {    chrome.storage.local.set({        bing_head_rq: JSON.stringify(e.requestHeaders)      })      .then(() => {});  }, {    urls: ["https://bing.com/"]  },  ["requestHeaders", "extraHeaders"]);

Generic WebSocket proxy: any caller can request `{action:'websocket', url, toSend}` and the background opens an arbitrary WebSocket to any URL, then streams data back. Combined with the `<all_urls>` content script and the fetch-proxy, this gives the extension (or anything that can talk to it) a fully bidirectional, origin-less network channel — a strong remote command-and-control / data-exfiltration primitive.

src/background/websocket_utils.js (Line 10)
async function handleActionWebsocket(action, tryTimes = 3) {  const {    socketID,    url,    toSend  } = action;  if (socketID == null) {    let ws = null;    try {      ws = new WebSocket(url);    } catch (error) {      if (tryTimes <= 0) return {        error: error.toString()      };      await new Promise(resolve => setTimeout(resolve, 500));      return handleActionWebsocket(action, tryTimes - 1);    }    ws.stream = new Stream();    websockets.push(ws);    ws.onopen = () => {      if (toSend) ws.send(toSend);    }    ws.onmessage = ({      data    }) => {      ws.stream.write(data);    }    ws.onclose = ({      wasClean    }) => {      ws.stream.write(`{wasClean:${wasClean}}`);    };    return {      socketID: websockets.length - 1    };  }  const ws = websockets[socketID];  if (!ws) return {    error: `Error: websocket ${socketID} not available`  };  if (toSend) {    ws.send(toSend);    return {      status: 'Success'    };  }  return ws.stream.read().then((packet) => ({    readyState: ws.readyState,    packet  }));}

This content script is registered to run at document_start inside an iframe pointed at a specific bing.com favicon URL, and accepts a list of script URLs from postMessage and inserts them as `<script src=...>` tags into the bing.com document. This is dynamic script injection executing inside bing.com's web origin — a remote-code-loading pattern that is normally forbidden in MV3, deliberately constructed to bypass that restriction by trampolining through bing.com.

src/chat/offscreen/iframe_script.js (Line 5)
(() => {  window.parent.postMessage('iframe-script-ready', '*');  window.addEventListener('message', onReceiveMessageFromParent);  function onReceiveMessageFromParent(event) {    if (event.origin !== new URL(chrome.runtime.getURL(""))      .origin) return;    const data = event.data;    if (!('scripts' in data)) return;    data.scripts.forEach(insertScript);    acknowledge(data.messageId, data.scriptElementId);    window.removeEventListener('message', onReceiveMessageFromParent);  }  function insertScript(src) {    const scriptElement = document.createElement('script');    scriptElement.type = 'text/javascript';    scriptElement.src = src;    document.body.appendChild(scriptElement);  }})();

The offscreen document loads an iframe to a bing.com URL specifically chosen because the manifest registers a content script on it; that content script then injects extension JS into the bing.com origin. This trampoline executes extension code inside the bing.com web origin so it can issue cookie-bearing fetches and WebSockets to sydney.bing.com — effectively privilege escalation that lets the extension act as the logged-in user on Bing.

src/chat/offscreen/offscreen.js (Line 1)
const strings = {  scripts: ["src/background/websocket_utils.js", "src/chat/offscreen/bing_socket.js"],  iframeSrc: "https://www.bing.com/sa/simg/favicon-trans-bg-blue-mg.ico?bing-chat-gpt-4-in-google",}setupIframe(strings.scripts.map((src) => chrome.runtime.getURL(src)));function setupIframe(scripts) {  const iframe = createIframe(strings.iframeSrc);  window.addEventListener('message', ({    data  }) => {    switch (data) {      case 'iframe-script-ready':        injectScriptToIframe(iframe, scripts);        break;      case 'socket-script-ready':        socketScriptReady.val = true;        break;    }  });  chrome.runtime.onMessage.addListener(onReceiveMessageFromExtension);}function createIframe(src) {  const iframe = document.createElement('iframe');  iframe.src = src;  document.firstElementChild.appendChild(iframe);  return iframe;}

Code injected into the bing.com origin issues a `credentials:"include"` request to bing.com's Sydney conversation endpoint and reads back the X-Sydney-Conversationsignature and X-Sydney-Encryptedconversationsignature headers, then returns those auth tokens to the extension. This silently lifts authenticated Bing Copilot session tokens out of the user's browser session and propagates them to other extension components.

src/chat/offscreen/bing_socket.js (Line 10)
async function handleMessage(message) {    switch (message.action) {      case 'session':        const response = await fetch(`https://www.bing.com/turing/conversation/create`, {          credentials: "include",        });        const ret = await response.json();        if (response.headers.has('X-Sydney-Conversationsignature')) {          ret['conversationSignature'] = response.headers.get('X-Sydney-Conversationsignature');        }        if (response.headers.has('X-Sydney-Encryptedconversationsignature')) {          ret['sec_access_token'] = response.headers.get('X-Sydney-Encryptedconversationsignature');        }        return ret;

A second fetch primitive that takes any `api` or `link` string from a content-script message and returns the raw body. Together with the broad `https://*/*` content script match it lets page-side code arbitrarily scrape any URL through the extension and receive the raw response text — useful for bulk content harvesting and reflecting third-party content into pages.

src/background/background.js (Line 73)
async function handleActionFetchResult(action) {  let url = String(action.api || action.link);  if (url.startsWith('http://'))    url = 'https' + url.slice(4);  const response = await fetch(url, {      credentials: 'omit'    })    .catch(e => ({      error: e.toString()    }));  return [action, await response.text()]}

Content scripts are injected into every HTTPS site (`https://*/*`) at document_end, far beyond the search-engine surface area the extension actually advertises. Combined with `<all_urls>` host permissions and the background fetch/websocket proxies, this means the extension's content code (and anything it later loads) runs on banking, email, SaaS, intranet etc. with the ability to read DOM and exfiltrate via the SW.

manifest.json (Line 257)
{  "content_scripts": [    {      "matches": [        "https://www.bing.com/sa/simg/favicon-trans-bg-blue-mg.ico?bing-chat-gpt-4-in-google"      ],      "all_frames": true,      "run_at": "document_start",      "js": [        "src/chat/offscreen/iframe_script.js"      ]    },    {      "matches": [        "https://*/*"      ],      "run_at": "document_end",      "js": [        "src/libs/math.min.js",        "src/libs/highlight.min.js",        "src/libs/tex-svg.js",        "src/libs/drawdown.js",        "src/utils.js",        "src/constants.js",        "src/settings.js",        "src/chat/message.js",        "src/chat/chat_session.js",        "src/chat/bingchat_session.js",        "src/context.js",        "src/engine-specifics.js",        "src/chat/init.js",        "src/run.js"      ]    }  ]}

By severity

Critical0
High6
Medium3
Low0

Versions scanned

Showing 1 of 2 scanned versions with more than one unique finding. Counts are unique findings that include each version.

Extension VersionCode Review Findings
1.0.09

Files with findings

7 distinct paths — top paths by unique finding count:

  • src/background/background.js3
  • manifest.json1
  • src/background/websocket_utils.js1
  • src/chat/offscreen/bing_socket.js1
  • src/chat/offscreen/iframe_script.js1
  • src/chat/offscreen/offscreen.js1
  • src/rule_resources/rules.json1
S.No.
Category
Severity
File
Summary
Found in Version
1Credential Theft
high
src/background/background.js (line 203)The service worker uses webRequest with the `extraHeaders` opt-in to capture the full outgoing request headers for bing.com (including Cookie, Authorization and other normally-redacted values) and persists them verbat…
1.0.0
2Network Interception
high
src/rule_resources/rules.json (line 1)declarativeNetRequest rule overrides User-Agent, Sec-CH-UA, Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version-List and a base64 origin-trial token to impersonate Microsoft Edge 112 on every bing.com main_frame…
1.0.0
3Network Interception
high
src/background/background.js (line 33)The background service worker exposes an unauthenticated `fetch` proxy: any content script (injected on every https://*/* page) can post `{action:'fetch', url, params}` and the SW will issue an arbitrary cross-origin …
1.0.0
4Network Interception
high
src/background/websocket_utils.js (line 10)Generic WebSocket proxy: any caller can request `{action:'websocket', url, toSend}` and the background opens an arbitrary WebSocket to any URL, then streams data back. Combined with the `<all_urls>` content script and…
1.0.0
5Privilege Escalation
high
src/chat/offscreen/offscreen.js (line 1)The offscreen document loads an iframe to a bing.com URL specifically chosen because the manifest registers a content script on it; that content script then injects extension JS into the bing.com origin. This trampoli…
1.0.0
6Remote Code Loading
high
src/chat/offscreen/iframe_script.js (line 5)This content script is registered to run at document_start inside an iframe pointed at a specific bing.com favicon URL, and accepts a list of script URLs from postMessage and inserts them as `<script src=...>` tags in…
1.0.0
7Credential Theft
medium
src/chat/offscreen/bing_socket.js (line 10)Code injected into the bing.com origin issues a `credentials:"include"` request to bing.com's Sydney conversation endpoint and reads back the X-Sydney-Conversationsignature and X-Sydney-Encryptedconversationsignature …
1.0.0
8Unauthorized Data Collection
medium
src/background/background.js (line 73)A second fetch primitive that takes any `api` or `link` string from a content-script message and returns the raw body. Together with the broad `https://*/*` content script match it lets page-side code arbitrarily scra…
1.0.0
9Unauthorized Data Collection
medium
manifest.json (line 257)Content scripts are injected into every HTTPS site (`https://*/*`) at document_end, far beyond the search-engine surface area the extension actually advertises. Combined with `<all_urls>` host permissions and the back…
1.0.0
URLs
49
IPv4
2
IPv6
0

URLs

View the external URLs this extension communicates with to understand its network activity and data interactions.

Gain full insight into all external connections.

Upgrade for full visibility.

clients2.google.com/service/update2/crxhttps://clients2.google.com/service/update2/crx
www.bing.com/sa/simg/favicon-trans-bg-blue-mg.icohttps://www.bing.com/sa/simg/favicon-trans-bg-blue-mg.ico?bing-chat-gpt-4-in-google
*/*https://*/*
bing.com-https://bing.com/
www.bing.com/searchhttps://www.bing.com/search
www.bing.com/searchhttps://www.bing.com/search?form=MY0291&OCID=MY0291&q=Copilot&showconv=1
login.live.com/login.srfhttps://login.live.com/login.srf?wa=wsignin1.0&wreply=https%3A%2F%2Fwww.bing.com%2Ffd%2Fauth%2Fsignin%3Faction%3Dinteractive%26provider%3Dwindows_live_id%26return_url%3Dhttps%3A%2F%2Fwww.bing.com%2F%3Fwlexpsignin%3D1%26src%3DEXPLICIT
github.com/arthurdejong/python-stdnum/https://github.com/arthurdejong/python-stdnum/
pypi.org/project/python-stdnum/https://pypi.org/project/python-stdnum/
arthurdejong.org/python-stdnum/https://arthurdejong.org/python-stdnum/
Showing 1 to 10 of 50 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

99.0.0.0
IPv4
-
112.0.0.0
IPv4
-
Version
Size
Is Malicious
Findings
Permhash
1.0.0
Latest
1.05 MB
Malicious
9
1.0.1
1.06 MB
Malicious
Showing 1 to 2 of 10 rows
Rows per page:

Code Diff

Compare extension code between any two versions.

0 changed files (scanned top 25 shared text files)

No comparable text files found between these versions.

Browse and explore files within this extension package

Gain full insight into all external connections.

Upgrade for full visibility.