• [object Object]@lemmy.ca
    link
    fedilink
    English
    arrow-up
    159
    arrow-down
    4
    ·
    4 days ago

    Can we stop using npm now?

    I swear to god the number of attacks like this or spawned from other attacks like this is fucking stupid. I’ve gender seen anything like it.

    • i_am_not_a_robot@discuss.tchncs.de
      link
      fedilink
      English
      arrow-up
      60
      ·
      4 days ago

      This problem has nothing to do with NPM. Checkmarx was compromised last month, and during that compromise there were malicious VS Code extensions published to Visual Studio Code Marketplace. A Bitwarden developer says that somebody ran one of those malicious extensions, and GitHub API keys were stolen which were used in publishing the malicious CLI package.

      It’s probably better that it happened on NPM. If the CLI were only downloadable from the Bitwarden website, it would have likely taken longer for somebody to notice something was wrong.

    • 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
              ·
              3 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
              ·
              3 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
                  ·
                  12 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.

    • anyhow2503@lemmy.world
      link
      fedilink
      English
      arrow-up
      12
      ·
      4 days ago

      Npm probably has the biggest attack surface and many of the libraries hosted there are in extremely widespread use. They’ve taken some steps to mitigate these supply chain attacks, but as we’ve seen with more recent examples, it’s unrealistic to think they can be prevented completely. Most of these attacks use stolen developer credentials, which invalidates almost all potential security measures on the registry side and the best you can hope for is catching a malicious package quickly. To be clear: I think the JS ecosystem is uniquely positioned to be the prime target of supply chain attacks and while that doesn’t excuse the slow implementation of security measures from the npm team, the people arguing that other package managers and registries aren’t vulnerable to this have to be huffing fumes.

      • [object Object]@lemmy.ca
        link
        fedilink
        English
        arrow-up
        7
        ·
        3 days ago

        That’s fair, I won’t pretend pypi/pip and running uvx is much safer than npx.

        But why hasn’t JavaScript established a defacto stdlib to replace ask the left pads and is even type packages?

        I’ve taken a near zero dependency policy on my personal projects regardless, and now I run most code in containers to sandbox it.

        • anyhow2503@lemmy.world
          link
          fedilink
          English
          arrow-up
          3
          ·
          3 days ago

          But why hasn’t JavaScript established a defacto stdlib to replace ask the left pads and is even type packages?

          I’m guessing things were working out pretty alright, even with the insane amount of dependencies per project. The awareness and the increasing frequency of supply chain attacks is relatively recent for npm. But who knows, maybe the tech giants in control of the web standards are happy to keep using their own vendored registries.

        • Tekhne@sh.itjust.works
          link
          fedilink
          English
          arrow-up
          2
          ·
          3 days ago

          If you’re asking why there isn’t one shipped with JS, the answer is because JS is built for the web, and the “don’t break the web” rule makes changing things in JS hard, as well as browser devs pushing back hard on anything that increases install size.

          If you’re asking why as a community, we haven’t agreed on a single package to be a stdlib - lodash.

    • Meron35@lemmy.world
      link
      fedilink
      English
      arrow-up
      11
      ·
      4 days ago

      As someone completely unfamiliar with the JavaScript mess, are these security issues specific to npm the actual repository or npm the package manager?

      If it’s the latter, does using something else like yarn or bun instead help?

      • [object Object]@lemmy.ca
        link
        fedilink
        English
        arrow-up
        11
        ·
        4 days ago

        I think npm allows installation scripts which do make this worse, as a package can run arbitrary command at install time.

        • anyhow2503@lemmy.world
          link
          fedilink
          English
          arrow-up
          2
          ·
          4 days ago

          Npm has gotten a few config options that prevent this behaviour. We can only hope that they will become the default eventually.

  • quick_snail@feddit.nl
    link
    fedilink
    English
    arrow-up
    57
    arrow-down
    13
    ·
    4 days ago

    Don’t. Use. Npm.

    That applies to pip and crate and all the other shitty lang package managers that totally fail at security

      • grandma@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        22
        ·
        4 days ago

        Easy, just vendor all your dependencies! Can’t have a supply chain attack if you are the supply chain.

      • quick_snail@feddit.nl
        link
        fedilink
        English
        arrow-up
        7
        arrow-down
        1
        ·
        3 days ago

        A package manager that uses cryptographic signatures. Apt had this since 2005 iirc. Use apt.

          • quick_snail@feddit.nl
            link
            fedilink
            English
            arrow-up
            1
            ·
            4 hours ago

            Oh boy. Maven is like the only language dependency manager that does signing tho!

            You don’t need to use apt for java. Just use maven :)

          • quick_snail@feddit.nl
            link
            fedilink
            English
            arrow-up
            2
            ·
            3 days ago

            Packages are reviewed by package maintainers.

            Humans are required to solve a malicious insider. But most supply chain vulns of these shitty software dependency managers were resolved decades ago by freely available cryptography

    • rmrf@lemmy.ml
      link
      fedilink
      English
      arrow-up
      12
      arrow-down
      5
      ·
      3 days ago

      Honestly just fine use computers at all, completely eliminate the remote attack vector. And only drink rain water since city water can be compromised.

      Or, recognize this is a normal part of using software and have more than 1 thing between you and a breach

      • quack@lemmy.zip
        link
        fedilink
        English
        arrow-up
        27
        arrow-down
        1
        ·
        3 days ago

        The rules of cybersecurity:

        1. Under no circumstances should you own a computer.

        2. If you absolutely must own a computer, under no circumstances should you connect it to the internet.

        3. If you absolutely must connect it to the internet, it’s too late and they already have you

        • HubertManne@piefed.social
          link
          fedilink
          English
          arrow-up
          3
          ·
          3 days ago

          I know this is a joke but im old enough we used to install the os and had it on the network and eventually update it but then it got to the point were like being connected to the internet for like a minute and the machines were compromised. Thats when we got off our duffs and started making custom installs that had updates and configurations and software pre installed before we even connected it to the net.

      • quick_snail@feddit.nl
        link
        fedilink
        English
        arrow-up
        3
        ·
        3 days ago

        Yep. And so many workplaces have had security vulnerabilities caused by dumb decisions that could have been easily avoided

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

        We just recently switched from npm to pnpm, due to all the supply chain attacks. I did the PR for it, even.

        Our release schedule is like a year though so we don’t really have to worry much about releasing compromised dependencies. But still, better to be on the safer side.

    • wizzim@infosec.pub
      link
      fedilink
      English
      arrow-up
      2
      ·
      3 days ago

      Unfortunately I have to use node for home project (Jellyfin tizen)

      I was wondering: would it be possible to run node in a sandbox to lower the scope of the attack? (i.e. not compromise my home computer) Or is maybe a full VM a better solution?

        • dieTasse@feddit.org
          link
          fedilink
          English
          arrow-up
          1
          ·
          3 days ago

          In case of NPM version pinning is a good practice. But also set it to ignore post install scripts. They are a bad practice and only about 2 % of all packages use it so it is unlikely it will bother you. They, the post install scripts, were used in recent supply chain attacks btw (the axios). You can either set it project wide in .npmrc file, add ignore-scripts=true, that is good for project where multiple people collaborate. And/Or system wide by running npm config set ignore-scripts true for your personal workspace. You can also achieve it by using --ignore-scripts flag during npm install, but that is way too impractical to always think about it. Also I would recommend checking npq, its a wrapper around npm cli that will give you some security summary before installing anything (and it is able to give you warning about post install scripts).

          • captcha_incorrect@lemmy.world
            link
            fedilink
            English
            arrow-up
            1
            ·
            5 hours ago

            Wait, any package that I download via NPM could potentially have a script that will run unless I set it to false, when I install said package?

      • quick_snail@feddit.nl
        link
        fedilink
        English
        arrow-up
        2
        ·
        3 days ago

        Full VM and network isolation. and dont put anything important there (nor a reused password for auth)

  • Eager Eagle@lemmy.world
    link
    fedilink
    English
    arrow-up
    42
    ·
    4 days ago

    reposting the tl;dr I wrote from another community…

    Yesterday, for about 1h30min (starting at 5:57pm ET / 21:57 UTC) anyone installing the latest version of the command line interface of bitwarden was installing malware.

    The malware steals GitHub/npm tokens, .ssh, .env, shell history, GitHub Actions and cloud secrets, then exfiltrates the data to private domains and as GitHub commits and doesn’t seem to be targeting Bitwarden specifically, or user vaults.

    There’s no evidence that end user vault data was accessed or at risk, or that production data or production systems were compromised, according to their official statement.

    It seems there were 334 bitwarden CLI downloads in this time period, some or many of which might have been from bots, so this is a higher bound to the number of affected users.

    • Corngood@lemmy.ml
      link
      fedilink
      English
      arrow-up
      10
      ·
      4 days ago

      I really need to figure out a better sandboxing method for shells. It’s crazy to be things where my keys, browser data, shell history are all accessible.

      I do try to use firejail where possible, but it’s quite cumbersome. Every so often I look for tools to help with this, but everything is oriented around making a specific program (e.g. Firefox, steam) work.

      • Eager Eagle@lemmy.world
        link
        fedilink
        English
        arrow-up
        1
        ·
        edit-2
        4 days ago

        yeah, about twice a year I use the CLI to backup my vault, and I’ve never felt comfortable installing an npm package to handle my vault. Now I’m definitely sandboxing it in a rootless container without internet next time. And installing a week old version, or older.

  • mazzilius_marsti@lemmy.world
    link
    fedilink
    English
    arrow-up
    21
    arrow-down
    8
    ·
    edit-2
    4 days ago

    lots of people recommend bitwarden, but i am more at peace with an offline password manager that i control like Keepass. You can also go the GNU route and use “pass” on Linux too

    Or use a physical key like Yubikey to login

    • peskypry@lemmy.ml
      link
      fedilink
      English
      arrow-up
      50
      ·
      edit-2
      4 days ago

      No. Offline password managers are also suspectible to supply chain risk.

    • aeiou_ckr@lemmy.world
      link
      fedilink
      English
      arrow-up
      9
      ·
      4 days ago

      Only if yubibkey worked for more than the handful of sites/services. I have one for my bitwarden as majority of places want to send a text or us totp.

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

        Also they only half work in Linux I guess? Something about not being able to create something.

    • mlg@lemmy.world
      link
      fedilink
      English
      arrow-up
      9
      ·
      4 days ago

      I’ve been trialing Vaultwarden for a while and while I do like the server sync setup and clean web access, the Bitwarden browser plugin is just okay despite being an “enterprise” solution. It misses probably about 20% of websites when creating a new account, forcing you to grab the password from the generator history and make a new entry manually.

      KeepassXC is much better in that regard, and it’s almost as good as the default credential handler of Firefox, and it lets you set up a bunch of custom stuff to extend the functionality if you want. Plus it has some neat kbdx options aside from AES256.

      Only downside is syncing, which I’m debating how I’ll deal with something better than syncthing on android (protocol is great, android makes it a PITA to have a background process if its not Google spyware).

  • elgordino@fedia.io
    link
    fedilink
    arrow-up
    15
    arrow-down
    2
    ·
    4 days ago

    Everyone should be using minimumReleaseAge (or their package managers equivalent) to block installing recently updated packages.

    • Mihies@programming.dev
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 days ago

      Any package manager is prone to supply chain attacks, npm is now affected because of a shit tone of dependencies every package brings 🤷