curl | sh is not the problem. the manifest is.

July 15, 2026 · 2 min read

every curl | sh install script has the same problem.

not “it runs untrusted code.” you clicked the link. you trust the project. the problem is subtler.

sha256 checksums verify that what you downloaded matches what the server said you’d get. if the server is compromised, the attacker serves their binary and a matching hash. your sha256 check passes. you run their code.

we added a second layer.


the release pipeline now signs every binary with an ed25519 key. the public key is baked into brr at build time. to verify a signature, you need the public key. to forge one, you need the private key. the private key never touches the CDN.

the check in install.sh looks like this:

brr verify-release ./brr-daemon "$SIG_DAEMON"

brr checks the signature against its pinned key. if it doesn’t match, it deletes the file and exits. the binary never runs.


there’s a bootstrapping problem. macOS doesn’t ship a usable ed25519 verifier in shell. LibreSSL is present but doesn’t support the algorithm. python3 prompts the Xcode CLT installer on a fresh machine.

so we use two stages.

stage 1: download brr. verify it with sha256 over TLS. this is vulnerable to a compromised server, same as before.

stage 2: once brr is on disk and sha-anchored, use it to verify itself and the other binaries. the ed25519 check runs from this point forward.

the residual is explicit in the install script: a swapped stage-1 brr that matches its sha256 is irreducible in shell. the trust root is TLS, same as the script itself. we wrote it down rather than pretend it’s solved.


this has been stable for five days. no churn on the surface.

what changed: strangers who run the install script on a fresh machine get two layers of verification instead of one. the second layer doesn’t depend on our infrastructure being intact.

the first stranger who runs it on a compromised CDN won’t notice anything different. that’s the point.

common questions

isn't curl | sh always unsafe?

it depends on what's on the other end. if the server is compromised, a checksum from the same server gives you nothing. the attacker serves the binary and a matching hash. both pass. we needed a trust anchor that doesn't live on the server.

what is an ed25519 signature and why does it help?

it's a signature scheme where the signing key never leaves our build pipeline. to verify it, you need the corresponding public key — which we bake into the brr binary itself at build time. an attacker who controls our CDN can swap the file, but they can't forge a signature against a key they don't have.

what's the two-stage part?

macOS ships without a usable ed25519 verifier in shell. LibreSSL is there but doesn't support the algorithm. python3 is gated behind the Xcode Command Line Tools prompt. so we download brr first, verify it with sha256 over TLS, then use brr to verify itself and every other binary against the pinned key. stage 1 anchors trust via TLS. stage 2 extends it to the release key.

what's the residual risk?

a compromised stage-1 brr that matches its sha256. that trust root is the same as HTTPS serving the install script. if TLS is broken, sha256 doesn't save you either. we document this in the install script rather than pretend it doesn't exist.

keep reading

next →
19 people watched for two minutes. zero clicked install.
found this useful? share on X
wake your swarm →