Archived link

The polyfill.js is a popular open source library to support older browsers. 100K+ sites embed it using the cdn.polyfill.io domain. Notable users are JSTOR, Intuit and World Economic Forum. However, in February this year, a Chinese company bought the domain and the Github account. Since then, this domain was caught injecting malware on mobile devices via any site that embeds cdn.polyfill.io. Any complaints were quickly removed (archive here) from the Github repository.

  • originalucifer
    link
    fedilink
    2056 days ago

    nah. over 100k sites ignored dependency risks, even after the original owners warned them this exact thing would happen.

    the real story is 100k sites not being run appropriately.

    • @vzq
      cake
      link
      English
      1276 days ago

      The hackers just engaged in a little bit of technical debt collecting ;)

    • ShaunaTheDead
      link
      fedilink
      506 days ago

      One place I worked at recently was still using Node version 8. Running npm install would give me a mini heart attack… Like 400+ critical vulnerabilities, it was several thousand vulnerabilities all around.

      • unalivejoy
        link
        fedilink
        English
        66 days ago

        If you’re on RHEL 8+, you can install the latest version of node with dnf.

        dnf install nodejs will likely install node 8 :(. Use dnf module install nodejs:20 to install the latest version.

    • Optional
      link
      fedilink
      English
      416 days ago

      the real story is 100k sites not being run appropriately.

      Same as it ever was. Same as it ever was. Same as it ever was.

            • @nilloc@discuss.tchncs.de
              link
              fedilink
              English
              15 days ago

              We know, but we don’t have time to change. We have another site waiting to get slammed out as soon as the one we’re working on, which was underfunded with a ridiculous timeline goes live.

              There’s still a fair bit of “my nephew makes websites, it can’t be that [hard, expensive, time consuming], oh and by the way, e we need a way to edit every word and image on the site, that both our intern and barely literate CEO can understand, even though we’re literally never going to edit anything ever.”

        • @nyan@lemmy.cafe
          link
          fedilink
          English
          26 days ago

          They’re widely variable. PyPI gets into about as much trouble as npm, but I haven’t heard of a successful attack on CPAN in years (although that may be because no one cares about Perl anymore).

      • @Warl0k3@lemmy.world
        link
        fedilink
        English
        64
        edit-2
        6 days ago

        I don’t think we have to choose. “Maintain your websites so you don’t get taken advantage of” and “Here’s an example of a major-world-power-affiliated group exploting that thing you didn’t do” are both pretty important stories.

      • @themurphy@lemmy.ml
        link
        fedilink
        English
        326 days ago

        The malware thing still deserves a headline. They just argue it’s stupid so many even have to use the library to begin with.

        • @KairuByte@lemmy.dbzer0.com
          link
          fedilink
          English
          25 days ago

          Have to use? No one has to use any library. It’s convenience, and in this case it’s literally so they don’t have to write code for older browser versions.

          The issue here isn’t that anyone has to use it, it’s the way it was used that is the problem. Directly linking to the current version of the code hosted by a third party instead of hosting a copy yourself.

  • @dan@upvote.au
    link
    fedilink
    English
    121
    edit-2
    6 days ago

    My favourite part is that the developers that currently own it said:

    Someone has maliciously defamed us. We have no supply chain risks because all content is statically cached

    https://github.com/polyfillpolyfill/polyfill-service/issues/2890#issuecomment-2191461961

    Completely missing the point that they are the supply chain risk, and the fact that malicious code was already detected in their system (to the point where Google started blocking ads for sites that loaded polyfill .io scripts.

    We don’t even know who they are - the repo is owned by an anonymous account called “polyfillpolyfill”, and that comment comes from another anonymous account “polyfillcust”.

    • @letsgo@lemm.ee
      link
      fedilink
      English
      186 days ago

      What rules can we add that solve this problem? (I’ve tried DDG but didn’t find any results)

      • @Supermariofan67@programming.dev
        link
        fedilink
        English
        626 days ago

        This one is already in the default uBlock filters - Badware risks

        I also strongly suggest adding https://big.oisd.nl/ as a filter list. It’s a large and well maintained domain blocklist (sourced from combining lots of other blocklists) that usually adds lots of these sorts of domains quickly and has very few false positives.

        If you want to take it even further, check out the Pro list and Thread Intelligence Feeds list here https://github.com/hagezi/dns-blocklists

        These can all be added to a pihole too if you use one.

      • @ChilledPeppers@lemmy.world
        link
        fedilink
        English
        56 days ago

        cdn.polyfill.io^ ? By now it was probably already added to the default lista tho…

        (I dont really understant these things tho, so correct me if I’m wrong)

  • @dan@upvote.au
    link
    fedilink
    English
    946 days ago

    Reposting my comment from Github:

    A good reminder to be extremely careful loading scripts from a third-party CDN unless you trust the owner 100% (and even then, ownership can change over time, as shown here). You’re essentially giving the maintainer of that CDN full control of your site. Ideally, never do it, as it’s just begging for a supply chain attack. If you need polyfills for older browsers, host the JS yourself. :)

    If you really must load scripts from a third-party, use subresource integrity so that the browser refuses to load it if the hash changes. A broken site is better than a hacked one.


    And on the value of dynamic polyfills (which is what this service provides):

    Often it’s sufficient to just have two variants of your JS bundles, for example “very old browsers” (all the polyfills required by the oldest browser versions your product supports) and “somewhat new browsers” (just polyfills required for browsers released in the last year or so), which you can do with browserslist and caniuse-lite data.

    • Echo Dot
      link
      fedilink
      English
      55 days ago

      Yeah I used to be guilty of this. Although in slight defense of myself I never used to use random sites like that I always used to pull everything from Google CDN since I can’t see that changing hands.

      They may very well shut it down without warning, but they’re probably not going to sell it to anyone.

      • @dan@upvote.au
        link
        fedilink
        English
        2
        edit-2
        5 days ago

        Yeah, it really depends on how much you trust the vendor.

        Google? Say what you want about the company, but they’ll never intentionally serve malware.

        Random company with no track record where we don’t even know who is maintaining the code? Much less trustworthy. The polyfill . io repo is currently owned by a Github user called “polyfillpolyfill” with no identifying information.

        Third-party CDNs make less sense these days though. A lot of hosting services have a CDN of some sort. Most sites have some sort of build process, and you usually bundle all your JS and CSS (both your code and third-party code, often as separate bundles) as part of that.

      • @dan@upvote.au
        link
        fedilink
        English
        15
        edit-2
        5 days ago

        You’d be surprised how much code people blindly reuse without even looking at it, especially in JavaScript. A bunch of it is from projects owned by random individuals. The JS standard library is ridiculously small, so nearly all JS apps import third-party code of some sort. One JS framework can pull in hundreds of third-party modules.

        It’s much less of an issue with languages like C# and even PHP, where the first-party libraries are often sufficient for building a small or mid-sized app.

        • @BURN@lemmy.world
          link
          fedilink
          English
          55 days ago

          JS and Python are both extremely bad for this. I’ve been working with data scientists and it’s hell trying to tell them that no, they can’t just install whatever libraries they want

  • @Bertuccio@lemmy.world
    link
    fedilink
    English
    556 days ago

    Whichever editor let them post “100 thousand” should be spanked one 100 times with the severed hand of whatever asshole wrote it in the first place.

  • Jamyang
    link
    fedilink
    English
    836 days ago

    Man, the Chinese are becoming a new major nuisancec on internet.

  • katy ✨
    link
    English
    255 days ago

    that’s not very nice to call javascript malware. i know it’s bad but still.

  • NutWrench
    link
    fedilink
    English
    186 days ago

    This is probably connected to China cloning the entire GitHub website to their own servers.