JSON formatter Chrome plugin now closed and injecting adware
141 points
6 hours ago
| 16 comments
| github.com
| HN
drunkendog
2 hours ago
[-]
From the author on HN a couple years ago:

> FWIW, and since a few of you probably use it… I own the JSON Formatter extension [0], which I created and open-sourced 12 years ago and have maintained [1] ever since, with 2 million users today. And I solemnly swear that I will never add any code that sends any data anywhere, nor let it fall into the hands of anyone else who would. I’ve been emailed several tempting cash offers from shady people who presumably want to steal everyone’s data or worse. I sometimes wish I had never put my name on it so I could just take the money without harming my reputation, but I did, so I’m stuck with being honourable. On the plus side I will always be able to say that I never sold out.

https://news.ycombinator.com/item?id=37067908

reply
computerfriend
5 hours ago
[-]
Interesting that the author, Callum Locke, seems to be a real person with a real reputation to damage. Previously this would have been a trust signal to me, I figured real developers would be less likely to go rogue given the consequences.
reply
extesy
4 hours ago
[-]
Depends on the personal situation. An extension with 2 million users can generate a very meaningful revenue. My extension has only 300k users, but offers that I received over years [0] would have been significant in some lower-income country.

[0] https://github.com/extesy/hoverzoom/discussions/670

reply
robocat
4 hours ago
[-]
Extracts from two different offers:

  For example, your income for the 10k users will be ~ $ 1000 per month, users 20k ~ $ 2000 per month… 100к users ~10 000 $, and so on.

  ARPDAU (Average Revenue Per Daily Active User) basis - In average we have $0.007-0.011/user, US is $0.018.
reply
ayewo
4 hours ago
[-]
The tempation is quite strong, especially for popular extensions

Here's what it can look like to an author of a popular extension:

https://github.com/extesy/hoverzoom/discussions/670

reply
rzmmm
4 hours ago
[-]
Browser extension maintainers routinely get contacted by more or less shady directions. This is likely a case of maintainer selling out after getting a good offer.
reply
username223
1 hour ago
[-]
Well, Callum Locke has certainly torched his reputation. Not “spreading Santorum” level… yet.
reply
jimrandomh
2 hours ago
[-]
I think the main problem here is the ideology of software updating. Updates represent a tradeoff: On one hand there might be security vulnerabilities that need an update to fix, and developers don't want to receive bug reports or maintain server infrastructure for obsolete versions. On the other hand, the developer might make decisions users don't want, or turn even temporarily (as in a supply chain attack) or permanently (as in selling off control of a browser extension).

In the case of small browser extensions from individual developers, I think the tradeoff is such that you should basically never allow auto-updating. Unfortunately Google runs a Chrome extension marketplace that doesn't work that way, and worse, Google's other business gives them an ideology that doesn't let them recognize that turning into adware is a transgression that should lead to being kicked out of their store. I think that other than a small number of high-visibility long-established extensions, you should basically never install anything from there, and if you want a browser extension you should download its source code and install it locally as an unpacked extension.

(Firefox's extension marketplace is less bad, but tragically, Firefox doesn't allow you to bypass its marketplace and load extensions that you build from source yourself.)

reply
jkl5xx
6 hours ago
[-]
Noticed a suspicious element called give-freely-root-bcjindcccaagfpapjjmafapmmgkkhgoa in the chrome inspector today.

