• LurkingLuddite@piefed.social
    link
    fedilink
    English
    arrow-up
    37
    ·
    4 days ago

    Genuine question. How is NPM more vulnerable than other repos? Haven’t similar supply chain attacks succeeded at least as well as this one through GitHub itself and even Linux package repos?

    • Serinus@lemmy.world
      link
      fedilink
      English
      arrow-up
      36
      ·
      4 days ago

      Larger standard libraries do a lot. It’s a lot harder to sneak vulnerabilities into the basic C# or Java or C++ libraries than it is to add a vulnerability to something one dude maintains in the javascript ecosystem.

      And since javascript libraries tend to be so small and focused, it’s become standard practice for even other libraries to pull in as many of those as they want.

      And it stacks. Your libraries pull in other libraries which can pull in their own libraries. I had a project recently where I had maybe a dozen direct dependencies and they ended up pulling in 1,311 total libraries, largely all maintained by different people.

      In a more sane ecosystem like C#, all the basics like string manipulation, email, or logging have libraries provided by Microsoft that have oversight when they’re changed. There can be better, third-party libraries for these things (log4net is pretty great), but they have to compete with their reputation and value over the standard library, which tends to be a high bar. And libraries made on top of that system are generally pulling all those same, certified standard libraries. So you pull in 3 libraries and only one of those pulls in another third party single library. And you end up with 4 total third party libraries.

      Javascript just doesn’t really have a certified standard library.

      (This certified standard library doesn’t have to be proprietary. Microsoft has made C# open source, and Linus Torvalds with the Linux Kernel Organization holds ultimate responsibility for the Linux kernel.)

      • vithigar@lemmy.ca
        link
        fedilink
        English
        arrow-up
        12
        ·
        4 days ago

        I will almost always choose .NET as my development platform when greenfielding a project for exactly this reason. It’s an incredibly robust standard library that virtually guarantees I won’t need to pull in a litany of additional utility libraries, and I can also expect that what libraries I do choose to bring in are highly unlikely to drag along a ridiculous parade of dependencies.

          • boonhet@sopuli.xyz
            link
            fedilink
            English
            arrow-up
            4
            ·
            4 days ago

            Probably more worth than it was 15 years ago since you’re no longer restricted to Windows and it’s now open source. I’ve heard a lot of people say it’s nicer than Spring for enterprise stuff. Haven’t tried it much myself though. Was fairly easy to set up a simple API, but I then got distracted by other projects.

          • Mihies@programming.dev
            link
            fedilink
            English
            arrow-up
            2
            ·
            4 days ago

            Yes, it’s incredibly nice, versatile, powerful and efficient. Me being a .net dev since first beta. That said it’s still a GC based runtime if that matters to you. I’m also looking more and more at kotlin as an alternative. If I was to look for a non GC language, I’d go with rust.

              • Mihies@programming.dev
                link
                fedilink
                English
                arrow-up
                1
                ·
                18 hours ago

                Go with either kotlin or c#, I’d say. Both are high level and easy to start with. If you don’t have a preference, pick one of the two randomly.

    • Kairos@lemmy.today
      link
      fedilink
      English
      arrow-up
      5
      arrow-down
      1
      ·
      4 days ago

      There’s a lot of features that make it a better package manager but nobody cares. Every project has hundreds of dependencies and packages use a minimum, not exact, version.

      • LurkingLuddite@piefed.social
        link
        fedilink
        English
        arrow-up
        3
        arrow-down
        1
        ·
        4 days ago

        That sounds more like bad practices from the community. It definitely has ways to use exact versions. Not the least of which the lock file. Or the shrinkwrap file which public packages should be using.

        • dustyData@lemmy.world
          link
          fedilink
          English
          arrow-up
          7
          ·
          4 days ago

          Any security system based on expecting good behavior from people is sure to fail. If NPM has no estructural features to enforce safe behaviors, it is vulnerable by default. As no person using it will apply safe practices unless forced to. Specially if the default, easiest, less friction behavior, is inherently unsafe.

          • LurkingLuddite@piefed.social
            link
            fedilink
            English
            arrow-up
            1
            ·
            4 days ago

            I wouldn’t say pulling in higher versions is unsafe unless an attack like this succeeds. Otherwise it’s only an annoyance.

        • Serinus@lemmy.world
          link
          fedilink
          English
          arrow-up
          3
          arrow-down
          1
          ·
          4 days ago

          Then you’re waiting forever on vulnerability patches. Especially if there are layers, and each layer waits to update.