Bundled ca-bundle.crt trusts AAA Certificate Services, which cross-signed the compromised eMudhra intermediates
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 72/100
Research direction
Start with gems/aws-sdk-core/ca-bundle.crt and locate the AAA Certificate Services root identified by its SHA-256 fingerprint in the issue. Check the bundle against the supplied impacted intermediates or the reproduction using Aws.use_bundled_cert!. Done means certificates chaining through the compromised intermediates fail verification while the reported unrelated AWS endpoint behavior remains unaffected.
Written by the indexing model from the issue text.
Description
Describe the bug
The private keys of eight eMudhra intermediate CAs (EM DV/OV/EV TLS CA - G3B/G3C, EM OV CS CA - G3B/G3C) have been publicly disclosed as compromised: https://emudhra.we-have-a-problem.com/ (Mozilla bug: https://bugzilla.mozilla.org/show_bug.cgi?id=2083449). Anyone can recover the keys from the certificates. The intermediates were revoked on Oct 18–19, 2026.
Each intermediate was cross-signed by Sectigo's AAA Certificate Services root (SHA-256 D7A7A0FB5D7E2731D771E9484EBCDEF71D5F0C3E0A2948782BC83EE0EA699EF4). That root is still in gems/aws-sdk-core/ca-bundle.crt (last updated in 2018). Mozilla has already removed it from its root store.
As a result, anyone who calls Aws.use_bundled_cert! trusts TLS certificates issued by any of the compromised intermediates. Ruby/OpenSSL doesn't check revocation by default, so the revocations don't help. An attacker holding one of these keys could impersonate any HTTPS endpoint to those clients. That includes non-AWS endpoints and any custom :endpoint.
This is a different request from #3423. That issue was about new roots missing from the bundle. This one is about a root still in the bundle that now anchors publicly compromised keys.
Regression Issue
- Select this option if this issue appears to be a regression.
Expected Behavior
With Aws.use_bundled_cert!, certificates chaining to the compromised eMudhra intermediates should fail verification.
Current Behavior
They verify successfully. All 8 Sectigo cross-signed intermediates in the disclosure's impacted-intermediates.json verify against an OpenSSL::X509::Store loaded from ca-bundle.crt. A live TLS connection to the disclosure's test host also succeeds.
Reproduction Steps
require 'aws-sdk-core'
require 'net/http'
http = Net::HTTP.new('dv-g3b-aaa-emudhra.we-have-a-problem.com', 443)
http.use_ssl = true # VERIFY_PEER by default
http.ca_file = Aws.use_bundled_cert!
puts http.request_get('/').code
# => 200 (should raise OpenSSL::SSL::SSLError: certificate verify failed)
For comparison, dv-g3b-emudhra.we-have-a-problem.com (the same intermediate, issued directly by eMudhra's root) correctly fails with unable to get local issuer certificate.
Possible Solution
Either of these fixes it:
- Remove
AAA Certificate Servicesfromca-bundle.crt. This is the smallest change. - Regenerate
ca-bundle.crtfrom the current Mozilla/curl bundle (2026-10-20 or later). That bundle drops this root and the emSign roots.
A patch release of aws-sdk-core would help users who rely on Aws.use_bundled_cert!.
Additional Information/Context
- AWS service endpoints chain to Amazon Trust Services and aren't affected.
- Users who don't call
Aws.use_bundled_cert!use the OS/OpenSSL trust store and should update their systemca-certificatespackage instead.
Gem name ('aws-sdk', 'aws-sdk-resources' or service gems like 'aws-sdk-s3') and its version
aws-sdk-core 3.259.0 (version-3 @ 824e96b6d8)
Environment details (Version of Ruby, OS environment)
Ruby 3.4.5 (arm64-darwin24), OpenSSL 3.5.9, macOS 27.0.1. The behavior depends on the bundled file, not the platform.
This issue was generated by AI tools, and reviewed by DewaldoDev
- Dominant language
- Ruby
- Stars
- 3.7k
- Forks
- 1.2k
- Avg merge
- 1d 15h
- Merged PRs (30d)
- 24
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from aws/aws-sdk-ruby
-
service-api
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
aws/aws-sdk-ruby#3395 · 1 comment ·
Maintainers usually reply within 1 day
-
BedrockAgentCore: invoke_agent_runtime buffers entire response instead of streaming in real-timeOpendocumentation p3 queued
Difficulty 4/5 3-5 days Newbie friendliness 48/100
aws/aws-sdk-ruby#3348 · 6 comments · 1 reaction ·
Maintainers usually reply within 1 day
-
feature-request needs-major-version
Difficulty 3/5 1-2 days Newbie friendliness 48/100
aws/aws-sdk-ruby#3241 · 5 comments ·
Maintainers usually reply within 1 day
-
investigating service-api
Difficulty 4/5 3-5 days Newbie friendliness 35/100
aws/aws-sdk-ruby#3217 · 4 comments ·
Maintainers usually reply within 1 day
-
service-api
Difficulty 5/5 Over a week Newbie friendliness 25/100
aws/aws-sdk-ruby#3191 · 1 comment ·
Maintainers usually reply within 1 day
All issues in aws/aws-sdk-ruby
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
glossarist/glossarist-ruby#247 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
voxpupuli/puppet-corosync#589 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
theforeman/puppet-foreman_scap_client#93 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
simp/pupmod-simp-simp#406 ·