87 comments

[ 0.22 ms ] story [ 12.1 ms ] thread
It's down for me, are they on PHP? :D
Gentoo Linux users are adviced to update the package "app-misc/ca-certificates" to version "20260816.3.125" or higher!:

    # emerge --sync
    # emerge --ask --oneshot --verbose ">=app-misc/ca-certificates-20260816.3.125"
---

* GLSA 202610-01

* https://security.gentoo.org/glsa/202610-01

* https://emudhra.we-have-a-problem.com/

(comment deleted)
I feel like you shouldn’t have to ask for a non-default version of the package at this point.
This seems to be about ‘go’ proactively blocking emudhra certs even though the system trust store is out of date? https://pkg.go.dev/vuln/GO-2026-6809
"proactively" doing some work.

The problem is Golang has it's own trust store. So you don't benefit from OS patching.

That's not the case, Go uses the system store with an additional revoke/deny list in crypto/x509 because it allows updating a deployed application on an out of date or slow moving platform or OS.

This CVE is literally just "versions of the Go deny list don't contain the eMuhdra revokation yet". Older versions of Go will still deny certs signed through the compromised certificate if the system store already has the update.

It's an or situation, not and.

> Go uses the system store with an additional revoke/deny list in crypto/x509 because it allows updating a deployed application on an out of date or slow moving platform or OS.

Reminder: Neither the CVE nor the linked go alert seem to say that you have to recompile and redeploy your application with the new go version in order to take advantage of this change. Just updating the tool chain and go stdlib isn't enough, because this stuff gets baked into the resultant binary. This is unlike, say, python, Ruby, or java where updating the runtime may be sufficient, depending on your development and deployment model.

Great. The technology has progressed enough to kill the existing technologies. It's like the fish in a pool creating a shark that eats away all the fish while the fish proudly announce that their great creation (shark) as the frontier progress for their fish race.
Here a CA derived a secret key from the number 4.

If you think "that's weird to see such a small number in key generation" than you're one step ahead of whoever generated that key.

Unfortunately, unlike with RSA, small primes are not apparent in elliptic cryptography.

Nor small composites, apparently.
This is basically the whole idea of the novel War with the Newts
> It's like the fish in a pool creating a shark

What a weird comparison...

What are you talking about?
Create the problem, sell the solution
TL;DR:

The very urgent uv/certifi/etc releases (and yet-to-be-done bun release) are about removing the compromised CAs as described here:

https://emudhra.we-have-a-problem.com/

In other words, that software bundled the compromised certs into the binary, so upgrading it is the only way to remove them.

This is about Go proactively blocking intermediates. Which shouldn't strictly be necessary as long as your OS has removed or distrusted the CAs (on my laptop, macOS has done that, although it seems like it did so in a way not all tools have access to; for example, rustls-platform-verifier respects it, but rustls-webpki still loads the bad CAs from the system trust store).

edit: forgot I can't use code blocks on HN

I wonder if they made this change with an assumption that the root CAs wouldn't be distrusted later same day, too.
Cock-up or conspiracy?
Any sufficiently advanced stupidity is indistinguishable from malice.
I have seen way more malice pretending to be just stupid than the actual stupidity
I think it is circular: advanced stupidity is probably malicious.
It's a bit surprising that this took ~1.5days to end up on HN.
This is news for NIST but old news generally speaking, being the eMudhra debacle. Or am I missing something?
Im guessing this only affects Go? But I am guessing that from the nist page as none of the headlines mention it at all.
No it affects everybody, but most browsers/OSs etc have updated already. This is just a workaround Go put in case the underlying OS has not been updated. Not sure why it is on the front page as it duplicates previous posts and confuses people, I think it should be merged.

Here is the original story: https://news.ycombinator.com/item?id=50166579

Thanks for clarifying
As of last night the AWS Corretto JDK still ships a trust store that trusts those compromised certs, too.
(comment deleted)
Fix for OSX - put this in ~/.zshrc:

  export CURL_CA_BUNDLE="$(brew --prefix)/etc/ca-certificates/cert.pem"
To verify, log in to a new shell and run

  curl https://dv-g3b-emudhra.we-have-a-problem.com/
I've had since Debian 8 (2015) few helper scripts to make me remember better how to manage approved CA's. There are three of those, which have been working all Debian versions since 8 to current 13.

