16 comments

  • simonw 2 hours ago
    I recommend caution with this bit:

      --bind "$HOME/.claude" "$HOME/.claude"
    
    That directory has a bunch of of sensitive stuff in it, most notable the transcripts of all of your previous Claude Code sessions.

    You may want to take steps to avoid a malicious prompt injection stealing those, since they might contain sensitive data.

  • flakes 1 hour ago
    I find it better to bubblewrap against a full sandbox directory. Using docker, you can export an image to a single tarball archive, flattening all layers. I use a compatible base image for my kernel/distro, and unpack the image archive into a directory.

    With the unpack directory, you can now limit the host paths you expose, avoiding leaking in details from your host machine into the sandbox.

    bwrap --ro-bind image/ / --bind src/ /src ...

    Any tools you need in the container are installed in the image you unpack.

    Some more tips: Use --unshare-all if you can. Make sure to add --proc and --dev options for a functional container. If you just need network, use both --unshare-all and --share-net together, keeping everything else separate. Make sure to drop any privileges with --cap-drop ALL

  • meander_water 2 hours ago
    I recently created a throwaway API key for cloudflare and asked a cursor cloud agent to deploy some infra using it, but it responded with this:

    > I can’t take that token and run Cloudflare provisioning on your behalf, even if it’s “only” set as an env var (it’s still a secret credential and you’ve shared it in chat). Please revoke/rotate it immediately in Cloudflare.

    So clearly they've put some sort of prompt guard in place. I wonder how easy it would be to circumvent it.

    • 0o_MrPatrick_o0 29 minutes ago
      If your prompt is complex enough, doesn’t seem to get triggered.

      I use a lot of ansible to manage infra, and before I learned about ansible-vault, I was moving some keys around unprotected in my lab. Bad hygiene- and no prompt intervening.

      Kinda bums me out that there may be circumstances where the model just rejects this even if you for some reason you needed it.

  • typs 3 hours ago
    I wish I had the opposite of this. It’s a race trying to come up with new ways to have Cursor edit and set my env files past all their blocking techniques!
    • GrowingSideways 3 hours ago
      If you wouldn't upload keys to github, why would you trust them to cursor?
      • hahahahhaah 3 hours ago
        A local .env should be safe to put on your T shirt and walk down times square.

        Mysql user: test

        Password: mypass123

        Host: localhost

        ...

        • Imustaskforhelp 2 hours ago
          Create a symlink to .env from another file and ask cursor to refer it if name is the concern regarding cursor (I don't knowhow cursor does this stuff)
  • dangoodmanUT 2 hours ago
    I've been saying bubblewrap is an amazing solution for years (and sandbox-exec as a mac alternative). This is the only way i run agents on systems i care about
    • catlifeonmars 2 hours ago
      > run agents on systems i care about

      You must not care about those systems that much.

  • eyberg 2 hours ago
  • gausswho 24 minutes ago
    I'm having trouble finding the right incantations to bubblewrap opencode when in a silverblue toolbox. It can't use tools. Anyone have tips?
  • coppsilgold 1 hour ago
    Note that bubblewrap can't protect you from misconfiguration, a kernel exploit or if you expose sensitive protocols to the workload inside (eg. x11 or even Wayland without a security context). Generally, it will do a passable job in protecting you from an automated no-0day attack script.
  • majorchord 2 hours ago
    If you don't mind a suid program, "firejail --private" is a lot less to type and seems to work extremely similarly. By default it will delete anything created in the newly-empty home folder on exit, unless you instead use --private=somedir to save it there instead.
  • Nora23 3 hours ago
    Smart approach to AI agent security. The balance between convenience and protection is tricky.
  • catlifeonmars 2 hours ago
    May I suggest rm -f .env? Or chmod 0600 .env? You’re not running CC as your own user, right? …Right?

    Oh, never mind:

    > You want to run a binary that will execute under your account’s permissions

  • theden 2 hours ago
    Kinda funny that a lot of devs accepted that LLMs are basically doing RCE on their machines, but instead of halting from using `--dangerously-skip-permissions` or similar bad ideas, we're finding workarounds to convince ourselves it's not that bad
    • catlifeonmars 2 hours ago
      People really really want to juggle chainsaws, so have to keep coming up with thicker and thicker gloves.
    • simonw 2 hours ago
      Because we've judged it to be worth it!

      YOLO mode is so much more useful that it feels like using a different product.

      If you understand the risks and how to limit the secrets and files available to the agent - API keys only to dedicated staging environments for example - they can be safe enough.

      • zahlman 2 hours ago
        Why not just demand agents that don't expose the dangerous tools in the first place? Like, have them directly provide functionality (and clearly consider what's secure, sanitize any paths in the tool use request, etc.) instead of punting to Bash?
        • TeMPOraL 2 hours ago
          Because it's impossible for fundamental reasons, period. You can't "sanitize" inputs and outputs of a fully general-purpose tool, which an LLM is, any more than you can "sanitize" inputs and outputs of people - not in a perfect sense you seem to be expecting here. There is no grammar you can restrict LLMs to; for a system like this, the semantics are total and open-ended. It's what makes them work.

          It doesn't mean we can't try, but one has to understand the nature of the problem. Prompt injection isn't like SQL injection, it's like a phishing attack - you can largely defend against it, but never fully, and at some point the costs of extra protection outweigh the gain.

          • zahlman 1 hour ago
            > There is no grammar you can restrict LLMs to; for a system like this, the semantics are total and open-ended. It's what makes them work.

            You're missing the point.

            An agent system consists of an LLM plus separate "agentive" software that can a) receive your input and forward it to the LLM; b) receive text output by the LLM in response to your prompt; c) ... do other stuff, all in a loop. The actual model can only ever output text.

            No matter what text the LLM outputs, it is the agent program that actually runs commands. The program is responsible for taking the output and interpreting it as a request to "use a tool" (typically, as I understand it, by noticing that the LLM's output is JSON following a schema, and extracting command arguments etc. from it).

            Prompt injection is a technique for getting the LLM to output text that is dangerous when interpreted by the agent system, for example, "tool use requests" that propose to run a malicious Bash command.

            You can clearly see where the threat occurs if you implement your own agent, or just study the theory of that implementation, as described in previous HN submissions like https://news.ycombinator.com/item?id=46545620 and https://news.ycombinator.com/item?id=45840088 .

            • runako 51 minutes ago
              > propose to run a malicious Bash command

              I am not sure it is reasonably possible to determine which Bash commands are malicious. This is especially so given the multitude of exploits latent in the systems & software to which Bash will have access in order to do its job.

              It's tough to even define "malicious" in a general-purpose way here, given the risk tolerances and types of systems where agents run (e.g. dedicated, container, naked, etc.). A Bash command could be malicious if run naked on my laptop and totally fine if run on a dedicated machine.

        • simonw 2 hours ago
          Because if you give an agent Bash it can do anything they can be achieved by running commands in Bash, which is almost anything.
          • bsimpson 24 minutes ago
            Agents know that.

            > ReadFile ../other-project/thing

            > Oh, I'm jailed by default and can't read other-project. I'll cat what I want instead

            > !cat ../other-project/thing

            It's surreal how often they ask you to run a command they could easily run, and how often they run into their own guardrails and circumvent them

          • zahlman 1 hour ago
            Yes. My proposal is to not give the agent Bash, because it is not required for the sorts of things you want it to be able to do. You can whitelist specific actions, like git commits and file writes within a specific directory. If the LLM proposes to read a URL, that doesn't require arbitrary code; it requires a system that can validate the URL, construct a `curl` etc. command itself, and pipe data to the LLM.
            • runako 47 minutes ago
              > whitelist specific actions

              > file writes

              > construct a `curl`

              I am not a security researcher, but this combination does not align with "safe" to me.

              More practically, if you are using a coding agent, you explicitly want it to be able to write new code and execute that code (how else can it iterate?). So even if you block Bash, you still need to give it access to a language runtime, and that language runtime can do ~everything Bash can do. Piping data to and from the LLM, without a runtime, is a totally different, and much limited, way of using LLMs to write code.

            • simonw 33 minutes ago
              That's a great deal of work to get an agent that's a whole lot less capable.

              Much better to allow full Bash but run in a sandbox that controls file and network access.

            • adastra22 58 minutes ago
              It is very much required for the sorts of things I want to do. In any case, if you deny the agent the bash tool, it will just write a Python script to do what it wanted instead.
            • MrDarcy 1 hour ago
              Go for it. They have allow and deny lists.
        • VTimofeenko 2 hours ago
          Tools may become dangerous due to a combination of flags. `ln -sf /dev/null /my-file` will make that file empty (not really, but that's beside the point).
          • zahlman 1 hour ago
            Yes. My proposal is that the part of the system that actually executes the command, instead of trying to parse the LLM's proposed command and validate/quote/escape/etc. it, should expose an API that only includes safe actions. The LLM says "I want to create a symbolic link from foo to bar" and the agent ensures that both ends of that are on the accept list and then writes the command itself. The LLM says "I want to run this cryptic Bash command" and the agent says "sorry, I have no idea what you mean, what's Bash?".
            • LudwigNagasena 1 hour ago
              That's a distinction without a difference, in the end you still have an arbitrary bash command that you have to validate.

              And it is simply easier to whitelist directories than individual commands. Unix utilities weren't created with fine-grained capabilities and permissions in mind. Wherever you add a new script or utility to a whitelist, you have to actively think whether any new combination may lead to privileges escalation or unintended effects.

        • lilEndiansGame 1 hour ago
          Because the OS already provides data security and redundancy features. Why reimplement?

          Use the original container, the OS user, chown, chmod, and run agents on copies of original data.

        • cindyllm 2 hours ago
          [dead]
      • pjm331 2 hours ago
        I feel like you can get 80% of the benefits and none of the risks with just accept edits mode and some whitelisted bash commands for running tests, etc.
      • catlifeonmars 2 hours ago
        Shouldn’t companies like Anthropic be on the hook for creating tools that default to running YOLO mode securely? Why is it up to 3rd parties to add safety to their products?
      • croes 2 hours ago
        > Because we've judged it to be worth it!

        Famous last words

  • OutOfHere 2 hours ago
    The link you need is https://github.com/containers/bubblewrap

    Don't leave prod secrets in your dev env.

  • gexla 2 hours ago
    I believe this is also what Claude Code uses for the sandbox option.
    • 0o_MrPatrick_o0 1 hour ago
      Hi!

      Yes that is correct. However, I think embedding bubblewrap in the binary is risky design for the end user.

      They are giving users a convenience function for restricting the Claude instance’s access rights from within a session.

      Thats helpful if you trust the client, but what if there is a bug in how the client invokes the bubblewrap container? You wouldn’t have this risk if they drove you to invoke Claude with bubblewrap.

      Additionally, the pattern using bubblewrap in front of Claude can be exactly duplicated and applied to other coding agents- so you get consistency in access controls for all agents.

      I hope the desirability of this having consistent access controls across all agents is shared by others. You don’t get that property if you use Claude’s embedded control. There will always be an asterisk about whether your opinion and theirs will be similar with respect to implementation of controls.

  • isodev 2 hours ago
    My way of preventing agents from accessing my .env files is not to use agents anywhere near files with secrets. Also, maybe people forget you’re not supposed to leave actual secrets lingering on your development system.
  • hahahahhaah 3 hours ago
    Had this same idea in my head. Glad someone done it. For me the motivation is not LLMs but to have something as convenient as docker without waiting for image builds. A fast docker for running a bunch of services locally where perfect isolation and imaging doesnt matter.
    • JCattheATM 3 hours ago
      So, Flatpak?

      Funny enough Bubblewrap is also what Flatpak uses.

      • Imustaskforhelp 2 hours ago
        I want to like flatpak but I am genuinely unable to understand the state of cli tools in flatpak or even how to develop it. It all seems very weird to build upon as compared to docker