EditThisCookie

ID: fngmhnnpilhplaeedifhccceomclgfbg

Could be malicious

Supported Languages

🇸🇦Arabic
🇧🇷Brazilian Portuguese
🇨🇳Chinese (Simplified)
🇹🇼Chinese (Traditional)
🇨🇿Czech
🇩🇰Danish
🇳🇱Dutch
🇺🇸English
🇪🇪Estonian
🇫🇮Finnish
🇫🇷French
🇩🇪German
🇬🇷Greek
🇮🇱Hebrew
🇭🇺Hungarian
🇮🇩Indonesian
🇮🇹Italian
🇯🇵Japanese
🇰🇷Korean
🇱🇹Lithuanian
🇲🇾Malay
🇳🇴Norwegian
🇮🇷Persian
🇵🇱Polish
🇵🇹Portuguese
🇷🇴Romanian
🇷🇺Russian
🇷🇸Serbian
🇸🇰Slovak
🇪🇸Spanish
🇸🇪Swedish
🇮🇳Tamil
🇹🇷Turkish
🇺🇦Ukrainian
🇻🇳Vietnamese

Extension Info & Metadata

Status
Removed
Version
1.5.0
Size
1.35 MB
Rating
4.4/5
Reviews
11,442
Users
2,000,000
Type
Extension
Updated
Aug 14, 2024
Category
Productivity Developer
Price
Free
Featured
No
Visibility
Listed
Mature
No
By Google
No
Trusted
Yes

Publisher Contextual Analysis

Trusted
Author
https://editthiscookie.comView Profile
Country
GB
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
Yes
Mailbox exists
Yes
Address
Ridgdale Street London E32TW GB
Website
Visit
Total Extensions
1
Active
0
Obsolete
1
Listed
1
Unlisted
0
Total Users
2,000,000

EditThisCookie is a cookie manager. You can add, delete, edit, search, protect and block cookies!

The first and best cookie manager for Google Chrome. ★ Edit, delete, create cookies ★ Make them read-only ★ Block them (create filters) ★ Export to JSON, Netscape cookie file (perfect for wget and curl), Perl::LPW ★ Import from JSON ★ Limit the maximum expiration date of any cookie ★ Improve the performance, remove old ones ★ Import a cookies.txt file

Item
Type
Severity
Description
<all_urls>
Permission
Critical
This permission grants access to all websites without restriction. Rated High because it can access any web content, monitor all web activity, and potentially steal sensitive data across all 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.
clipboardWrite
Permission
High
This permission allows modification of clipboard content. Rated High because it can inject malicious content into the clipboard, modify copied passwords, and manipulate copied data.
Contextual Risk Factors
Risk Factor
High
The following context increases the overall risk:• 15% increase: Older manifest version lacks modern security controls
tabs
Permission
Medium
This permission enables tab management and monitoring. Rated Medium because it can track open tabs, access tab metadata, and monitor user browsing patterns.
unlimitedStorage
Permission
Medium
This permission removes storage quota restrictions. Rated Medium because it can store large amounts of user data without limits, potentially impacting browser performance and storing extensive tracking data.
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.
Older Manifest Version
Risk Factor
Medium
This extension uses Manifest Version 2
contextMenus
Permission
Low
This permission adds items to browser context menus. Rated Medium because it only modifies right-click menus without access to page content.
notifications
Permission
Low
This permission displays system notifications. Rated Low because it can only show user-visible notifications without accessing system data.

The extension dynamically injects a remote script from Google Analytics into its background context. Remote script loading is a high-risk pattern in extensions because the fetched code executes inside a privileged extension page rather than being fully packaged and reviewable in the CRX.

js/ga.js (Line 1)
var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-33054271-5']);_gaq.push(['_setSessionCookieTimeout', 0]);_gaq.push(['_trackPageview']);(function() {  var ga = document.createElement('script');  ga.type = 'text/javascript';  ga.async = true;  ga.src = 'https://ssl.google-analytics.com/ga.js';  var s = document.getElementsByTagName('script')[0];  s.parentNode.insertBefore(ga, s);})();setInterval(function() {  _gaq.push(['_trackEvent', 'Heartbeat', 'Heartbeat', true]);}, 4 * 60 * 1000);

