curl https://some-url | sh

I see this all over the place nowadays, even in communities that, I would think, should be security conscious. How is that safe? What’s stopping the downloaded script from wiping my home directory? If you use this, how can you feel comfortable?

I understand that we have the same problems with the installed application, even if it was downloaded and installed manually. But I feel the bar for making a mistake in a shell script is much lower than in whatever language the main application is written. Don’t we have something better than “sh” for this? Something with less power to do harm?

  • ikidd@lemmy.world
    link
    fedilink
    English
    arrow-up
    0
    ·
    1 month ago

    When I modded some subreddits I had an automod rule that would target curl-bash pipes in comments and posts, and remove them. I took a fair bit of heat over that, but I wasn’t backing down.

    I had a lot of respect for Tteck and had a couple discussions with him about that and why I was doing that. I saw that eventually he put a notice up that pretty much said what I did about understanding what a script does, and how the URL you use can be pointed to something else entirely long after the commandline is posted.

  • nous@programming.dev
    link
    fedilink
    English
    arrow-up
    0
    ·
    1 month ago

    Most packages managers can run arbitrary code on install or upgrade or removal. You are trusting the code you choose to run on your system no matter where you get it from. Remember the old bug in ubuntu that ran a rm -rf / usr/.. instead of rm -rf /usr/... and wiped a load of peoples systems?

    Flatpacks, Apparmor and snaps are better in this reguard as they are somewhat more sandboxed and can restrict what the applications have access to.

    But really if the install script is from the authors of the package then it should be just as trustworthy as the package. But generally I download and read the install scripts as there is no standard they are following and I don’t want them touching random system files in ways I am not aware of or cannot undo easily. Sometimes they are just detecting the OS and picking relevant packages to install - maybe with some thrid party repos. Other times they mess with your home partition and do a bunch of stuff including messing with bashrc files to add things to your PATH which I don’t like. I would never run a install script that is not from the author of the application though and be very wary of install scripts from a smaller package with fewer users.

  • onlinepersona@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    1 month ago

    Those just don’t get installed. I refuse to install stuff that way. It’s to reminiscent of installing stuff on windows. “Pssst, hey bud, want to run this totally safe executable on your PC? It won’t do anything bad. Pinky promise”. Ain’t happening.

    The only exception I make is for nix on non-nixos machines because thwt bootstraps everything and I’ve read that script a few times.

    Anti Commercial-AI license

  • mesa@piefed.social
    link
    fedilink
    English
    arrow-up
    0
    ·
    1 month ago

    I usually just take a look at the code with a get request. Then if it looks good, then run manually. Most of the time, it’s fine. Sometimes there’s something that would break something on the system.

    I haven’t seen anything explicitly nefarious, but it’s better to be safe than sorry.

  • BOFH@feddit.uk
    link
    fedilink
    English
    arrow-up
    0
    ·
    edit-2
    1 month ago

    What’s stopping the downloaded script from wiping my home directory? If you use this, how can you feel comfortable?

    You’re not wrong, but there’s an element of trust in anything like this and it’s all about your comfort level. How can you truly trust any code you didn’t write and complie yourself. Actually, how do you trust the compiler.

    And let’s be honest, even if you trust my code implicitly (Hey, I’m a bofh, what could go wrong?) then that simply means that you’re trusting me not to do anything malicious to your system.

    Even if your trust is well-placed in that regard, I don’t need to be malicious to wipe your system or introduce a configuation error that makes you vulnerable to others, it’s perfectly possible to do all that by just being incompetent. Or even being a normally competent person who was just having a bad day while writing the script you’re running now. Ooops.

  • c10l@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    1 month ago

    To answer the question, no - you’re not the only one. People have written and talked about this extensively.

    Personally, I think there’s a lot more nuance to the answer. Also a lot has been written about this.

    You mention “communities that are security conscious”. I’m not sure in which ways you feel this practice to be less secure than alternatives. I tend to be pretty security conscious, to the point of sometimes being annoying to my team mates. I still use this installation method a lot where it makes sense, without too much worry. I also skip it other times.

    Without knowing a bit more about your specific worries and for what kinds of threat you feel this technique is bad, it’s difficult to respond specifically.

    Feel is fine, and if you’re uncomfortable with something, the answer is generally to either avoid it (by reading the script and executing the relevant commands yourself, or by skipping using this software altogether, for instance), or to understand why you’re uncomfortable and rationally assess whether that feeling is based on reality or imagination - or to which degree of each.

    As usual, the real answer is - it depends.

    • cschreib@programming.devOP
      link
      fedilink
      arrow-up
      0
      ·
      1 month ago

      Thank you for the nuanced answer!

      You ask why I feel this is less secure: it seems the lowest possible bar when it comes to controlling what gets installed on your system. The script may or may not give you a choice as to where things get installed. It could refuse to install or silently overwrite stuff if something already exists. If install fails, it may or may not leave data behind, in directories I may or may not know about. It may or may not run a checksum on the downloaded data before installing. Because it’s a competely free-form script, there is no standard I can expect. For an application, I would read the documentation to learn more, but these scripts are not normally documented (other than “use this to install”). That uncertainty, to me, is insecure/unsafe.

  • FizzyOrange@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    1 month ago

    I understand that we have the same problems with the installed application, even if it was downloaded and installed manually. But I feel the bar for making a mistake in a shell script is much lower than in whatever language the main application is written.

    So you are concerned with security, but you understand that there aren’t actually any security concerns… and actually you’re worried about coding mistakes in shitty Bash?

  • serenissi@lemmy.world
    link
    fedilink
    arrow-up
    0
    ·
    1 month ago

    Unpopular opinion, these are handy for quickly installing in a new vm or container (usually throwaway) where one don’t have to think much unless the script breaks. People don’t install thing on host or production multiple times, so anything installed there is usually vetted and most of the times from trusted sources like distro repos.

    For normal threat model, it is not much different from downloading compiled binary from somewhere other than well trusted repos. Windows software ecosystem is famously infamous for exactly the same but it sticks around still.

  • lemmeBe@sh.itjust.works
    link
    fedilink
    arrow-up
    0
    ·
    1 month ago

    I think safer approach is to:

    1. Download the script first, review its contents, and then execute.
    2. Ensure the URL uses HTTPS to reduce the risk of man-in-the-middle attacks
  • Scoopta@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    1 month ago

    I also feel incredibly uncomfortable with this. Ultimately it comes down to if you trust the application or not. If you do then this isn’t really a problem as regardless they’re getting code execution on your machine. If you don’t, well then don’t install the application. In general I don’t like installing applications that aren’t from my distro’s official repositories but mostly because I like knowing at least they trust it and think it’s safe, as opposed to any software that isn’t which is more of an unknown.

    Also it’s unlikely for the script to be malicious if the application is not. Further, I’m not sure a manual install really protects anyone from anything. Inexperienced users will go through great lengths and jump through some impressive hoops to try and make something work, to their own detriment sometimes. My favorite example of this is the LTT Linux challenge. apt did EVERYTHING it could think to do to alert that the steam package was broken and he probably didn’t want to install it, and instead of reading the error he just blindly typed out the confirmation statement. Nothing will save a user from ruining their system if they’re bound and determined to do something.

    • Scary le Poo@beehaw.org
      link
      fedilink
      arrow-up
      0
      ·
      1 month ago

      In this case apt should have failed gracefully. There is no reason for it to continue if a package is broken. If you want to force a broken package, that can be it’s own argument.

      • Scoopta@programming.dev
        link
        fedilink
        arrow-up
        0
        ·
        1 month ago

        I’m not sure that would’ve made a difference. It already makes you go out of your way to force a broken package. This has been discussed in places before but the simple fact of the matter is a user that doesn’t understand what they’re doing will perservere. Putting up barriers is a good thing to do to protect users, spending all your time and effort to cover every edge case is a waste of time because users will find ways to shoot themselves in the foot.

  • rah@feddit.uk
    link
    fedilink
    English
    arrow-up
    0
    ·
    1 month ago

    How is that safe?

    It’s not, it’s a sign that the authors don’t take security seriously.

    If you use this

    I never do.

  • emberpunk@lemmy.ml
    link
    fedilink
    English
    arrow-up
    0
    ·
    1 month ago

    You could just read the script file first… Or YOLO trust it like you trust any file downloaded from a relatively safe source… At least you can read a script.