Turns out about a month ago, the popular open source [JSON Formatter chrome extension](https://chromewebstore.google.com/detail/json-formatter/bcji...) went closed source and started injecting adware into checkout pages. Also seems to be doing some geolocation tracking.

I didn't see this come up on hn, so I figured I'd sound the alarm for all the privacy-conscious folks here.

At this point, I feel like browser extension marketplaces are a failed experiment. I can just vibecode my own json pretty-printer extension and never deal with this problem again.

reply
Animats
4 hours ago
[-]
It's OK to inject ads, but not OK to remove them, under Google's current policies.
reply
Aurornis
2 hours ago
[-]
Several of the top Chrome extensions on their charts are ad blockers: https://chromewebstore.google.com/top-charts/popular?hl=en

They have an API basically dedicated to this: https://developer.chrome.com/docs/extensions/reference/api/d...

I think you may have been confused about the Manifest V3 API changes, which were controversial because they didn't support every feature of the old API. The mainstream ad blockers all wrote new versions for Manifest V3.

reply
teruakohatu
1 hour ago
[-]
It is widely known that Manifest V3 reduces extensions ability to perform SoTA ad blocking. It limits heuristic based filtering, under a guise of privacy.
reply
Legend2440
3 hours ago
[-]
Well no, actually. Both halves of that statement are false.

Injecting ads will get you removed from the extension store if caught, while adblockers are advertised on the front page of the store.

reply
Animats
3 hours ago
[-]
Google's "Manifest 3" rules, vs. ad blocking, in Ars Technica.[1]

Did the JSON formatter with ads get kicked out of the extension store yet?

[1] https://arstechnica.com/gadgets/2024/08/chromes-manifest-v3-...

reply
SquareWheel
3 hours ago
[-]
Manifest 3 explicitly enables ad blocking through the declarativeNetRequest API. It's trivial to do so, and many blockers exist in the Chrome Web Store.
reply
FergusArgyll
2 hours ago
[-]
ublock origin light is featured in the chrome web store.
reply
Legend2440
3 hours ago
[-]
Everybody freaked out about Manifest v3, but I'm running Chrome + uBlock and still not seeing any ads. Seems like a nothingburger to me.
reply
munificent
5 hours ago
[-]
> I feel like browser extension marketplaces are a failed experiment.

People rightly criticize all of the problems around vendor-lock-in and rent-seeking with platform app stores, but this is a good example that they do indeed provide some value in terms of filtering out malware.

The degree to which they are successful at that and add enough value to overcome the downsides is an open question. But it's clear that in a world where everyone is running hundreds of pieces of software that have auto-update functionality built in and unfettered access to CPU power and the Internet, uncontrolled app stores a honeypot for malicious actors.

reply
josephcsible
5 hours ago
[-]
> People rightly criticize all of the problems around vendor-lock-in and rent-seeking with platform app stores, but this is a good example that they do indeed provide some value in terms of filtering out malware.

But browser extension marketplaces aren't a free-for-all; they're exactly like the platform app stores in all the bad ways.

reply
jabwd
4 hours ago
[-]
This also ignores that mobile phones are now being used as an effective botnet. Just gotta get some poor devs to include your SDK and off you go.

AI companies make use of these botnets quite a bit as well. Why don't we hear more about it? because it is really really really hard to inspect what is actually happening on your phone. This post actually kinda disproves that the closed rent seeking model is better in any way.

reply
anonymous908213
4 hours ago
[-]
Whatever value they provide is completely and totally irrelevant compared to giving Microsoft, Google, and Apple the unilateral discretion to end any software developer's career, or any software development business, by locking them out of deploying software with no recourse. Nobody has a problem with optional value-add stores, but all three have or are moving towards having complete control of software distribution on the hardware platforms used by billions of people.
reply
hn_throwaway_99
5 hours ago
[-]
Thanks for posting this. I think it's such a shitty thing to do. I don't have much of a problem if an original author wanted to do a closed fork of an open source project, but to start injecting ads, without warning, to folks who have already installed your generic JSON formatter and phrase it as "I'm moving to a closed-source, commercial model in order to build a more comprehensive API-browsing tool with premium features." - seriously, f' off.

I agree that browser extension marketplaces are a failed experiment at this point. I used to run security an a fin services company, and our primary app had very strict Content Security Policy rules. We would get tons of notifications to our report-uri endpoint all the time from folks who had installed extensions that were doing lots of nefarious things.

reply
braebo
5 hours ago
[-]
We could use llms to scan source code and list all of the behavior not listed in the extensions page, like adware and geolocation tracking for example. Then another LLM locally to disable it and warn you with a message explaining the situation.
reply
fg137
5 hours ago
[-]
How did you "notice" a suspicious element in the inspector? Do you routinely look at the DOM?
reply
jkl5xx
3 hours ago
[-]
I did webdev for a long time, so yeah. If you want the story, I was looking into guix on asahi and ended up on https://www.asahi-guix.org/ which didn’t load anything, so I checked the page source and noticed the element.
reply
fg137
2 hours ago
[-]
Thanks. Not sure what's with the downvotes. That was a genuine question.

(I used to do a lot of web development and probably know dev tools better than most people here. However I almost never look at the DOM of a webpage I don't own)

reply
ronsor
5 hours ago
[-]
> Do you routinely look at the DOM?

You don't?

reply
explodes
43 minutes ago
[-]
> Be kind. Don't be snarky. Converse curiously; don't cross-examine. Edit out swipes.

https://news.ycombinator.com/newsguidelines.html

Reading other comments, I noticed that this was a legitimate question.

reply
madeofpalk
4 hours ago
[-]
I do. Then again, I’m a web developer so looking at the DOM is my day job.
reply
cluckindan
5 hours ago
[-]
The extension injects its ”gimme money” elements even on localhost pages.
reply
IncreasePosts
6 hours ago
[-]
Agreed with that. My main use of AI is just writing ultra minimal apps that are specifically tailored to my needs, instead of using a larger app(or plugin or whatever) that is controlled by a third party and is usually much more than I need, and doesn't exactly fit my needs, and requires ad hoc configuration.

I'm wondering when/if this is going to bite me in the butt

reply
j1elo
3 hours ago
[-]
> went closed source and started injecting adware into checkout pages ... [and] geolocation tracking.

Maybe we should resort to blame and shame publicly this sort of actions. DDoS their servers, fill their inbox with spam, review-bomb anything they do. Public court justice a la 4chan trolling. Selling out is a lawful decision, of course, but there is no reason it shouldn't come with a price tag of becoming publicly hated. In fact, it might help people who are on the verge to stay on the ethical side of things (very ironically).

I'm just kinda joking (but wouldn't hate it if I was rugpulled and the person that did it got such treatment)

reply
pigpop
3 hours ago
[-]
Calm down, just spreading the word that the extension is adware and having everyone uninstall it is sufficient to demonstrate that this move was a mistake. Trying to ruin someone's life is going completely overboard. Repercussions should be proportionate, you don't shoot people for stealing a candy bar.
reply
wesbos
5 hours ago
[-]
I noticed this a week ago. Ended up building my own that has all the features I love from using several over the years.

https://github.com/wesbos/JSON-Alexander

reply
nightpool
6 hours ago
[-]
The same thing happened to ModHeader https://chromewebstore.google.com/detail/modheader-modify-ht... -- they started adding ads to every google search results page I loaded, linking to their own ad network. Took me weeks to figure out what was going on. I uninstalled it immediately and sent a report to Google, but the extension is still up and is still getting 1 star reviews.
reply
pfg_
2 hours ago
[-]
Firefox has this ability by default and I find it very useful. And it will never get sold to some random person to be replaced with adware.
reply
captn3m0
5 hours ago
[-]
The JSONView extension on Firefox was targeted a while ago. (2017?)

I only found out because Mozilla forced an uninstall with a warning and then I had to go down Bugzilla to find the impact (it leaked browser visit URLs).

reply
jansommer
5 hours ago
[-]
Guy talks about switching to the "Classic" version if

> you just want a simple, open source, local-only JSON-formatting extension that won't receive updates.

Wow that sounds like a tough choice. JSON formatting is moving at such a fast pase that I don't know if I should pay a JSON formatting SaaS a monthly subscription, or if I really can live without updates.

reply
panstromek
5 hours ago
[-]
Depends on how many JSON tokens you need to format. I recommend getting JSON ForMAX+ with 200k tokens and 100k sign in bonus.
reply
brianmcnulty
5 hours ago
[-]
I heard that JWTs are 5x the price of JSON tokens but only 3x if you have JSON ForULTRA+ (new) (for work or school).
reply
smallmancontrov
4 hours ago
[-]
The more you buy, the more you save!
reply
hamdingers
4 hours ago
[-]
Legally speaking that's for entertainment purposes only
reply
cyanydeez
3 hours ago
[-]
You have to add the final "]" or "}" yourself but json strings are free!
reply
cookiengineer
1 hour ago
[-]
I just bought 30.000 JWT

HODL

reply
henry2023
3 hours ago
[-]
Fortunately, Microsoft C# Copilot 2 Pro is already bundled with JSON forULTRA+ for free. (Not to be confused with Microsoft C# Copilot Pro)
reply
endofreach
3 hours ago
[-]
Lol. I mean what the hell is this. I have this weird feeling this guy got tricked by an LLM into thinking this move is smart... "what you've built is not just a json formatter, it's the next big...".

I mean good luck to that guy. Everyone should have a shot at turning his free work into something worth it. I think i've been using that extension as well. But yeah, i never cared enough to know if it was this one. But i do hope there are others who did & he can surprise me and turn this user base into customers of a commercial product. If he pulls that of, i'd be truly impressed.

reply
arikrahman
3 hours ago
[-]
I what feature can even be added to the product that won't be immediately replicated in a fork?
reply
mirekrusin
3 hours ago
[-]
Nobody knows what but everybody knows they won't be replicated.

Chat with your json?

Facebook but for jsons?

Send json to blockchain?

It's so bad that it's exciting, can't wait for an update.

reply
caseyohara
48 minutes ago
[-]
It will certainly involve AI somehow.
reply
bicx
1 hour ago
[-]
Going to have a chat with our JSON Engineers to see what our best move might be. It might be worth the adware if we can keep JSONing.
reply
voodoo_child
4 hours ago
[-]
Big-JSON is coming for us
reply
jmuguy
5 hours ago
[-]
I actively try to get coworkers to audit, remove and work without browser extensions. Google and Firefox clearly do not care to spend even a modicum of effort to police their marketplaces. There's only a few I would trust and assume all others to be malware now or at some point in the future.
reply
roozbeh18
2 hours ago
[-]
last night I got an alert from Malwarebytes on my machine that it quarntined an extension.

Quarantined - PUP.Optional.Hijacker. C:\USERS*\APPDATA\LOCAL\GOOGLE\CHROME\USER DATA\DEFAULT\EXTENSIONS\BCJINDCCCAAGFPAPJJMAFAPMMGKKHGOA

wondered what the extension was... JSON Formatter

reply
hybirdss
1 hour ago
[-]
just went through all my github actions and pinned them to commit SHAs after reading this. same problem — if someone pushes to @main your CI blindly runs it. auto-update anything is basically handing someone a key to your house and hoping they stay nice forever
reply
nip
4 hours ago
[-]
I was approached twice to add « a search and tracking script » to my 35k+ user-based extension.

Now I know what would have happened if I had accepted.

reply
binaryturtle
5 hours ago
[-]
I guess you really need to unpack each and every extensions before installation and carefully inspect the code manually to see if it only would be doing what the extensions is advertising.

Darn…

and I thought that the JSLibCache extension was forcing every site into UTF-8 mode (even those that need to run with a legacy codepage) was a critical issue. A problem I encountered yesterday… took me a while to figure out too.

reply
vadansky
3 hours ago
[-]
Or just use it as an example to vibecode your own. Extension laundering through vibecoding.
reply
tadfisher
5 hours ago
[-]
WebExtension permissions are fucking broken if the set of permissions necessary to reformat and style JSON snippets is sufficient to inject network-capable Javascript code into any page.

If basically any worthwhile extension can be silently updated to inject <script> tags anywhere, then it's time to call this a failed experiment and move on. Bake UBlock and password-management APIs into the browser. Stop the madness.

reply
strictnein
4 hours ago
[-]
Been researching extensions for a while now at the day job and I'm preparing some disclosures to the major browser vendors.

The amount of absolute clusterfuckery in browser extensions is endless. One of the biggest issues is with how extensions define their permissions and capabilities in their manfiest.json files. I've reviewed thousands of these now, and probably only 5-10% of extensions actually get it right. There are just so many confusing and overlapping permissions, capabilities, etc.

It is a failed experiment, but I don't think Google can just shut it off, because of their market dominance. They'd be disconnecting some of their competitors from their users. They need to move to an updated manifest spec that is (more) secure by default, has fewer footguns, etc.

reply
madeofpalk
1 hour ago
[-]
> They need to move to an updated manifest spec that is (more) secure by default, has fewer footguns, etc.

They tried to do this and people got very upset at them trying to kill adblockers.

reply
maxloh
3 hours ago
[-]
For context, the latest version of extension spec (Manifest V3) is just 1.5 years old. It isn't something old or legacy.
reply
Groxx
5 hours ago
[-]
- click install

- "It can: Read and change all your data on all websites"

It's not alarming sounding enough for what that implies, but "it can trigger requests under its control" seems fairly obvious from that. The permission it uses to inject ads can be used to inject ads (or block them).

Why a JSON formatter needs any permission at all is something anyone installing it should be asking themselves.

---

This is not meant to imply that I think the permission model of extensions in chrome or firefox is good, clearly it is not. But it's significantly better and more fine-grained than every single other widely-used permissions system in consumer apps. Ideally there should be more carve-outs for safe niches like a "read a JSON file, rewrite it into something that does not need javascript or external resources" could use, but also that kind of thing is likely to be nigh impossible to make "complete".

reply
tadfisher
3 hours ago
[-]
"Read and change data on all websites" does not, to me, imply "make network requests on the user's behalf". Yes, I can put on my developer hat and surmise that, under the hood, the extension's injected payload can make network requests by adding <script> elements to the DOM. No user will ever understand this, no matter how much you try to educate them through the permission prompt.

This ends up being significantly worse than any other widely-used permissions system, because injected scripts act as the website, not the extension. If you've already granted location permission to a website, then it is effectively granted to the extension. There is no other ecosystem that works like this.

And to do basically anything worthwhile, including certain types of content blocking, you need this God permission that essentially disables the WebExtension permissions system. This should never have been greenlit in the first place.

reply
Groxx
2 hours ago
[-]
>"Read and change data on all websites" does not, to me, imply "make network requests on the user's behalf"

Yeah, I don't like this phrasing either, I think it downplays the risk to a dangerous degree (which is "it can see and do literally anything on any site you visit", which is GIGANTIC). It's one of the worst permissions to request, but it doesn't look like it.

But other permissions systems don't have per-site controls, or the ability to turn things off until activated, or isolate everything, or... the list is huge, others generally have permissions like "can access this folder [and others we haven't told you] [and folders you give it access to, which you can't revoke later https://news.ycombinator.com/item?id=47719602] [and only for applications which opt into this, normal ones can do anything anywhere any time]...." which is much worse.

reply
maxloh
4 hours ago
[-]
To install a JSON formatter, you need to grant the following access:

1. Access to the page DOM to read the raw JSON content.

2. Permission to modify the DOM to display the formatted results.

Unfortunately, these requirements necessitate broad host permissions, which allow an extension to inject ads or track user behaviors. There is no alternative way to define a strict security boundary that allows these specific permissions while preventing abuses.

reply
tadfisher
3 hours ago
[-]
> There is no alternative way to define a strict security boundary that allows these specific permissions while preventing abuses.

Maybe you're right, and there isn't. Does it not follow that we should probably require extensive review and open-source reproducible builds before allowing any such extension on the browser extension stores?

reply
what
2 hours ago
[-]
I’m pretty sure you can setup without broad host permissions, you just probably wouldn’t like it. You’d have to click a button to trigger the behavior, which I think requires you to click another button to approve access. Or configure the extension to allow access to specific domains after install, which will also have a permission prompt.
reply
michaelt
5 hours ago
[-]
Given that the worlds biggest browser is made by the worlds biggest ad company, the chances it’ll ever bake in a working ad blocker are approximately zero.
reply
SquareWheel
3 hours ago
[-]
Chromium does include an ad blocker for "intrusive ads". ie. Those using many resources, flashing, auto-playing sounds, or otherwise behaving badly.

https://support.google.com/chrome/answer/7632919

reply
gsibble
5 hours ago
[-]
Is it me or is this happening more and more frequently?
reply
iza
4 hours ago
[-]
Maybe but it's always been a problem. I've been receiving offers to monetize or sell my extension for over a decade.
reply
jlarocco
3 hours ago
[-]
It seems like it. I just stopped using a "windowed full screen" extension that did this.
reply