This code enables telemetry by sending a pageview and a recurring 'Heartbeat' event every 4 minutes to a Google Analytics property. It does not appear to send cookie contents directly, but it does implement persistent usage tracking from a privileged background page without any visible user consent flow in the reviewed code.

js/ga.js (Line 1)
var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-33054271-5']);_gaq.push(['_setSessionCookieTimeout', 0]);_gaq.push(['_trackPageview']);(function() {  var ga = document.createElement('script');  ga.type = 'text/javascript';  ga.async = true;  ga.src = 'https://ssl.google-analytics.com/ga.js';  var s = document.getElementsByTagName('script')[0];  s.parentNode.insertBefore(ga, s);})();setInterval(function() {  _gaq.push(['_trackEvent', 'Heartbeat', 'Heartbeat', true]);}, 4 * 60 * 1000);

On install and update, the extension opens external pages over plain HTTP rather than HTTPS. That is not direct malware behavior by itself, but it is a suspicious legacy pattern because the destination content could be modified in transit and used for user redirection or phishing.

js/background.js (Line 21)
data.lastVersionRun = currentVersion;if (oldVersion !== currentVersion) {  if (oldVersion === undefined) { //Is firstrun    chrome.tabs.create({      url: 'http://www.editthiscookie.com/start/'    });  } else {    chrome.notifications.onClicked.addListener(function(notificationId) {      chrome.tabs.create({        url: 'http://www.editthiscookie.com/changelog/'      });      chrome.notifications.clear(notificationId, function(wasCleared) {});    });    var opt = {      type: "basic",      title: "EditThisCookie",      message: _getMessage("updated"),      iconUrl: "/img/icon_128x128.png",      isClickable: true    };    chrome.notifications.create("", opt, function(notificationId) {});  }}

By severity

Critical0
High18
Medium15
Low5

Versions scanned

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

Extension VersionCode Review Findings
1.6.24
1.6.117
1.614
1.5.03

Files with findings

14 distinct paths — top paths by unique finding count:

  • js/ga.js9
  • js/background.js8
  • js/utils.js3
  • devtools/background-devtools.js2
  • devtools/panel.js2
  • js/cookie_helpers.js2
  • js/options_main_page.js2
  • lib/i18n_translator.js2
S.No.
Category
Severity
File
Summary
Found in Version
1Code Injection
high
lib/jquery.jeditable.js (line 368)The select content handler uses eval() to parse a JSON string returned from a server-controlled loadurl endpoint. Any server response or attacker-influenced content reaching this code path is executed as arbitrary Jav…
2Credential Theft
high
js/utils.js (line 18)When a block rule is added, chrome.cookies.getAll({}) is called with an empty filter, which retrieves every cookie from every domain in every cookie store. This is a broad credential sweep — every session token, auth …
3Credential Theft
high
devtools/background-devtools.js (line 36)The background devtools page retrieves all cookies for an inspected tab URL and relays the full cookie array — including session tokens, HttpOnly cookies, and secure cookies — via a port message to the devtools panel …
4Credential Theft
high
devtools/background-devtools.js (line 13)The background page accepts arbitrary cookie modification commands from the devtools panel via message passing — deleting existing cookies and setting new ones for any URL — with no authentication or origin check beyo…
5Credential Theft
high
options_pages/user_preferences.js (line 222)The function calls `chrome.cookies.getAll({})` with an empty filter, which retrieves ALL cookies across ALL domains in the browser, then iterates and modifies every cookie's expiration date. This is the broadest possi…
6Data Exfiltration
high
lib/jquery.jeditable.js (line 266)When a cookie field form is submitted via jEditable, it POSTs cookie data (including name, value, domain) to settings.target and writes the raw server response to self.innerHTML without sanitization. The target URL is…
7Network Interception
high
js/background.js (line 111)The extension installs a blocking webRequest listener on all URLs (<all_urls>) with extraHeaders access, meaning it intercepts every single HTTP and HTTPS response the browser receives across all websites. The listene…
8Network Interception
high
js/background.js (line 111)A blocking webRequest listener intercepts all HTTP responses across every URL (<all_urls>) and can strip Set-Cookie response headers before they reach the browser. The blocking + extraHeaders flags grant the ability t…
9Network Interception
high
js/background.js (line 111)A blocking `webRequest.onHeadersReceived` listener intercepts ALL HTTP responses across all URLs and reads raw `Set-Cookie` header values — including cookie names, values, and domains — before the browser processes th…
10Network Interception
high
js/background.js (line 158)The `webRequest` listener is registered with `blocking` + `extraHeaders` on `<all_urls>`, granting access to otherwise-protected headers including `Set-Cookie` for every HTTP/HTTPS request in the browser. The `extraHe…
11Remote Code Loading
high
js/ga.js (line 6)The background page dynamically loads and executes a remote JavaScript file from ssl.google-analytics.com at runtime. The background page runs with elevated Chrome extension privileges including access to chrome.cooki…
12Remote Code Loading
high
js/ga.js (line 6)The GA analytics script is fetched and executed at runtime from an external server by dynamically injecting a script tag into the background page. The actual code executed is not contained within the extension package…
13Remote Code Loading
high
js/ga.js (line 1)The extension dynamically injects an external script from `https://ssl.google-analytics.com/ga.js` into the popup page at runtime using `document.createElement('script')`. This constitutes remote code loading — any co…
14Remote Code Loading
high
popup.html (line 19)The popup HTML loads `ga.js` which dynamically fetches and executes a remote Google Analytics script in the same execution context as the popup, which has access to `chrome.cookies`, `<all_urls>`, and all other privil…
15Remote Code Loading
high
js/ga.js (line 1)The extension dynamically injects a remote script from Google Analytics into its background context. Remote script loading is a high-risk pattern in extensions because the fetched code executes inside a privileged ext…
16Tracking
high
js/ga.js (line 1)This file is loaded as the last entry in the background page script array (manifest.json lines 23-31), meaning it runs persistently in a privileged extension context with access to the cookies API. It dynamically inje…
17Unauthorized Data Collection
high
js/ga.js (line 1)Google Analytics is loaded dynamically in the background page — a context with no UI and no user-initiated pageviews — and fires a 'Heartbeat' event every 4 minutes as a persistent beacon confirming the extension is a…
18Unauthorized Data Collection
high
devtools/panel.js (line 4)A persistent message channel is established between the devtools panel and the background page on load, immediately requesting all cookies for the inspected tab. The devtools panel operates in a privileged context wit…
19Code Injection
medium
lib/i18n_translator.js (line 7)The localizePage function uses jQuery's .html() to inject translated strings and i18n_argument attribute values into the DOM without sanitization. If any translated message string or attribute value contains HTML mark…
20Code Injection
medium
js/options_main_page.js (line 1)The `element` variable is set directly from the `page` URL query parameter or from `localStorage` without any whitelist validation before being concatenated into `location.href`. An attacker who can control the URL pa…
21Code Injection
medium
lib/i18n_translator.js (line 7)The `localizePage` function inserts translated strings via jQuery's `.html()` setter — equivalent to `innerHTML` assignment — without sanitization. If a locale message file were tampered with (the extension bundles 40…
22Credential Theft
medium
js/popup.js (line 309)The `importCookies` function accepts arbitrary JSON text pasted by the user and directly calls `chrome.cookies.set()` on each parsed cookie object without domain validation or sanitization. A crafted JSON payload coul…
23Other
medium
js/options_main_page.js (line 1)The options page reads the 'page' parameter directly from the URL query string via getUrlVars() and uses it unsanitized to construct a redirect target via location.href. This is an open redirect vulnerability — a mali…
24Other
medium
options_pages/options_page_chooser.js (line 6)The options page opens URLs to editthiscookie.com over plain HTTP (not HTTPS), exposing users to MITM attacks on those navigations. The id attribute from DOM elements is also directly interpolated into a navigation pa…
25Other
medium
js/utils.js (line 106)User-supplied filter strings (domain, name, value) are passed directly to new RegExp() without sanitization, creating a ReDoS (Regular Expression Denial of Service) vulnerability. A pathological regex in a cookie valu…
26Other
medium
js/utils.js (line 106)User-supplied filter rule strings (domain, name, value) are passed directly into `new RegExp()` without sanitization or escaping. This function is called inside the blocking `webRequest` handler, so a catastrophically…
27Tracking
medium
js/ga.js (line 12)A heartbeat event fires every 4 minutes from the background page to Google Analytics, continuously reporting to a third-party server that the user's browser is open and the extension is active. This leaks behavioral/p…
28Tracking
medium
js/ga.js (line 1)The extension silently tracks every popup open as a page view and fires a heartbeat telemetry event every 4 minutes to Google Analytics account `UA-33054271-5`, allowing the extension operator to monitor the precise u…
29Tracking
medium
js/ga.js (line 1)This code enables telemetry by sending a pageview and a recurring 'Heartbeat' event every 4 minutes to a Google Analytics property. It does not appear to send cookie contents directly, but it does implement persistent…
30Unauthorized Data Collection
medium
js/background.js (line 46)The background page registers a persistent listener on chrome.cookies.onChanged that fires for every cookie set or removed across all websites the user visits. On each event, it extracts the cookie name, domain, and f…
31Unauthorized Data Collection
medium
js/background.js (line 46)A global chrome.cookies.onChanged listener fires on every cookie change across all browsing contexts, reading the cookie name, domain, and value for each event. While ostensibly for a read-only cookie protection featu…
32Unauthorized Data Collection
medium
devtools/panel.js (line 34)The panel directly calls chrome.cookies.getAll() for any URL, retrieving all cookies associated with that origin including session tokens and auth cookies. Retrieved cookies are stored in module-level variables (tabUR…
33Unauthorized Data Collection
medium
js/background.js (line 46)The `chrome.cookies.onChanged` listener captures the name, domain, and value of every cookie change event across all domains in real time. The extension has unrestricted access to all cookie values — including session…
34Credential Theft
low
js/cookie_helpers.js (line 140)The cookie serialization functions (json, semicolonPairs, Netscape format) use an implicitly global cookie variable (no var/let/const), meaning the last-processed full cookie object — including its value, httpOnly fla…
35Credential Theft
low
js/cookie_helpers.js (line 140)The `cookiesToString` functions serialize full cookie objects — including name, value, domain, path, secure flag, httpOnly flag, and expiration — into clipboard-ready strings. The variable `cookie` is assigned without…
36Other
low
popup.html (line 271)The help button in the popup links to an external HTTP (not HTTPS) URL opened from the privileged extension context. Plain HTTP navigations from extensions are susceptible to MITM interception and could be used to ser…
37Other
low
options_pages/support.html (line 45)The support page references getlocalization.com over plain HTTP. This third-party service appears defunct and the domain may have been re-registered by an unknown party. Links opened via chrome.tabs.create to plain HT…
38Phishing
low
js/background.js (line 21)On install and update, the extension opens external pages over plain HTTP rather than HTTPS. That is not direct malware behavior by itself, but it is a suspicious legacy pattern because the destination content could b…
URLs
47
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.

fsf.org-http://fsf.org/
www.gnu.org/licenses/http://www.gnu.org/licenses/
www.gnu.org/philosophy/why-not-lgpl.htmlhttp://www.gnu.org/philosophy/why-not-lgpl.html
editthiscookie.com-http://editthiscookie.com/
www.getlocalization.com/editthiscookie/http://www.getlocalization.com/editthiscookie/
chrome.google.com/webstore/detail/edit-this-cookie/fngmhnnpilhplaeedifhccceomclgfbghttps://chrome.google.com/webstore/detail/edit-this-cookie/fngmhnnpilhplaeedifhccceomclgfbg
curl.haxx.se/rfc/cookie_spec.html/http://curl.haxx.se/rfc/cookie_spec.html\
curl.haxx.se/rfc/cookie_spec.htmlhttp://curl.haxx.se/rfc/cookie_spec.html
curl.haxx.se/rfc/cookie_spec.html///http://curl.haxx.se/rfc/cookie_spec.html\\\
curl.haxx.se/rfc/cookie_spec.hmtl/http://curl.haxx.se/rfc/cookie_spec.hmtl\
Showing 1 to 10 of 50 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

No IP addresses found
Showing 1 to 6 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.