Manuals Search

ID: fdnjcphgbbamiigahopckmgopddacnfa

Could be malicious

Supported Languages

🇺🇸US English

Extension Info & Metadata

Status
Removed
Version
1.23.801
Size
1.16 MB
Rating
0.0/5
Reviews
0
Users
14,098
Type
Extension
Updated
Nov 22, 2023
Category
Productivity Tools
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
Yes

Publisher Contextual Analysis

Trusted
Author
Manuals LibraryView Profile
Country
US
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Address
248 3rd St Oakland, CA 94607-4375 US
Website
Visit
Total Extensions
4
Active
2
Obsolete
2
Listed
3
Unlisted
1
Total Users
263,385

Search Manuals in the browser address bar and manage your web search & manuals search provider.

This extension updates browser search provider and enable users to get results for free product Manuals. How do I Search for Free Manuals? 1. Type "manuals" in the browser address bar and click "Space" or "Tab" in your keyboard 2. Input your search keyword and hit ""enter"" You can also Search for Manuals by clicking on Extension icon in browser and using the input box in Extension Modal. Easily get access to millions of web and manuals search results with this extension. This extension updates your browser default search settings in the following ways: - Allows for custom Manuals searches directly from your browser omnibox - Sets Yahoo as the default search setting in your browser" By installing this extension, you agree to the Terms of Use (https://manualsearch-serp.org/terms-of-service/) and Privacy Policy (https://manualsearch-serp.org/privacy-policy/)

Item
Type
Severity
Description
declarativeNetRequest
Permission
Critical
This permission allows the extension to define rules to block, redirect, or modify network requests. Rated Critical because it can control all network traffic, potentially blocking security updates or redirecting to malicious sites.
cookies
Permission
High
This permission provides full access to read and modify browser cookies. Rated High because it can steal session tokens, modify authentication cookies, and compromise accounts across 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.
*://*.manualsearch-svc.org/*
Host
Medium
Host permission — access limited to this URL pattern.
search
Permission
Low
This permission accesses search functionality. Rated Low because it only interacts with the browser's search feature without accessing search history.

Combined with chrome_settings_overrides.search_provider in the manifest (which hijacks the default browser search to manualsearch-svc.org), this dynamic declarativeNetRequest rule rewrites every search request through services.manualsearch-svc.org/crx/search.php, attaching the installation guid for cross-session tracking. This is classic search-hijacking monetization: every query the user types in the address bar is routed through the operator's affiliate proxy with a persistent identifier.

lib/ext.js (Line 168)
chrome.declarativeNetRequest.updateDynamicRules({  removeRuleIds: [1],  addRules: [{    id: 1,    priority: 1,    action: {      type: "redirect",      redirect: {        regexSubstitution: `https://services.${this.config.apiDomain}/crx/search.php?k=\\1&action=ds&guid=${guid}`,      },    },    condition: {      regexFilter: `https://services.${this.config.apiDomain}/search/(.*)`,      isUrlFilterCaseSensitive: false,      resourceTypes: ["main_frame"],    },  }, ],});

The extension forces itself as the default search provider (is_default: true) under the generic name 'Web', sending every address-bar query and every keystroke (suggest_url) to manualsearch-svc.org. This is search hijacking — users typing into Chrome's omnibox have their queries silently exfiltrated to a third-party affiliate domain rather than their chosen search engine.

manifest.json (Line 30)
{  "chrome_settings_overrides": {    "search_provider": {      "name": "Web",      "is_default": true,      "encoding": "UTF-8",      "keyword": "search",      "favicon_url": "https://services.manualsearch-svc.org/favicon.ico",      "search_url": "https://services.manualsearch-svc.org/search/{searchTerms}",      "suggest_url": "https://sug.manualsearch-svc.org/sug/?s={searchTerms}"    }  }}

Reads a JSON-encoded 'ext_config' cookie set by manualsearch-svc.org and copies all its key/value pairs into chrome.storage. This is a covert affiliate/partner-tagging channel — landing pages drop a cookie containing identifiers (subid, tbid, partner_name, region, location, ty_url, etc.) which the extension consumes silently at install to attribute the install and customize behavior, a hallmark of search-hijacker affiliate distribution networks.

lib/ext.js (Line 71)
const getConfigCookie = async () => {  const cookies = await chrome.cookies.getAll({    domain: this.config.apiDomain,    name: CONFIG_COOKIE_NAME,  });  for (let i = 0; i < cookies.length; i++) {    const cookieObj = JSON.parse(cookies[i].value);    if (cookieObj && cookieObj !== null)      Object.keys(cookieObj)      .map(        async key =>          await setSetting(key, cookieObj[key], key === "guid")      );  }};

On first install, the extension calls a remote 'install' API on ext.manualsearch-svc.org sending partner/region/extId/version identifiers, and then writes whatever arbitrary key/value pairs the server returns into chrome.storage with no validation or schema. Server-controlled config blindly persisted to extension storage is a remote configuration / kill-switch channel that lets the operator change behavior post-install without an extension update.

