My first CVE (the bad kind) Developer Chris Smith disclosed GitHub advisory GHSA-87xc-jgvf-hmvg, a server-side request forgery (CWE-918) in his reverse proxy Centauri that carries a CVSS score of 10.0, after Anthropic's Claude Code flagged the flaw during a security audit he ran on his own projects. The bug lets a valid request containing an absolute URL make Centauri connect out and proxy that URL instead of the intended upstream, enabling use in DDoS attacks or access to internal services and ports, and bypassing Centauri's usual header filtering such as stripping of Tailscale-User-Login. Smith said no CVE has been assigned yet because GitHub has a multi-week backlog of advisories, and noted Centauri is a small project typically deployed in a Docker container on a dedicated network with only its upstreams. Let me set the scene: Friday night, after two weeks of fun https://nvd.nist.gov/vuln/detail/cve-2026-109618 security https://groups.google.com/g/golang-announce/c/PCoQcdxoScw/m/aD-MgXEvAAAJ issues https://emudhra.we-have-a-problem.com/ . A pile of leftover Claude tokens burning a hole in my pocket. A vague feeling that computing as we know it is fundamentally broken. That’s when she walked into my office. Trouble, in a red dress. She had legs for miles, and an HTTP request that went somewhere it shouldn’t. Uh, sorry, got a bit carried away there. So, anyway, I thought maybe I should try throwing Claude Code at some security audits. I’ve had LLMs do it before, and they weren’t particularly impressive. On chameth.com I have a little admin mode that sets an isadmin=1 cookie. If you have that cookie it shows some edit links, which don’t work unless you’re on my tailnet. I find this deliberate lack of security quite funny, but LLMs do not. And that’s the kind of “security finding” I expected. But models are advancing stupidly fast, so maybe it was worth another go? I ran through a list of projects and picked the juiciest targets: those used by more people, those with bigger attack surfaces, and so on. One of those was Centauri https://github.com/csmith/centauri , the reverse proxy I’ve mentioned a few times on this blog. It’s one of the projects I feel most confident in: it has a decent architecture, extensive unit tests, and a bunch of integration tests. So obviously it’s the project with a massive security flaw. I almost missed it. Despite being briefed to look at security issues, Claude decided to list a bunch of minor issues as well. I was about to close the terminal when a reference to “the critical issue” caught my eye. I scrolled up. Then I got a lovely sinking feeling. First off, the title is a bit of a lie. There’s no CVE yet. Apparently GitHub have a multi-week backlog of advisories. I understand why, but it’s still somewhat worrying to think about how many people might be sitting on disclosures because the only numbering authority they have access to is struggling to do their numbers fast enough. But GHSA-87xc-jgvf-hmvg https://github.com/csmith/centauri/security/advisories/GHSA-87xc-jgvf-hmvg it is for now. It gets a perfect 10.0 CVSS score. The short version is that if you send Centauri a valid request that happens to contain an absolute URL, it’ll connect out and proxy that URL instead of serving the upstream it was meant to. This is a textbook example of CWE-918: Server Side Request Forgery https://cwe.mitre.org/data/definitions/918.html aka SSRF. I really like this little diagram they have. That’s how my face looked. There are two ways this can be bad: you can cause Centauri to connect out to other URLs and, for example, use it as part of a DDoS attack; or you can cause Centauri to connect to internal URLs that it otherwise wouldn’t. If there are services that Centauri can reach that shouldn’t be exposed, or alternative ports on the services it is meant to reach, an attacker could get access to them. Centauri’s usual header filtering isn’t applied, either, so an attacker could pass some headers that Centauri would usually strip, like Tailscale-User-Login . Fortunately there’s another layer that strips the more common headers like X-Forwarded-For . The access to internal services is what nets this issue the big ten-point-zero: it’s remotely exploitable, and has a high confidentiality and integrity impact. Attackers could, in theory, do bad things inside your network. But as bad as that is, there are a lot of nuances that don’t come across in a CVSS score. Centauri is a very small project, not widely known or used. It’s generally deployed in a Docker container, on a dedicated network with just Centauri and its upstreams. It can’t reach stuff on other docker networks. If there is an accessible private service that shouldn’t be exposed, the attacker still needs to know the destination host and port. That’s not insurmountable: you could try all the common ports on all local IP ranges, but you do have to put some effort in with an expectation that it’ll work. So while it’s a terrible bug, and I feel awful about it