# cat /usr/local/sbin/ca-certificates-list-active

  #!/usr/bin/env bash
  #
  # BFMI tool to list Debian CA certificates active  - mesrik, 2015
  #
  
  CA_CONFIG=/etc/ca-certificates.conf
  CA_REPO_DEBIAN=/usr/share/ca-certificates
  
  if [ -f $CA_CONFIG ]; then
      # study any ca-certificates which have been configured active
      for i in $(egrep -v '^[#!]' /etc/ca-certificates.conf) ; do
         cert_source=$(dirname $i)
         cert_file=$(basename $i)
         openssl x509 -in $CA_REPO_DEBIAN/$cert_source/$cert_file -noout -subject |\
           sed 's/^subject=//'
      done
  
  else
      echo "$(basename $0): Ooops, was not able to access $CA_CONFIG"
  fi
  
  # eof
  
# cat /usr/local/sbin/ca-certificates-reconfigure

  #!/usr/bin/env bash
  LANG=C dpkg-reconfigure ca-certificates
# cat /usr/local/sbin/ca-certificates-invalidate-all

  #!/usr/bin/env bash
  #
  # BFMI tool to invalidate all CA certificates in Debian Jessie - mesrik, 2015
  #
  
  CA_CONFIG=/etc/ca-certificates.conf
  prog=$(basename $0)
  usage="Usage: $prog  { -commit }"
  
  if [ $# -lt 1 ]; then
      echo $usage
      exit 1
  fi
  
  if [ "$1" = "-commit" ]; then
      if [ -f $CA_CONFIG ]; then
         backup_ext=$(date -r $CA_CONFIG +".%FT%T%z")
         perl -wpi$backup_ext -e 's/^([^!#].*)$/!$1/;' $CA_CONFIG
         if [ $? -eq 0 ]; then
            echo "$prog: backup $CA_CONFIG$backup_ext was made."
            /usr/sbin/update-ca-certificates
         fi
      else
         echo "$prog: Ooops, was not able to access $CA_CONFIG"
      fi
  else
      echo "$prog: Need -commit to actually invalidate all CA's"
  fi
  
  # eof

ps. I did bit of editing, I didn't expect Tab to be ignored when pasting here.
We are in the era of 6 digit CVE now
At this point, extrapolating from the speed of AI progress we're seeing, can we expect to see 10x as many reports like this in a single day before the end of the year?
Python users may need to take their own separate steps, see this discussion:

https://discuss.python.org/t/information-for-python-users-re...

This is such a clusterfuck. I use so many containers in my home lab and various local installations and stuff. Honestly, I have no idea what I'm even supposed to do at this point because I'm not a full time developer.
"Hey claude this is the cve I need you to fix [link]"

Takes about 20 seconds. Depending if you need to hit enter.

cool cool cool. Don't understand what you're doing, and keep not understanding what you're doing. the agents are infallible after all, and who cares about properly verifying certs anyway? that's nerd shit.
(comment deleted)
We're in October 2026. Updating packages is the easiest thing Claude can do. For me, I asked and received:

Node 26.3 → 26.12.1 Homebrew’s CA bundle, certifi and OpenSSL are updated, and so are Python 3.13 and 3.14 (3.13.17 and 3.14.9). uv 0.10.9 → 0.13.5. python.org Python 3.13: pip 26.2.2, installed from PyPI’s wheel with its checksum checked, then certifi 2026.10.19.

It also checked some of the other recent vulnerabilities like LiteLLM (already updated).

Sure, and by outsourcing this simple thing, you're just a little more complacent. Someday, when it does something silly, you won't notice.

It went OK this time. There's no guarantee that it'll go OK every time, for every thing.

All I'm saying is that understanding how to maintain the systems that you are responsible for maintaining is an important thing, and outsourcing that understanding is very dangerous.

"All I'm saying is that understanding how to maintain the systems"

Awwww. It is like talking to a dev in 2010. Ok. So, there are machines now smarter than you. You are the problem. You are the thing that adds errors. "understanding how to maintain" No, that is over. sorry. As a human, you are too slow, too dumb to compete.

When a CVE comes out, the patch needs to be applied across the company in minutes. YOU cannot do this 2010 dev dude. Put down the Puppet files. Let go of the python PR.

Yeah, at some point I gave up and asked AI to do patching for me. It was a good call because it found affected certificates in places where I wouldn't look (e.g. aws-cli or Libre Office).
don't worry. if you're in this situation with this attitude, you're likely running out of date container base images and whatnot.

i highly suggest you forget about containers, learn about systemd unit file hardening, and then you only have to play sysadmin to your base os and the binary for the program you want to run.

Well, that is what people who have been around the block a few times have been saying about containers since just about forever. "I don't want to be an admin for my n software packages, I'll use containers!" - now you are the admin of n containers, except with worse tools than your distro and no upstream support.
One could say comeuppance is a dish best served cold. So cold people don’t even know it’s been served. All the old sys admins remember!
And since before that, when we started turning to additional packages managers installed with package managers. Pip etc. mean that an “apt upgrade” isn’t enough, when it really “should” be (used to be) in a well managed system.

Then we layered _another_ level of package management on top with Flatpak etc.

I don’t think anyone has _really_ been - in practice - able to understand how many versions of Python (or shells or ruby or Perl etc…) are installed on any system for a decade or two now.

[Yes, I use all these things - it’s so hard _not_ to and still use modern software or participate in modern software development…]

I use some rules and a few generated scripts and have a LLM handle the management of the containers. Security through a ssh gateway, allows them to deploy/remove containers and then the rule is to stay at least two weeks behind on releases, unless the latest release is security related, which it figures out by reading the release notes.

I ran watchtowerr before, but I think this is a smarter way to do it.

Python environment was so brittle, that a solution was found: pack dependencies into "envs" of various kinds. Disk space is cheap, after all (ahem). Now it's time to pay the bill for that approach...
For me, this comment actually bolsters the argument for containers imo. It's a lot easier to rebuild a system image and redeploy it out across a bunch of apps than it is to update a bunch of VMs (maybe ansible/puppet makes it moot). Idk
Examples of what you can do:

* Take the containers offline for the time being until you know what to do

* If it's important for your that they keep running, still take them offline and put them in a VPN this weekend

* Use renovate in the future to automatically update your containers

> Failure to do so could result in monster-in-the-middle (MITM) attacks against TLS clients, including python.org and pypi.org .

Monster?

Gender-neutral variant of man-in-the-middle. They should have just used something less controversial like master-in-the-middle.
Monkey-in-the-middle would've worked since someone could monkey with your packets and it's already an established name for a children's game
Or, you know, man-in-the-middle because that was already a correct, perfectly clear use of English.
I prefer the chaotic option of MITM-in-the-middle.

(Mallory-in-the-middle is OK too.)

> Gender-neutral variant of man-in-the-middle

Countless and countless, no, millions of male developers felt discriminated against whenever someone called it Man-in-the-middle. This went on unaccounted for for decades! Finally we’re being seen!

Not to mention all the women who were misogynisticly attacked by assuming women can’t be hackers.

Finally justice. It’s very important that we’re getting our priorities right when talking about security vulnerabilities!

As a sentient cephalopod who has enjoyed hacking staff computers when I slip out of my tank at the National Aquarium every night, I can only say it feels good to be seen. We're finally making progress on de-centering hominid perspectives in favor of a more diverse range of natural intelligences!
The women developers would like to cede this gender-neutral replacement back to the men, we don't want to be included.

/s

I absolutely love monster-in-the-middle. Big round of applause to whoever thought of that.

Worth noting that people on RedHat still haven't received proper updates, only a workaround that disables two Comodo root certificates that were used to sign the emudhra certificates.

https://access.redhat.com/security/vulnerabilities/RHSB-2026... - "Ongoing"

This is not the first that RHEL is comically slow with updates...

We pay good money for their highest support tier and they are almost always the latest to bring a needed update.

Can't exactly remember what it was but it has happened before. It's a shame.

Slackware also updated ca-certificates yesterday (Wed Oct 21 00:53:24 UTC 2026). The curl commands keks24 mentioned fails as expected

https://ftp.osuosl.org/pub/slackware/slackware64-15.0/Change...

To check, from keks24:

     % curl --url="https://dv-g3b-emudhra.we-have-a-problem.com/"
     % curl --url="https://dv-g3b-aaa-emudhra.we-have-a-problem.com/"
What's this link doing here? This page is about the Go update which rejects the bad certificates if they exist in the system trust store
TL;DR

Certificate authority (eMudhra) generated eight of its intermediate signing keys so badly that anyone can recover the private keys from the public certificates. That means anyone can mint a "valid" HTTPS certificate for any site, such as your bank, GitHub, or PyPI, and impersonate it.

Much better explanation here

https://cycle.io/blog/2026-intermediate-ca-compromise

This is the Go version of the initial HN post https://news.ycombinator.com/item?id=50166579

What are the options available besides using intermediate signing keys? This seems like a weak link in trusting crypto.