lib/ext.js (Line 115)
const install = async () => {  const src =    `https://ext.${this.config.apiDomain}/api/v2/json/install?` +    `&eType=${this.config.eType}&ext.yid=${                this.config.yID            }&ext.domain=${await getSetting(                "domain"            )}&ext.partner_name=${await getSetting(                "partner_name"            )}&ext.region=${await getSetting(                "region"            )}&ext.id=${await getSetting(                "extId"            )}&ext.version=${await getSetting(                "extVersion"            )}`;  const installRes = await fetch(src, {    headers: {      "Content-Type": "application/json"    },  });  ...  const config = await installRes.json();  await Promise.all(    Object.entries(config)    .map(      async ([key, value]) =>        await setSetting(key, value, key === "guid")    )  );};

Sets a beacon URL fired on uninstall that includes the persistent guid and a base64-encoded uninstallID (decodes to '358393Ly9hcmNhZGV0YWIuY29t' → '//arcadetab.com'-style affiliate). This sends an attribution ping to the operator on every removal so the affiliate network can track churn and potentially redirect the closing tab to another monetized landing page.

lib/ext.js (Line 206)
const setUninstall = async () => {  const uninstallUrl = `https://uninstall.${this.config.apiDomain}/?id=${            this.config.uninstallID        }&guid=${await getSetting("guid", true)}`;  chrome.runtime.setUninstallURL(uninstallUrl, () => {});};

Immediately after install, the extension closes the user's Chrome Web Store tab and reaches back into the affiliate landing-page tab (URL stored from a cookie) to mutate it with an 'ext-installed' fragment, then opens an additional thank-you tab read from a 'ty_url' cookie. This is silent post-install tab manipulation used by affiliate-distribution networks to fire conversion pixels and conceal the install funnel from the user.

lib/ext.js (Line 38)
const updateCWSAndLPTab = async () => {  if (await getSetting("location")) {    const cwsTabs = await chrome.tabs.query({      url: `*://chrome.google.com/webstore*${await getSetting(                    "extId"                )}*`,    });    for (const tab of cwsTabs) {      if (await getSetting(TY_COOKIE_NAME)) {        chrome.tabs.remove(tab.id);      }    }    const lpTab = await chrome.tabs.query({      url: `${await getSetting("location")}*`,    });    if (lpTab && lpTab[0] && lpTab[0].id) {      const updatedTab = await chrome.tabs.update(lpTab[0].id, {        url: updateHash(lpTab[0].url, "ext-installed"),      });    }  }  openFirstRunPage();};

By severity

Critical2
High2
Medium2
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.23.8016

Files with findings

2 distinct paths — top paths by unique finding count:

  • lib/ext.js5
  • manifest.json1
S.No.
Category
Severity
File
Summary
Found in Version
1Network Interception
critical
lib/ext.js (line 168)Combined with chrome_settings_overrides.search_provider in the manifest (which hijacks the default browser search to manualsearch-svc.org), this dynamic declarativeNetRequest rule rewrites every search request through…
2Network Interception
critical
manifest.json (line 30)The extension forces itself as the default search provider (is_default: true) under the generic name 'Web', sending every address-bar query and every keystroke (suggest_url) to manualsearch-svc.org. This is search hij…
3Tracking
high
lib/ext.js (line 71)Reads a JSON-encoded 'ext_config' cookie set by manualsearch-svc.org and copies all its key/value pairs into chrome.storage. This is a covert affiliate/partner-tagging channel — landing pages drop a cookie containing …
4Unauthorized Data Collection
high
lib/ext.js (line 115)On first install, the extension calls a remote 'install' API on ext.manualsearch-svc.org sending partner/region/extId/version identifiers, and then writes whatever arbitrary key/value pairs the server returns into chr…
5Tracking
medium
lib/ext.js (line 206)Sets a beacon URL fired on uninstall that includes the persistent guid and a base64-encoded uninstallID (decodes to '358393Ly9hcmNhZGV0YWIuY29t' → '//arcadetab.com'-style affiliate). This sends an attribution ping to …
6Tracking
medium
lib/ext.js (line 38)Immediately after install, the extension closes the user's Chrome Web Store tab and reaches back into the affiliate landing-page tab (URL stored from a cookie) to mutate it with an 'ext-installed' fragment, then opens…
URLs
13
IPv4
0
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.

ext.${this.config.apidomain}/api/v2/json/installhttps://ext.${this.config.apiDomain}/api/v2/json/install?`
services.${this.config.apidomain}/crx/search.phphttps://services.${this.config.apiDomain}/crx/search.php?k=\\1&action=ds&guid=${guid}`,
services.${this.config.apidomain}/search/(.*https://services.${this.config.apiDomain}/search/(.*
uninstall.${this.config.apidomain}-https://uninstall.${this.config.apiDomain}/?id=${
clients2.google.com/service/update2/crxhttps://clients2.google.com/service/update2/crx
services.manualsearch-svc.org/favicon.icohttps://services.manualsearch-svc.org/favicon.ico
services.manualsearch-svc.org/search/%7BsearchTerms%7Dhttps://services.manualsearch-svc.org/search/{searchTerms}
sug.manualsearch-svc.org/sug/https://sug.manualsearch-svc.org/sug/?s={searchTerms}
fonts.googleapis.com/css2https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&display=swap
cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.csshttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css
Showing 1 to 10 of 20 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

No IP addresses found
Version
Size
Is Malicious
Findings
Permhash
1.23.801
Latest
1.16 MB
Malicious
6
1.23.802
1.16 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.