URGENT: SECURITY: New maintainer is probably malicious
calumapplepie opened this issue · comments
TLDR: The old maintainer appears to have sold the extension to parties unknown, who have malicious intent to exploit the users of this extension in advertising fraud, tracking, and more. In v7.1.8 of the extension (published to the web store but NOT to GitHub), arbitrary code was executed from a remote server, which appeared to be used to commit a variety of tracking and fraud actions. After Microsoft removed it from Edge for malware, v7.1.9 was created without this code: that has been the code distributed by the web store since November, and it does not appear to load the compromised script. However, the malicious maintainer remains in control, however, and can introduce an update at any time. It further appears that, while v7.1.9 was what was listed on the store, those who had the hostile v7.1.8 installed did NOT automatically receive the malware-removing update, and continued running the hostile code until Google force-disabled the extension.
The Great Suspender has been removed from the Chrome Web Store. To recover your tabs, see issue #526, or continue reading
The code in the Github repository is currently safe, and the most recent tagged release happened before the transfer of ownership. To use that version, and avoid needing to finagle URL's, enable Chrome developer mode, download and extract a copy of the code, then navigate to your extensions menu and select 'Load Unpacked Extension'.
Some others have had success simply pressing the "back" button on suspended tabs: everyone should note that the site's URL is included in the URL of the suspended page. For a pictorial guide on doing this, see this comment. Further, if you just want to reload lost tabs, you can use some form of File History on Chrome's user profile directory (while chrome is closed!), before restarting chrome and using the extension menu to unsuspend all tabs before your computer realizes the extension is banned again.
Because the malicious code loaded from a server by the extension in version 7.1.8 was heavily obfuscated, it is hard to say what may have been compromised. However, those who did manage to conduct an successful analysis of the code reported no password-stealing functionality in the copies that were archived. Indeed, it is highly unlikely that the extension would have been able to steal passwords. That being said, it is theoretically plausible: see my comment here. If you don't already, I highly recommend using a password manager like Bitwarden, to reduce the difficulty of changing your passwords, and to prevent an site that transmits and stores password information in a insecure way from causing the rest of your accounts to be compromised. Additionally, enabling two factor authentication wherever you can is a very easy and powerful way to make it virtually impossible for an attacker to get your data, even if they managed to retrieve passwords.
Full description of the issue:
@deanoemcke, the original developer, chose to step back from the extension in June 2020. As a replacement maintainer, he chose an unknown entity, who controls the single-purpose @greatsuspender Github account. Much was suspicious about this change, including mention of payment for an open-source extension, and complete lack of information on the new maintainers identity. However, as the new maintainer did nothing for several months, it was believed that there was simply a failed transfer. In October 2020, the maintainer updated chrome store package. The update raised red flags for some users, because the changelog was not modified and there was no tag created in GitHub. On investigation, it appeared that the extension was now connecting to various third-party servers, and executing code from them.
This lead a few users to panic, however, on closer investigation, it appeared that the third-party servers were part of an alternative to Google Analytics: and the changes shipped along with a new (though unexplained, #1260) tracking deactivation. It appears that deactivation works. We would later discover that this was wrong: See below
The discussion continued, however, because the new update also requested additional permissions, including the ability to manipulate all web requests. That lets the extension do what it pleases, including inserting ads, blocking sites, forcible redirects.... This change was supposedly in order to enable new screenshot functionality, but that was unclear, and probably shouldn't be needed.
Furthermore, the web store extension has diverged from its Github source. A minor change in the manifest was now being shipped on the chrome web store, which was not included in Github. This is a major concern: though again, it has a possible innocent explanation. While some think it is illegal given the license on the code, this may not be a GPL violation.. Because the minified script is not part of the extension, the license does not apply to it. Because of Web Store rules, the extension itself can be unpacked and inspected in full, human-readable form, likely satisfying the copyleft restrictions.
As a final red flag, no part of the web store posting has been updated to account for this. @deanoemcke remains listed as the maintainer, and the privacy policy makes no mention of the new tracking or maintainer. It has been several months since the transfer, but almost nothing reflects that change.
@deanoemcke did respond to the thread, after a significant delay. He confirmed much of what is above, including that the secret changes are limited to analytics and are disabled by the flag. However, he hasn't yet clarified what his relationship or basis of trust with the new maintainer is, nor has he explained why the initial post mentions a 'purchase'.
On November 6th, @lucasdf discovered a smoking gun that the new maintainer is malicious. Although OpenWebAnalytics is legitimate software, it does not provide the files executed by the extension. Those are hosted on the unrelated site owebanalytics.com, which turns out to be immensely suspicious. That site was created at the same time as the update, and is clearly designed to appear innocent, being hosted on a public webhost, and being given a seemingly innocent homepage from the CentOS project. However, the site contains no real information other than the tracking scripts, appears to have been purchased with BitCoin, and is only found in the context of this extension. Most importantly, the minified javascript differs significantly from that distributed by the OWA project.
@thibaudcolas has done a more detailed analysis then my quick look. He quickly located additional hardcoded values related to other, confirmed malicious extensions, implying that the new maintainer is responsible for them. He also found incredibly suspicious additional information, that makes it clear that the extension was not loading a modified version of OWA, but a trojan disguised as it. OWA has a PHP based backend, but the fakes are using NodeJS. The trojan sets cookies, which OWA doesn't use. The response to certain requests is a completely different type then legitimate OWA. Furthermore, @joepie91 has attempted to deconstruct the minified JS, and believes that the code intercepts all requests, meaning it can track you perfectly, and furthermore manipulates those requests and makes additional advertising requests. That means the author was probably attempting to commit several flavors of advertising fraud, as well as possibly tracking you globally.
While there once appeared to be an innocent explanation for this, I can no longer say that it is remotely likely. Using the chrome web store version 7.1.8 of this extension, without disabling tracking, executed code from an untrusted third-party on your computer, with the power to modify any and all websites that you see. The fact that disabling tracking still works is irrelevant given the fact that most of the 2 million users of this extension have no idea that that option even exists. The fact that the code may not be malware is meaningless in light of the fact that it can be changed without notice, and that it is minified (human-unreadable). The fact that a new version has since been pushed that disables this behavior isn't useful given that any future update reintroduicing the malicious code will occur without notifying the user.
Many users are worried enough about the changes that they completely uninstalled the extension, preferring alternatives instead. That extension has much fewer features, but is slightly better for performance. Others have begun building it from source, and installing it manually. If a person were to try to create a new web store release, they would need to change it significantly enough that Google wouldn't reject it as spam. To simply get a safe version for yourself, see further below. Before removing or modifying the extension on your computer, be sure to unsuspend all tabs, or you WILL lose them (though the original URL's can be extracted from the extension query's, and some are working on scripts to do just that, its easier to do just avoid all that.
Throughout the above discussions, which spanned several issues, now appear in news articles, the new maintainer has never posted on the thread, or interacted in any way with the repository. Despite an ongoing discussion about how they are plotting to destroy us all, they haven't done anything to assuage our concerns: likely in the hope that all those aware of the attack would move on eventually. They aren't dead, as they were quite quick to update the extension when Microsoft removed it for malware, and @deanoemcke reports that they. But the new maintainer might well be a literal cat on a keyboard, for the amount of interaction they have made with the community.
For those who don't want to continue using the extension, alternatives include Tabs Outliner, which lets you place tabs in an outline. Auto Tab Discard is very similar to TGS, however it always reloads the tab when it is focused. Session Buddy allows you to save tabs into "collections", that can be reviewed later, as well as providing security against crashes.
If you enjoy using the extension, and wish to continue using it as it was, download the source code from the Github repository (version 7.1.6), enable developer mode, select "Load unpacked extension", and point it at the /src directory. Bam! You are now running The Great Suspender as @deanoemcke created it. @aciidic has gone further, creating a new repository not under the control of the old maintainer, and with all tracking code removed, here. The Marvellous Suspender is another fork currently on the Chrome Web Store, for those who would prefer not to finagle with developer mode settings.
That concludes my summary. For more information, please do look further down on this thread, or at the original announcement (#1175). An analysis of the script is placed here.. Additional sources began covering this in January 2021, and a lot more picked it up after February Fourth for some bizarre reason that probably has nothing to do with the removal by Google.
Edit log
Edit 01: (2020-11-06) add details from this discussion
Edit 02: (2020-11-06) Update to reflect the newly discovered evidence for malice
Edit 03: (2020-12-06) Note technique to continue using TGS
Edit 04: (2021-01-03) Add "Urgent" to title (and WOW did people start noticing) (thanks twitter)
Edit 05: (2021-01-05) Note @thibaudcolas and his analysis.
Edit 06: (2021-01-08) Note @thibaudcolas's second analysis, clarify and copyedit throughout, and start adding dates to edits
Edit 07: (2021-01-08) Remind about the process of removing the extension, and note a bit more about maintainer
Edit 08: (2021-01-08) Last one for today, promise: Reformat edit list and other minor changes throughout,
Edit 09: (2021-02-04) Note removal from store
Edit 10: (2021-02-04) Fix bold
Edit 11: (2021-02-04) Add help for those worried about losing tabs in nice big bold letters
Edit 12: (2021-02-04) Add details about password security
Edit 13: (2021-02-04) Clarify compromise, beautify edit log
Edit 14: (2021-02-04) Obscure the fact that I made my first edits 9 months in the future (fix edit years)
Edit 15: (2021-02-05) Clarify probably breaches: regret decision to keep obsessive edit log
Edit 16: (2021-02-09) Realize that issue still contained the false implication that users were safe after November.
...
This lead a few users to panic, however, on closer investigation, it appeared that the third-party servers were part of an alternative to Google Analytics: and the changes shipped along with a new (though unexplained, #1260) tracking deactivation. It appears that deactivation works.
...
@deanoemcke did respond to the thread, after a significant delay. He confirmed much of what is above, including that the secret changes are limited to analytics and are disabled by the flag. However, he hasn't yet clarified what his relationship or basis of trust with the new maintainer is, nor has he explained why the initial post mentions a 'purchase'.
...
Are trckingbyte.com and trckpath.com part of Open Web Analytics? Because what I am seeing in @deanoemcke's post is him saying that he can't guarantee if the changes made are legitimate analytics or if they're malware:
I'm not an expert on what is legitimate analytics gathering ... and what is deemed malware.
I apologize for possibly exacerbating the "panic", but I am just asking, and trying to put a little extra emphasis on this, because when you say:
...on closer investigation, it appeared that _the third-party servers were part of an alternative to Google Analytics...
It just strikes me as sounding a little too forgiving / innocent, though I'm sure that's not your intent.
I also want to emphasize, @deanoemcke goes on to say in that post.
Giving the publisher the benefit of doubt, I would say that they have the right to collect extra analytics so long as it is within Google's policies, and is communicated to the user. There is a privacy policy linked on the chrome webstore (which I set up a while ago): https://greatsuspender.github.io/privacy
Of course, this assumes that Google are aware of these changes, and also that the linked privacy policy is still accurate.
We know that these new "analytics" were not communicated to the user. They do violate the established privacy policy. They violate Google's policies, as the information provided all over the extension's page at the Web Store is now inaccurate (owner, contact, saying the project is open source, etc) and the privacy policy itself is no longer accurate.
and @deanoemcke had previously assured us when this sale was announced:
...the project will remain open source and the code here on GitHub will continue to reflect the code published to the chrome webstore.
Although, apparently he cannot be held responsible for the actions of the current owner of the extension. But, this is why mom said you shouldn't make promises that you can't keep.
I appreciate you making this issue @TheMageKing, and I thank you for creating a more centralized location for discussion about this topic, which will hopefully reach more users and give them the information they need in order to make decisions about what to do. I apologize, because I realize much of what I said here is simply repeating what you already provided. I just felt the need to emphasize a couple of things.
Personally, I reported this extension at the Chrome Web Store on October 29, with the following:
"The extension was sold to an unknown party. This entity has "updated" the extension to v7.18 w/o publishing changes to Github. It is calling remote scripts and using remote tracking analytics, sending user information somewhere w/o user knowledge. PLEASE SEE: #1175 (comment) AND ALSO: #1175 (comment) .. Owner refuses to communicate or respond to anyone. Can only be considered as malicious/malware at this point. We have no idea what the full changes are to the code, or the ramifications of said changes."
I also reported the user @greatsuspender and the main repository to GitHub on October 29 with the following:
"This person/entity purchased the Chrome web browser extension "The Great Suspender" :
https://chrome.google.com/webstore/detail/the-great-suspender/klbibkeccnjlkjkiokjodocebajanakg
which has over 2 million users. The project is supposed to be open source, and the master repository for it is located here:
https://github.com/greatsuspender/thegreatsuspender
The announcement and information regarding the purchase/transfer is located here:
The new owner of the extension has made changes to the code, and pushed an update to the Chrome Web Store, bringing the version up to 7.18. However, they have NOT published the code changes to GitHub, and the latest release here is 7.16:
https://github.com/greatsuspender/thegreatsuspender/releases
Obviously, after the Nano fiasco, this has brought a great deal of warranted concern to the community. Despite many attempts from many people, they refuse to respond or communicate in any way with anyone. Neither does the former/original author. It has been discovered that the extension is now calling remote scripts. Please see:
and also:
The extension is now injecting a tracker which violates the Privacy Policy (also linked to from the Chrome Web Store) stated here:
https://greatsuspender.github.io/privacy
This privacy policy also has not been updated to reflect that the old owner no longer owns it, who the new owner is, or what their contact information might be. It states that the extension only uses Google Analytics, which is a lie.
The project can no longer be considered as open source, since the owner refuses to make the source open and available for review. It's my belief that this person/entity is acting in bad faith, and poses a danger to the community and to every Chrome user that installs this extension. This person has had every opportunity to clarify what is going on here, but apparently has no interest in transparency or communication.. leaving any reasonable person to wonder, why did they PURCHASE this Chrome extension?
Remote code execution w/o the user's knowledge. Code changes unpublished to GitHub, yet pushed to the Chrome Web Store. New trackers injected. Violating their own privacy policy.
Are trckingbyte.com and trckpath.com part of Open Web Analytics? Because what I am seeing in @deanoemcke's post is him saying that he can't guarantee if the changes made are legitimate analytics or if they're malware
AFAIK, Dean's intention there is to comment that he doesn't know where each user draws the line between analytics and malware. Some people might think any sort of analytics is malware: others might disagree.
As for the trckingbyte.com and trckpath.com paths, they are not involved. They were found in other extensions, but do not appear in the distributed Great Suspender. My comment on the other thread explains what they are, and how they are not related to open web analytics (Okay, they are, but related as "Hackers rewriting open-source software for malicious purposes", not "Official part of system")
I apologize for possibly exacerbating the "panic", but I am just asking, and trying to put a little extra emphasis on this, because when you say:
...on closer investigation, it appeared that _the third-party servers were part of an alternative to Google Analytics...
It just strikes me as sounding a little too forgiving / innocent, though I'm sure that's not your intent.
Actually, it was. The open web analytics system, host of owebanalytics.com, really is a google analytics alternative. The code is hosted on a github repo with 1.3k stars, and there are people elsewhere who like it. The only reason I said "appears to be" is because I am quite busy, and I didn't have time to try and conduct any sort of detailed probe beyond that the website existed and wasn't written by a poor English speaker.
I also want to emphasize, @deanoemcke goes on to say in that post.
Giving the publisher the benefit of doubt, I would say that they have the right to collect extra analytics so long as it is within Google's policies, and is communicated to the user. There is a privacy policy linked on the chrome webstore (which I set up a while ago): https://greatsuspender.github.io/privacy
Of course, this assumes that Google are aware of these changes, and also that the linked privacy policy is still accurate.We know that these new "analytics" were not communicated to the user. They do violate the established privacy policy. They violate Google's policies, as the information provided all over the extension's page at the Web Store is now inaccurate (owner, contact, saying the project is open source, etc) and the privacy policy itself is no longer accurate.
Indeed. This is the biggest reason why I am saying that they "appear malicious": those actions are major red flags, and it is sufficiently suspicious to justify a lot more scrutiny and skepticism than simple mistakes. But there is not yet evidence that they are actually malicious: everything can still be well explained by stupidity.
I'm not saying everything is rosy; there are major problems, right now. But it doesn't appear that we should start fearing for the safety of our passwords.
and @deanoemcke had previously assured us when this sale was announced:
...the project will remain open source and the code here on GitHub will continue to reflect the code published to the chrome webstore.
Although, apparently he cannot be held responsible for the actions of the current owner of the extension. But, this is why mom said you shouldn't make promises that you can't keep.
Yeah, mom seems to be right about a lot.
I appreciate you making this issue @TheMageKing, and I thank you for creating a more centralized location for discussion about this topic, which will hopefully reach more users and give them the information they need in order to make decisions about what to do. I apologize, because I realize much of what I said here is simply repeating what you already provided. I just felt the need to emphasize a couple of things.
Fair enough. I think I will edit that top post, to reflect some of this.
Personally, I reported this extension at the Chrome Web Store on October 29, with the following:
I, too have reported this on the web store. As a general rule, Google has more powers to remediate than Github: given that the source on Github is innocent, I doubt they will do much
I'll also respond to your comment in the other thread here, to condense this discussion more.
@TheMageKing, my comment was in reply to @ossilator's comment here, not to you. Regardless:
Oh, I know. I wanted to clear up some of your confusion.... The extension is not directly connecting to the trck.... domains. It lacks the permissions to do so, -=-=-= AFAIK =-=-=-. Those sites are definitely malicious: they are hosted via a bitcoin hosting company, and were found in malicious extensions.
>...Honestly, it's nothing personal, but this is exactly the problem. You DO NOT KNOW.
You might not be able to tell, but I hedge what I say quite a bit. I am not a Javascript developer, though I do comprehend it perfectly well. Nor do I design manifests for chrome applications.
By my understanding, based on a reading of the documentation on the subject, Google requires that all websites which the extension can connect to be independently specified in the manifest.json. In the section that I understand to control that, many sites are listed, including google-analytics.com, stats.g.doubleclick.net (the google analytics sites), and cdn.owebanalytics.com. The trck paths are not there, nor does the word 'trck' even appear anywhere in the distributed code.
So while I don't know, I can say that I am as certain as I can be, short of a Google developer stating otherwise.
-=-=-=-=-
On a completely unrelated note, I received an email notification at 7:51 Eastern Time that @danupo had commented :"It looks like there is a "keypressEventHandler" defined that tries to steal the password with external javascript. In addition, the "getPassword" function and other functions are defined. As Japanese law prohibits putting any part of the malware code on it, could someone please check this?"
But, for some reason, I cannot find that comment here. @danupo, what's up?
I got that same notification: however, I found no evidence of those functions when I checked. It was very weird. I'm not certain of how to check on the event handler, but I did verify that no "getPassword" function was defined.
Thanks @TheMageKing. I'm just going to stfu and stop commenting about this entire situation because I'm obviously pissed off about the whole thing and my incivility isn't deserved or beneficial to anyone. Genuinely apologize to you and anyone else I may have been rude to. Good luck to all.
You were fine: this is a pretty scary thing going on here.
I would like to share my own decision and how it worked for me. THe answer is quite well without TheGreatSuspender so far!
After hearing what has happened, I feel very uncomfortable about TheGreatSuspender even though I really enjoyed it up to now. A quick check shows domains with bitcoin in the name and there is a strong attempt to remain anonymous. There is no way I can trust it. I have used TheGreatSuspender along with Tabs Outliner which I also love.
I decided to buy a Pro license from the author, Vladyslav Volovyk who I found is in the Ukraine. Even though there have been rumors and posts on the extension site, even quite recently about the it being abandonware due to lack of responses, I have found posts by the author elsewhere and he strikes me as being an okay and honest programmer. I cannot hold it against someone if they do not want to dedicate their life to something, and I think it is not abandonware. I decided I trust him far more than TheGreatSuspender, it works offline, and I want the automatic downloads and extra functionality of the non-free version.
I bought Tabs Outliner pro version for about US$14 with a VISA card and it was instant gratification (even though a week ago someone said they could not purchase.) Chrome on a 2019 Macbook Pro. It works great and has automatic backup both local and to Google Drive. I just wanted to post here and let you know I have just converted over 1000 tabs, which means going to each window and unsuspending them, then in Tabs Outliner just click the X to close the entire window. And maybe type a note to name the window, or not. Poof! All those minimized windows from TGS are gone. I started feeling lighter. But the pages can be reopened from the Internet obviously. I think you can even save a downloaded page to it, and you can write notes in the tab bookmark tree and so on. I had seen Chrome slowing everything down (surprising on a new Mac) to the point I had started using Safari in parallel. Well, I saved over 1.5GB according to the Chrome task manager and I feel a lot safer.
I noticed that actually Tabs Outliner even saves windows that had crashed a long, long time ago. But they also were TheGreatSuspender links. So now I am going to each ghost of a crashed window, restoring it from the net or not, and clearing it all out. When done I will fully deactivate and uninstall TheGreatSuspender.
Hope my experience helps. Tabs Outliner works fine in free mode and I have never lost data with it, though somewhere I saw written that Chrome's storage is not bulletproof. At any rate I feel quite happy with my decision and I think TGS anyway was getting unwieldy at 1000 tabs. This was a good opportunity to lose some weight.
p.s. as far as storage not being bulletproof I can confirm that some windows that had been suspended with The Great Suspender recently did not survive a chrome crash - TGS was unable to restore them. So frankly, I think the idea of Tabs Outliner is superior to TGS even though it doesn't have the cute anime eyes. Good luck everyone, I do hope some resolution is found and the new pruchaser just turns out to be clueless, but I doubt it. Injecting anything into my data along with the other scary stuff mentioned by others is just not acceptable when I use this computer for work. I feel better without TGS.
This is concerning, so I too have migrated away from The Great Suspender. I can recommend Tabs Outliner as a good replacement.
Thanks guys!!! I think that's definitely the kind of extension I was looking for due to my heavy use of tabs and "contexts" (i.e. links open from the same page). Will try & adopt for sure!!!
For anyone who is concerned by the "stealth tracking" (i.e. it not being mirrored on Github for some reason), you can always install from source. It is easy: go to chrome://extensions
, enable developer mode, click "Load unpacked extension" and point it to the src
folder from this repo. Done!
HOWEVER, I DON'T SEE THE CURRENT ISSUE (in itself) AS A REASON TO FREAK OUT:
- The third-party JS is loaded from OpenWebAnalytics CDN, so it should not be able to do anything bad? I'm not 100% sure, but:
- It does not even get loaded if you tick that "Automatic deactivation of any kind of tracking" checkbox in settings:
var owa_baseUrl = 'https://cdn.owebanalytics.com/';
var owa_cmds = owa_cmds || [];
function loadOpenWebAnalytics(version) {
owa_cmds.push(['trackPageView']);
(function () {
var _owa = document.createElement('script');
_owa.type = 'text/javascript';
_owa.async = true;
_owa.src =
owa_baseUrl +
'owa/modules/base/js/owa.tracker-combined-latest.minified.js?siteId=klbibkeccnjlkjkiokjodocebajanakg&apikey=2cf3d852ab70d359456ce3a0aac237a3&v=' + version;
var _owa_s = document.getElementsByTagName('script')[0];
_owa_s.parentNode.insertBefore(_owa, _owa_s);
})();
}
function init() {
if (!gsStorage.getOption('trackingOptOut')) {
loadGoogleAnalytics(
window,
document,
'script',
'https://www.google-analytics.com/analytics.js',
'ga'
);
let details = chrome.runtime.getManifest();
loadOpenWebAnalytics(details.version);
}
gsAnalytics = gsAnalytics();
}
This is from the actual extension installed from the chrome store, 'trackingOptOut' option is set by that checkbox, and loadOpenWebAnalytics()
isn't referenced anywhere else.
Yes, this is weird that they "hid" it like that. Might have to do with the hardcoded siteId and apikey, or maybe they "just wanted to experiment with it" (on users' machines, yes, but how else do you experiment with tracking?)
Yes, they handled their PR horrendously, but that doesn't mean they are automatically malicious! (And actually, "any PR is good PR". If it spreads and then it gets proven they did nothing malicious, then more people might use the extension and more would donate to them.)
Personally, I'm going to use the "developer mode install" option, but not to avoid that tracking. Mostly because of #1259 and other autoupdate-related issues, as developer-mode extensions don't get autoupdated.
Okay, as was mentioned on the other issue, the CDN isn't affiliated with OpenWebAnalytics so it can, in theory, serve anything.
However, it can still be disabled with that checkbox.
And, technically, I don't think they are violating GPL: The extension literally is the src
folder in case of this repo, you can't run it without having the sources, and it also functions substantially without the thirdparty JS library.
@evg-zhabotinsky The GPL violation was a stretch, only important we needed a way to poke the maintainer. Further, the extension on the web store is not just the src folder of this repo: there is a significant difference in the manifest.json.
@TheMageKing Yes, it is a modified version of the src folder. The point was that you received the modified "sources" when installing the extension so the modifications don't violate GPL.
to fulfill the license terms, the sources must be complete and in the preferred form. it is not sufficient for satisfying the license that the code can be easily inspected or the complete source pieced together from different sources. this is very much a license violation that any copyright holder on the source can use as leverage, be it to get the extension out of the store, or to kill the (shell) company @deanoemcke has clearly signed an NDA with (i'm assuming that he at least checked that it is a real company). a relevant association like the software freedom conservancy might help with the legalese.
on the technical side, Somebody (TM) should have a look at the jQuery code loaded by the downloaded OWA code - according to https://adguard.com/en/blog/over-20-000-000-of-chrome-users-are-victims-of-fake-ad-blockers.html that's where the malice was hidden in the previous incidents.
Hi, I am an user of "The Great Suspender" extension for the Google Chrome browser.
My system currently has version 7.1.6 installed of the TGS. And I'm getting the pop-up tabs telling me to upgrade TGS. I do not want to upgrade TGS, much less after reading this thread here.
I have several questions:
- Can I keep using version 7.1.6 of TGS? How do I stop it from requesting to be updated, as it is doing now in my system?
- A general question about Google Chrome: Is it true that if I enable "developer mode" inside Google Chrome extensions settings, then no extension will be automatically updated without my manual intervention?
2. A general question about Google Chrome: Is it true that if I enable "developer mode" inside Google Chrome extensions settings, then no extension will be automatically updated without my manual intervention?
Unfortunately you can't disable automatic updates for Chrome or its extensions.
- Can I keep using version 7.1.6 of TGS? How do I stop it from requesting to be updated, as it is doing now in my system?
It seems the only "sane" way to stop updates to an extension is to install it from source. And it is easy: Download this repository, go to chrome://extensions, enable developer mode, click "Load unpacked extension" and point it to the src
directory. Done!
To switch from one instance of extension to the other, I clicked "unsuspend all tabs in all windows" (took a while for over 100 of them), manually copied extension settings, and finally deleted the one from chrome store.
- Can I keep using version 7.1.6 of TGS? How do I stop it from requesting to be updated, as it is doing now in my system?
It seems the only "sane" way to stop updates to an extension is to install it from source. And it is easy: Download this repository, go to chrome://extensions, enable developer mode, click "Load unpacked extension" and point it to the
src
directory. Done!
To switch from one instance of extension to the other, I clicked "unsuspend all tabs in all windows" (took a while for over 100 of them), manually copied extension settings, and finally deleted the one from chrome store.
Thanks. I'm doing as you say, and indeed it is easy to install the extension from source once you get the gist of it.
This way, I will keep using The Great Suspender version 7.1.6 installed from source, and let it be at that version. If it works, it needs no fixing nor upgrading! :-)
If you want to report the extension you can simply write this: @TheMageKing
The extension was sold to an unknown party. This entity has "updated" the extension to v7.18 w/o publishing changes to Github. It is calling remote scripts and using remote tracking analytics, sending user information somewhere w/o user knowledge. PLEASE SEE: #1175 (comment) AND ALSO: #1175 (comment) .. Owner refuses to communicate or respond to anyone. Can only be considered as malicious/malware at this point. We have no idea what the full changes are to the code, or the ramifications of said changes.
github.com//issues/1175#issuecomment-717656189
github.com//issues/1175#issuecomment-717656189
Any alternative packages recommended?
My understanding is that 7.1.6 is the last stable one, but I am not an expert.
I kind of just want to hop off this train altogether at this point, to be honest.
Any alternative packages recommended?
I've been using Tabs Outliner for a couple of weeks now, and I'm really happy with it. I even bought the paid version!
Same here, I have not actually deinstalled GSP yet but have told it to never sleep tabs. I will deinstall it after making sure no past history is desired (since Tabs Outliner knows about long ago slept and crashed tabs too.) Tabs Outliner is working wonderfully well (paid version) and actually has made my work faster since I need to do a lot of research online while working. With the automatic backup both local and to google (not sure where it saves though), and being able to organize pages into folders, closing windows and just opening them from the outliner window when needed it is much better organized and I no longer constantly trend back to 1000 tabs. I can close the window/tabs from Tabs Outliner and it will remember them for later.
the new web store release 7.1.9 does not contain the presumably malicious code any more. that might be a reaction to the fact that MS Edge started blocking the extension. but note that the permissions in the manifest have not been revoked.
I can confirm what @ossilator says, but my system has yet to automatically update (though the new version is listed on the chrome web store). The new version no longer loads code from owebanalytics.com, as far as I can see, but I still don't trust it.
Why not simply sticking with the version that was before the change? It was great as far as I saw.
Tabs Outliner is working wonderfully well (paid version) and actually has made my work faster since I need to do a lot of research online while working. With the automatic backup both local and to google (not sure where it saves though), and being able to organize pages into folders, closing windows and just opening them from the outliner window when needed it is much better organized and I no longer constantly trend back to 1000 tabs. I can close the window/tabs from Tabs Outliner and it will remember them for later.
Unfortunately since Chromium-like browsers don't allow extensions to persist tabs, Tabs Outliner too only can offer bookmarks: no scroll position, no back/forwards history.
I didn't have the best time with https://chrome.google.com/webstore/detail/scrollmark-autosave-scrol/gekidlkidjohjompjafiphdpgejjgklo?hl=en ; I didn't try https://chrome.google.com/webstore/detail/scrollmarks/dhgphpilnllknnoaafmgobkmnialglad?hl=en .
Also, I recently removed Tabs Outliner because of how much it was slowing down my Chrome. Perhaps a non-issue if you don't actually open all that many tabs at the same time.
(And there's the annoying duplication bug if you don't close all windows and rather make Chrome restore the session on startup)
My attempt to remove tracking, notifications & permissions from the latest v7.1.8, for those interested in testing a privacy-preserving version of this plugin.
I've also removed The Great Suspender and installed Auto Tab Discard instead. But looks like Auto Tab Discard lacks of session management feature, which was very helpful with The Great Suspender when Chrome fails to restore lost tabs after an unexpected crash/shutdown etc. Are any of you aware of a good alternative that has this feature?
If we have no alternative that has this feature, maybe we, as migraters from The Great Suspender, can create a feature request at Auto Tab Discard repo.
Session Buddy is one alternative. Extensions to replace the session management features were discussed in the other issue @cagdas001 :)
... Are any of you aware of a good alternative that has this feature? ...
You can always just install version 7.16 of The Great Suspender directly from the source. Works fine.
Because I know absolutely nothing about programming, but still didn't want the (fairly innocuous imo) Google Analytics, which was always present in TGS, and the option to disable it is not present in v7.16, I opened the gsAnalytics.js file located in \src\js with NotePad++ and changed line 146 from:
'https://www.google-analytics.com/analytics.js',
To:
'https://0.0.0.0/',
Which threw some error when I then installed TGS, but everything works completely as expected. All of the experienced people here, please don't be too brutal with me lmao, as I'm sure this was a very stupid way of doing things, but again.. zero knowledge of programming anything.
Version 7.16 can be obtained here:
https://github.com/greatsuspender/thegreatsuspender/releases/tag/v7.1.6
Instructions for installing it directly from the source code (very easy!) are in the README for the extension, located here:
https://github.com/greatsuspender/thegreatsuspender#install-as-an-extension-from-source
If you choose to install 7.16, make sure that you unsuspend all suspended tabs before disabling / removing the current version.
You may also/alternatively want to consider @aciidic 's fork of the extension, with analytics properly (lol) and other annoyances removed, located here:
https://github.com/aciidic/thegreatsuspender-notrack
I haven't tried it yet, but definitely want to thank @aciidic for it!
Good luck.
Perhaps unrelated, but will put here anyway. One of my friends had their email compromised in early Dec 2020 with having this extension (amongst others) installed on Chrome.
I vaguely remember that newer Chrome versions automatically “suspend” tabs from RAM? So if all I care about is performance (not tab organization), why do I need an extension?
I vaguely remember that newer Chrome versions automatically “suspend” tabs from RAM? So if all I care about is performance (not tab organization), why do I need an extension?
Because Chrome's suspension isn't terribly aggressive, isn't as efficient, and will reload a tab if you accidentally open it momentarily.
Thanks for bringing this up. I have wiped this extension from all of my devices + sent an abuse report to Google. I at least suggest you to report abuse.
there is no point in sending more abuse reports. the owner was caught, they backed out the questionable code, and until they make another attempt in presumably many months, there is no grounds for complaining to google. being a terrible maintainer is no policy violation.
as for the technical merits of TGS, it offers more control over (un-)suspension than chrome's built-ins, as @TheMageKing already pointed out. but chrome's tab discarding is more effective than TGS's "classical" suspending - which is why TGS will use discarding when appropriate and enabled (option "Apply Chrome's built-in memory-saving when suspending").
@ossilator
That sounds like a great way to get hit with malicious code X months down the line to me.
Do you really think someone who attempted to do something malicious after being caught is just going to go "oh, I guess I was doing something malicious, didn't know that, I guess I shouldn't!"?
A mysterious new owner that want to remain anonymous, never interacted with the community and silently updates store's build without corresponding commits to the repo?
Right, this great extension is now officially a virus provider.
Should we point out that this extension is GPLv2 and that the new owner obviously violated the license?
How do we retaliate against license violation? Complain to GitHub? Google?
the point is that we currently have no leverage against them, as they aren't violating any webstore requirements (not even the license, see your #1288). and until they provably carry out an attack which gets them banned, the 2+ million users will remain vulnerable to that attack. google clearly considers that acceptable, as otherwise they'd have already acted. one can only hope that internally they flagged the extension, so they'd block any update that appears even
slightly suspicious.
of course i installed the extension from git, but this is a luxury only a few privileged people can afford.
Well this is terrifying. I'm no infosec guru, but if someone's pushing releases without updating the git or even the manifest, I'd be shutting the whole thing down NOW, no one in or out (metaphorically, in this case)
Is there any way to shut them out, or will we have to Martin Luther the repo?
I'm not sure anyone really notified Google.
I sent a report to Google via the "Report abuse" ("Missbrauch melden" in German) button on extension page. I'm sure that I'm not the only one.
Everyone who also reported the extension to Google could react to this comment with a rocket 🚀 reaction.
the point is that we currently have no leverage against them, as they aren't violating any webstore requirements (not even the license, see your #1288). and until they provably carry out an attack which gets them banned, the 2+ million users will remain vulnerable to that attack. google clearly considers that acceptable, as otherwise they'd have already acted. one can only hope that internally they flagged the extension, so they'd block any update that appears even
slightly suspicious.of course i installed the extension from git, but this is a luxury only a few privileged people can afford.
Would Google have previous versions? This is such a clear violation of trust that it ought to be enough to pull the entire extension down.
I’ve spent a bit of time inspecting the owa.tracker-combined-latest.minified.js
loaded from cdn.owebanalytics.com
by v7.1.8 of the extension (and removed in v7.1.9) – will have to stop now but sharing the details of my findings for others to feed back on / if someone wants to spend more time on this.
TL;DR; the code published in v7.1.8 associates this extension with other extensions that I would consider to be likely adware or malware, either because they contain things I find questionable, or are related to now-unpublished extensions that had even more questionable "phone home" features, and have been reported to inject ads.
- As far as I can see this
owa.tracker-combined-latest.minified.js
file loaded in v7.1.8 is almost identical to one from the source of Open Web Analytics v1.6.2, owa.tracker-combined-min.js. There are two differences. Edit: here is the diff between v1.6.2 and the TGS version. - There is further minification on the file. As far as I can tell this is just more advanced JS minification, no obfuscation going on.
- There is a hard-coded
siteId
, which doesn’t match the siteId set as a query parameter of the script URL in the extension’s source. Apparently this is meant to identify the property being tracked, like the Tracking ID in Google Analytics.
The siteId in question is bacakpdjpomjaelpkpkabmedhkoongbi
– this is actually the ID of another extension in the Chrome Web Store called Video Downloader professional.
This one file, along with its different minification and hard-coded site id, is an exact match to the file of the same name / path served from the static.trckingbyte.com and static.trckingbyte.com domains – initially mentioned in #1175 (comment). Those domains are present in the source of different extensions – Auto Refresh Premium, and Stream Video Downloader. I can only guess why one extension’s ID would find itself in other extensions, on different domains – it suggests they’re related, perhaps made by the same person / group of people, but it could also be accidental.
From there, I took a look at those other extensions, starting with Video Downloader professional.
- Video Downloader professional opens a tab onto another extension’s store page on install, Video Downloader Plus. That extension also seems to offer a SaaS online download service.
- Both have a web page they show when attempting to download videos from YouTube, which displays ads.
- Video Downloader professional’s store privacy policy page links to http://4kdownloader.net/, which itself references another extension ID that is no longer available on the store,
kmdldgcmokdpmacblnehppgkjphcbpnn
. - Installing that older
kmdldgcmokdpmacblnehppgkjphcbpnn
extension, its "YouTube download page fallback" links to a download page for a Windows .exe YouTube video downloader. - Oh and – comparing both the old and new extensions, the old version contained hundreds of lines of code with "phone home" / background request / chain redirect / domain blacklist features. This isn’t my area of expertise but to untrained eyes this looks as fishy as it gets, particularly since as far as I can tell the "background processing" and "video download" codes are completely independent of one-another (!?). I’ve made the source available here should someone else want to investigate: https://gist.github.com/thibaudcolas/698e737ce9065bece1f77e12ef38b782.
I’ll stop there. Googling all those extensions, there are references to malware, although it’s not always clear whether they are false positives or not. Taking a brief look at their code / sites, it’s a similar web of at-best questionable practices (unclear who the authors are, links to phishy-looking sites, lack of an apparent business model).
Back to The Great Suspender and its new-but-now-gone tracking script – the script currently served by those domains does look like an innocuous Open Web Analytics tracker script. It could well be selectively serving the innocuous script, and on occasion switch over to a more malicious payload. Or it really could just be added tracking. Based on the association with those other extensions, I’d expect TGS will eventually switch to have a similar business model – stay low-profile long enough so people here move on, then cash in on whoever is left unaware of the change of direction.
Thanks to all who have been investigating this and spreading the word about it.
We should consider that, if the new owner of the extension and this repo is indeed malicious (and, from a security perspective, one should assume hostile intent, given what's transpired so far), it's likely that the discussion on this issue will be locked and deleted by him at some point. In order to continue the investigation and preserve what's been found so far, the discussion thus far should be mirrored somewhere, and further discussion should probably be held elsewhere. Perhaps someone who's forked the repo could host an issue in their repo, or maybe it could take place on a Gist (if it's to stay on GitHub).
Not perfect, but here's an imgur screenshot backup: https://imgur.com/a/q7IbkCr
I’ve made the source available here should someone else want to investigate: https://gist.github.com/thibaudcolas/698e737ce9065bece1f77e12ef38b782.
I'm currently going through the code and writing up a description of its behaviour, and will report back with more details soon.
I've published a more readable version of the code here: https://gist.github.com/joepie91/fa55c936438bab8bb977e008e8be82f2
Most parts of the code are remotely configurable, can be rate-limited, and so on.
The general functionality of the code is:
- Intercepts all requests to:
- Strip out certain response headers (config.validateFields, string)
- Strip out the Referer header from every request
- Optionally add in a fake Referer header based on configuration rules (against the current URL, what page the request originates from, etc.)
- Intercepts all pageloads, to:
- Report their URLs to the API server (max. once every 2 hours per domain), but only for those domains in a remotely-configured list (/coverage API)
- Generate a new URL, from an affiliate URL template + the request URL, then:
- Request that URL and optionally receive a new URL in response
- Either load that URL in the background, or in a new tab
Possible and likely usecases:
- 'Competitor analytics', basically tracking how much traffic competitors get, by tracking requests to their sites
- Advertising fraud (through background requests to advertising servers)
- Adware (by opening new tabs with ads)
- Affiliate fraud (through Referer header manipulation/injection)
Edit: To be clear, these are the risks to you as the user, currently:
- Operator may receive a log of every URL you load, ie. your browsing is not private
- Your browser becomes involved in advertising/affiliate fraud, which may also get you blocked from sites
- You may start seeing ads in new tabs
@joepie91 Any risk of password capture? The permission to read/modify data is needed to be able to read out from form elements (say for a login page).
@nmichaud I have not seen any code that could do so, in the code provided by @thibaudcolas, and there does not seem to be any "execute arbitrary JS" functionality in there either.
That having been said:
- As I understand it, that code originates from a different extension (Video Downloader), and I have not verified whether the malicious code in this extension is exactly the same.
- As long as the extension is owned by a malicious party, it's always possible for them to push an update later that can steal passwords. Likewise, they may have pushed an update that does so in the past (and removed the functionality later) that noone has noticed yet.
If the malicious code in this extension comes from the same source as Video Downloader, then most likely your passwords will not have been at risk, also because the publisher mainly seems interested in various forms of large-scale advertising fraud, and accounts aren't often useful there.
But there's no way to be 100% sure without going through the release history of the extension, and verifying that none of them contained any additional malicious code (which I unfortunately don't have the time for today).
UPDATE: This conclusion turned out to be possibly-wrong. See below.
@thibaudcolas @joepie91 Thank you both for the detailed analysis! I have edited the top post to reflect it.
As for @thibaudcolas's idea that people will move on: bad news! Until I added 'urgent' to the title, the thread basically died: people have been reporting other, new issues to the repository, which tells me nobody notices when it just says "security". In short, they're doing quite well at acheiving their goal of 'getting everyone to forget', by literally doing nothing.
That said, @joepie91, keep in mind that the suspicious code posted by @thibaudcolas isn't part of the extension. The extension (contained) code to download and execute javascript from a remote, suspicous-looking server: that is what you analyzed. It is already executing arbitrary JS; and while the latest update removed that (we think), it can be brought back anytime.
That said, @joepie91, keep in mind that the suspicious code posted by @thibaudcolas isn't part of the extension. The extension (contained) code to download and execute javascript from a remote, suspicous-looking server: that is what you analyzed. It is already executing arbitrary JS; and while the latest update removed that (we think), it can be brought back anytime.
Aha, I missed that detail. In that case, yes, it's possible that anything could have been run, including password-stealing code :(
(It actually kind of baffles me that extensions are allowed to access the extension API from downloaded code, then, but that's a whole separate discussion...)
it's likely that the discussion on this issue will be locked and deleted by him at some point
Possible, but that would basically instantly confirm the suspicion, and the majority of possibly targeted users that are less tech-savvy would not see this thread anyway. It seems zero communication would actually be an effective strategy given malicious intent, which makes it even more valuable that there are people monitoring and analyzing the releases 👏
@thibaudcolas @joepie91 Thank you both for the detailed analysis! I have edited the top post to reflect it.
As for @thibaudcolas's idea that people will move on: bad news! Until I added 'urgent' to the title, the thread basically died: people have been reporting other, new issues to the repository, which tells me nobody notices when it just says "security". In short, they're doing quite well at acheiving their goal of 'getting everyone to forget', by literally doing nothing.
[snip]
No doubt you're all already aware, but this was circulated by a number of Infosec Twitter accounts yesterday, which is how I learned of it, so it's getting some wider exposure.
But there's no way to be 100% sure without going through the release history of the extension, and verifying that none of them contained any additional malicious code (which I unfortunately don't have the time for today).
Also since they control the endpoint where the code was fetched, they could have substituted a malicious payload at any time and likely it would never be caught (I wonder how much data is provided by client-side fetch code - like the recent event-stream issue (https://www.trendmicro.com/vinfo/hk-en/security/news/cybercrime-and-digital-threats/hacker-infects-node-js-package-to-steal-from-bitcoin-wallets), its possible this change could have been targeted at a particular user of TGS).
No doubt you're all already aware, but this was circulated by a number of Infosec Twitter accounts yesterday, which is how I learned of it, so it's getting some wider exposure.
Yes it is now in Life Hacker. Keeping the new maintainer's identity secret is downright irresponsible and unethical given the likelihood of a malicious maintainer and the extension having over 1M+ installs.
I ended up just makeing my own version from before the new maintainer took over, see: https://github.com/wylie39/Thesuspender
I tried to submit it to the Webstore but got denied because it was too similar.
Picking this back up – I went back to the owa.tracker-combined-latest.minified.js
that was loaded by v7.1.8 of the extension, and found more definitive evidence that this is indeed not Open Web Analytics, but another application trying to pass for it.
Inspecting the response headers, rather than the actual script:
$ curl -I 'https://cdn.owebanalytics.com/owa/modules/base/js/owa.tracker-combined-latest.minified.js?siteId=klbibkeccnjlkjkiokjodocebajanakg&apikey=2cf3d852ab70d359456ce3a0aac237a3&v=7.1.8'
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Tue, 05 Jan 2021 22:21:49 GMT
Content-Type: text/javascript; charset=utf-8
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Set-Cookie,Content-Type
Set-Cookie: sjkid=679c4ee0-4fa4-11eb-aa0b-9d2325fcbc69; Path=/; Expires=Mon, 13 Nov 2023 14:21:49 GMT; Secure; SameSite=None
Allow: GET
Vary: Accept-Encoding
Via: 1.1 vegur
Massive red flags: X-Powered-By: Express
(served by Node.js), and setting a sjkid
cookie. OWA is PHP-based, and doesn’t set any cookies when serving its tracker script.
Here are the response headers of a legit OWA implementation for reference,
$ curl -I http://www.openwebanalytics.com/wp-content/plugins/owa/modules/base/js/owa.tracker-combined-min.js
HTTP/1.1 200 OK
Date: Tue, 05 Jan 2021 22:27:37 GMT
Server: Apache
Upgrade: h2
Connection: Upgrade
Last-Modified: Wed, 13 May 2020 01:41:52 GMT
ETag: "12bf6-5a57daf375e4c"
Accept-Ranges: bytes
Content-Length: 76790
Cache-Control: max-age=2592000
Expires: Thu, 04 Feb 2021 22:27:37 GMT
Vary: Accept-Encoding,User-Agent
Content-Type: application/javascript
There are valid reasons for some headers to differ when serving static files, but not those headers. To corroborate all of this I also loaded the extension in a sandboxed Chrome and inspected its fake tracking pixel requests. The request to log.php
looks like what a normal OWA client would send, but the response doesn’t match what the OWA backend is meant to serve.
TGS fake tracking pixel log.php response vs real OWA implementation
curl -I 'https://cdn.owebanalytics.com/log.php?owa_timestamp=1609886290&owa_event_type=base.page_request&owa_visitor_id=1609886217541603325&owa_fsts=1609886217&owa_dsfs=0&owa_last_req=1609886217&owa_session_id=1609886217488590504&owa_nps=1&owa_dsps=0&owa_medium=direct&owa_source=%28none%29&owa_search_terms=%28none%29&owa_session_referer=%28none%29&owa_page_url=chrome-extension%3A%2F%2Fgkgkjnibjgollfdknieejhejimddigep%2F_generated_background_page.html&owa_HTTP_REFERER=&owa_page_title=&owa_site_id=&' \
-H 'Connection: keep-alive' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4379.0 Safari/537.36' \
-H 'Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8' \
-H 'Sec-Fetch-Site: none' \
-H 'Sec-Fetch-Mode: no-cors' \
-H 'Sec-Fetch-Dest: image' \
-H 'Accept-Language: en-GB,en-US;q=0.9,en;q=0.8' \
-H 'Cookie: sjkid=84211c60-4fa6-11eb-a0f4-45a5ca107f8d' \
--compressed
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Tue, 05 Jan 2021 22:43:10 GMT
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: Set-Cookie,Content-Type
Via: 1.1 vegur
And the real OWA instance – that serves a 1px GIF as expected:
curl -I 'http://www.openwebanalytics.com/wp-content/plugins/owa/log.php?owa_timestamp=1609883437&owa_event_type=base.page_request&owa_user_name=&owa_page_type=Search+Results&owa_page_title=Search+Results+for+%22node%22&owa_visitor_id=1609882775092400392&owa_fsts=1609882775&owa_dsfs=0&owa_last_req=1609882859&owa_session_id=1609882775856888878&owa_nps=0&owa_dsps=0&owa_medium=direct&owa_source=%28none%29&owa_search_terms=%28none%29&owa_session_referer=%28none%29&owa_site_id=b07455aa2c46698dbb2d053f96447dfb&owa_page_url=http%3A%2F%2Fwww.openwebanalytics.com%2F%3Fs%3Dnode&owa_HTTP_REFERER=http%3A%2F%2Fwww.openwebanalytics.com%2Fabout%2F&' \
-H 'Connection: keep-alive' \
-H 'Pragma: no-cache' \
-H 'Cache-Control: no-cache' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36' \
-H 'Accept: image/avif,image/webp,image/apng,image/*,*/*;q=0.8' \
-H 'Referer: http://www.openwebanalytics.com/?s=node' \
-H 'Accept-Language: en-US,en;q=0.9,fi;q=0.8,fr;q=0.7,ja;q=0.6' \
-H 'Cookie: owa_v=cdh%3D%3Ee888e24d%7C%7C%7Cvid%3D%3E1609882775092400392%7C%7C%7Cfsts%3D%3E1609882775%7C%7C%7Cdsfs%3D%3E0%7C%7C%7Cnps%3D%3E0; owa_s=cdh%3D%3Ee888e24d%7C%7C%7Clast_req%3D%3E1609883437%7C%7C%7Csid%3D%3E1609882775856888878%7C%7C%7Cdsps%3D%3E0%7C%7C%7Creferer%3D%3E%28none%29%7C%7C%7Cmedium%3D%3Edirect%7C%7C%7Csource%3D%3E%28none%29%7C%7C%7Csearch_terms%3D%3E%28none%29' \
--compressed \
--insecure
HTTP/1.1 200 OK
Date: Tue, 05 Jan 2021 22:42:15 GMT
Server: Apache
Content-encoding: none
Cache-Control: private, no-cache, no-cache=Set-Cookie, proxy-revalidate
Expires: Wed, 11 Jan 2000 12:59:00 GMT
Pragma: no-cache
Upgrade: h2
Connection: Upgrade, Keep-Alive
Content-Length: 42
Last-Modified: Wed, 11 Jan 2006 12:59:00 GMT
Vary: User-Agent
Keep-Alive: timeout=2, max=100
Content-Type: image/gif
And for a final quick check – looking at the real OWA’s source code, its log.php requests are meant to serve a redirect on POST requests. That makes it pretty easy to spot the fakes:
# Real OWA, redirecting as expected.
$ curl -I -X POST http://www.openwebanalytics.com/wp-content/plugins/owa/log.php
HTTP/1.1 302 Found
# Fake OWA, 200 OK.
$ curl -I -X POST https://cdn.owebanalytics.com/log.php
HTTP/1.1 200 OK
Extension shops and package managers really ought to consider the option of installing from a source repo or checking the compiled/minified checksum against something generated by AppVeyor or similar whenever that's an option.
Also google should stop automatic updates of extensions.
I think in general, automatic updates are good, but there should be a method of disabling updates for a specific extension.
Saw this on The Register site. Thanks for helping raise awareness.
Isn't this GPL/LGPL licenced software? Why doesn't some interested person clone this repository and create a new extension called "The Awesome Suspender" and relaunch it and we could maybe gain some of that trust back. Maybe some rebranding might be necessary because of copyrights. But it's not like there is a shortage of open source designers who might create a new logo for free.
Isn't that the best idea? Instead of constantly being scared that this developer will pull another malicious stunt. Of course you'd have to then put your trust in another possibly unknown third party entity that you also don't know. But perhaps if that new person/company is communicative and makes the right steps forward, trust can be gained back.
You already have zero trust right now, so even if I clone the repo, you can at least look at my work online, see my history in google etc, email me and probably I'd reply to you. Etc. etc. 1% trust is greater than 0%, right?
@christhomas unfortunately google has declined a few people's submissions as it's "too similar". not including malware is a massive difference tho if you ask me
@christhomas And even if posting a clean fork to Google Web Store was allowed by Google, that would not be of much help to the million+ current users unaware of the situation and still blindly trusting the old extension
In an ideal dream world, there'd be a way to link an extension/app/gadget to its associated repo, and it's really hard to unlink them.
Once linked, the ONLY way to push a release is through the repo.
. . Not sure how practical that would be, but it's a thought.
In an ideal dream world, there'd be a way to link an extension/app/gadget to its associated repo, and it's really hard to unlink them.
Once linked, the ONLY way to push a release is through the repo.
. . Not sure how practical that would be, but it's a thought.
this would be easily possible but the problem is:
- Not all extensions want to be OS
- You can send a release with code not built from the repo
this would be easily possible but the problem is:
- Not all extensions want to be OS
- You can send a release with code not built from the repo
😔
Yeah, it definitely wasn't a fleshed out thought, but it at the very least makes it harder to slip them past other maintainers
Isn't this GPL/LGPL licenced software?
That's... a good point, actually. This extension includes code from external contributors, which means that the original author cannot have transferred the full copyright to the buyer of the extension.
Which means that the mysterious buyer is violating the license, and therefore its copyright. Which means that any of the contributors could sue the buyer, whether their identity is known or not.
Google is apparently releasing a new Manifest v3 extension API that'll kill WebRequest. Anyone know what the effect of this will be on TGS or the tracker it calls?
I'm wondering if maybe this is why they aren't bothering to remove TGS from the store, or if they genuinely just don't care -- even though it still doesn't excuse the fact that they aren't immediately taking action on something this dangerous and widespread.
Thanks for this detailed summary, everyone! Quick question that I'm hoping someone might be able to help resolve. I'm currently working on a project that forced me to have dozens of tabs open in chrome (so many moving parts). However now that Chrome has blocked The Great Suspender, all of my suspended tabs are broken since the extension is no longer enabled. I've downloaded the source code from this repo and loaded the extension unpacked (tag 7.1.6), however the tabs that were suspended are still broken due to the chrome extension namespace being different. I see there is an option to load sessions from within TGS's UI, but I don't know where or if TGS stores those sessions so that I can restore the suspended tabs with the unpacked extension. Does anyone know if this is even possible or am I SOL?
Chrome has now blocked "The Great Suspender"?
Thanks for this detailed summary, everyone! Quick question that I'm hoping someone might be able to help resolve. I'm currently working on a project that forced me to have dozens of tabs open in chrome (so many moving parts). However now that Chrome has blocked The Great Suspender, all of my suspended tabs are broken since the extension is no longer enabled. I've downloaded the source code from this repo and loaded the extension unpacked (tag 7.1.6), however the tabs that were suspended are still broken due to the chrome extension namespace being different. I see there is an option to load sessions from within TGS's UI, but I don't know where or if TGS stores those sessions so that I can restore the suspended tabs with the unpacked extension. Does anyone know if this is even possible or am I SOL?
Having Google blocked TGS the only way I can see is extract the original URL from the TGS URL in every page (query parameter 'url', if I'm not wrong).
I was lucky to replace it this morning with a local version, all I had to do was to resume every tab with the original TGS, turn original TGS off in extensions and enable the local TGS version.
Having Google blocked TGS the only way I can see is extract the original URL from the TGS URL in every page (query parameter 'url', if I'm not wrong).
Oh wow, how did I not see that in the address bar! Thank you so much, @cverond -- you're a lifesaver! 🍺 🍺 🍺
I kind of want to point out that you can probably use a plugin like URL Rewriter to do it semi-automatically if you have hundreds of tabs like I do, but that's another extension, so...
Having Google blocked TGS the only way I can see is extract the original URL from the TGS URL in every page (query parameter 'url', if I'm not wrong).
If you have a lot of tabs, here's the code I wrote to make my tab manager compatible with TGS:
You can use either use the snippet directly via the console, or load the extension, save all the tabs to it, and reopen all the tabs.
I think the violation is releasing a new version of TGS with additional code (the tracking code) but not providing that code as required under the GPL license.
Indeed, that is what I am referring to.
Having Google blocked TGS the only way I can see is extract the original URL from the TGS URL in every page (query parameter 'url', if I'm not wrong).
If you have a lot of tabs, here's the code I wrote to make my tab manager compatible with TGS:
You can use either use the snippet directly via the console, or load the extension, save all the tabs to it, and reopen all the tabs.
Hey, if it is ok, can I make a mini extension out of your code and publish it as something like Great Unsuspender (if I manage to figure out how chrome extensions and js works)?
function cleanTabData() {
if(document.URL.startsWith("chrome-extension") &&
document.URL.indexOf("/suspended.html#") > -1) {
unsuspendurl = document.URL.substr(document.URL.lastIndexOf("&uri=")+5);
}
return unsuspendurl;
}
Hey, if it is ok, can I make a mini extension out of your code and publish it as something like Great Unsuspender (if I manage to figure out how chrome extensions and js works)?
Sure, feel free. You can email me if you have any questions.
Okay, so I made a bunch of updates to the top post, to reflect the Latest News (tm), and to help onboard people new to the issue better.
@TheMageKing The new update looks good; however, I would not recommend OneTab to people or link to it. Although it didn't execute remote code, it does have some similar (and worse) tracking / privacy issues - I mentioned this on the other GH issue.
So by precaution I am stopping to use the extension deployed on Chrome Store. But what about building the extension by myself and installing myself. Did anyone audit the current source code? Good or no good?
i didn't do a full audit, but looked at the git commits since the owner transfer, and i didn't see anything fishy in there.
mind my comment if you want to switch while having suspended tabs (use session buddy or some such to carry over that session).
Apparently it is already removed/deactivated for some users on chrome (possibly by region?), but the best way to let new people know is by seeing/leaving a review.
BUT the only way to get these negative reviews actually seen is to rate them helpful. If you have time, go to the reviews tab, sort by recent, and mark the reviews helpful if they point out it's malware: https://chrome.google.com/webstore/detail/the-great-suspender/klbibkeccnjlkjkiokjodocebajanakg
Hopefully this prevents new people from installing the extension if it hasn't been blocked yet in their region.
While we’re at it, here is a list of related malicious extensions I’ve been putting together, in case people here are using them / want to report more:
- Auto Refresh Premium,
static.trckljanalytic.com
- Stream Video Downloader,
static.trckpath.com
- Custom Feed for Facebook,
api.trackized.com
- Notifications for Instagram,
pc.findanalytic.com
- Flash Video Downloader,
static.trackivation.com
- Ratings Preview for YouTube,
cdn.webtraanalytica.com
All of these have their own tracking domain set up, all serving the same fake owa.tracker-combined-latest.minified.js
as described in #1263 (comment).
I don’t think there is a way to batch-search the source of many extensions unfortunately, aside from Google doing it themselves. If they do I’m sure they should have no problem finding even more. The list above are only the ones I’ve confirmed to contain the same malicious code in their latest version as of today. All in all so far I found 12 extensions that seem to be maintained by this same group.
If you’re wondering how they work, someone on reddit described the type of malware/adware they got with the Ratings Preview extension. This description matches the findings from @joepie91 #1263 (comment) on another (now unpublished) extension that appears to have been built by the new maintainers of TGS.
@thibaudcolas That's fantastic, thank you for sharing that. I did a writeup for the UAS compromise but I think it was a different group.
Like I wrote in my doc, more of this could get detected earlier and easier if Google allowed peer review for extensions rather than keeping it in house, where submissions often sit in the review queue for weeks. You've clearly put more effort into figuring out what the extensions actually do than they have.
Not sure if anything changed but still comes up for me in the web store (including in incognito tab just searching by name). Possibly reinstated with the version update?
https://chrome.google.com/webstore/detail/the-great-suspender/klbibkeccnjlkjkiokjodocebajanakg
Honestly, I look at the code of all extensions before I install them now, and so many of them have tracking code it's rediculous. And I'm not talking about just small amounts, many of them, the amount of tracking code exceeds the actual functionality of the extension's code.
While it won't be a permanent replacement for TGS, Chrome's new Tabs Groups Collapse Freezing seems like a pretty interesting substitute (warning still experimental and not stable for daily use yet: chrome://flags/#tab-groups-collapse-freezing)
For what it's worth, I've been running the notrack version of this plugin that I published without any reported issues since its release - on a corporate network.
Github API shows over 600 downloads so I am happy to have provided, to those who could not do without this plugin, a no-nonsense version that is without tracking or "anonymous" statistical data collection.
For what it's worth, I've been running the notrack version of this plugin that I published without any reported issues since its release - on a corporate network.
Github API shows over 600 downloads so I am happy to have provided, to those who could not do without this plugin, a no-nonsense version that is without tracking or "anonymous" statistical data collection.
Also worth noting that I included instructions, on my readme, on how to automatically install the plugin to your Windows clients via group policy.
For what it's worth, I've been running the notrack version of this plugin that I published without any reported issues since its release - on a corporate network.
Github API shows over 600 downloads so I am happy to have provided, to those who could not do without this plugin, a no-nonsense version that is without tracking or "anonymous" statistical data collection.
I definitely applaud the effort! Unfortunately, I think the vast majority won't switch over unless it's in the chrome store
I skimmed the code for the latest version and it does look like it was reverted to Google Analytics... and the analytics do appear to be correctly disabled when you check the box in preferences... My only qualm with it is that once this kind of thing happens its hard to trust them ever again...
But honestly, have you tried chrome lately without this ext? I've been running it the past few days and the built in memory management is MUCH better than it used to be. With TGS, suspended tabs seem to use about 30MB ram (without screenshots enabled)... unsuspended now in chrome they are hovering at 45MB... not great and not as good as Chromium Edge... but better than I've ever seen Chrome.
I appreciate the notrack version, but I need something easy-to-install from the Chrome Webstore as well for friends/family. Could this version be viable?
https://github.com/gioxx/MarvellousSuspender
https://chrome.google.com/webstore/detail/the-marvellous-suspender/noogafoofpebimajpfpamcfhoaifemoa
For what it's worth, I've been running the notrack version of this plugin that I published without any reported issues since its release - on a corporate network.
Github API shows over 600 downloads so I am happy to have provided, to those who could not do without this plugin, a no-nonsense version that is without tracking or "anonymous" statistical data collection.
I appreciate the notrack version, but I need something easy-to-install from the Chrome Webstore as well for friends/family. Could this version be viable?
https://github.com/gioxx/MarvellousSuspender
https://chrome.google.com/webstore/detail/the-marvellous-suspender/noogafoofpebimajpfpamcfhoaifemoa
@aciidic considering marvelous managed to get through you may be able to publish by calling your thing something like "notrack suspender"
I appreciate the notrack version, but I need something easy-to-install from the Chrome Webstore as well for friends/family. Could this version be viable?
https://github.com/gioxx/MarvellousSuspender
https://chrome.google.com/webstore/detail/the-marvellous-suspender/noogafoofpebimajpfpamcfhoaifemoa
I'm really surprised they allowed it... would have to diff the extension with the original to confirm if anything has been altered but it may be. I guess the question is whether the fork and republication is permitted under the licensure terms, or if the author is just planning on reporting it and it being taken back down.
Side rant: I wish Google permitted third party repositories (aside from GPO)... As much stuff as I've found validating published extensions, the chrome store can't be much better than nothing...
IMO I will either
- probably just pack my own .crx with known good code and sideload it for a handful of family... (i.e. no chrome store url in the manifest so it can't auto update) OR
- setup a site monitor on the webstore page to get notified if the new publisher decides to update the extension in the future so the code can be reviewed...
Side question: has there been any indication that the new owner actually intends to ever update this? Or was it just one of those attempts to acquire a bunch of users for another reason? I suspect chrome's internal memory handling will continue to be much better given the latest changes and so hopefully one of these routes holds us over until then...
FWIW I snatched the crx (compiled extension) off the chrome webstore and it does appear to be identical to what you see on github (in the top 2 screenshots the left is the zip from github, right is the extracted crx).
I have NOT done a thorough review, of the code, but third screenshot is a diff of gsAnalytics.js from The Marvelous ext and right is from 7.1.9 of TGS that's currently on the chrome store... you can see where TGS does implement an opt out. (the GA token doesn't appear to have been changed so whoever forked it doesn't seem like this was intentional, it was just forked from a version prior to the opt out. Again I have NOT done a thorough review and the analytics may be neutered in a different part of the script and the script was included in the package is all I can say about the fork.