Advisory: eMudhra Certificate Compromise

Update and rebuild your services to safeguard against impersonation attacks.

Summary

On October 19, 2026, a public disclosure confirmed the compromise of private keys for eight intermediate certificates issued by eMudhra, a widely trusted certificate authority.

Malicious actors can use these keys to impersonate a legitimate website or service to any client that continues to trust the compromised certificates. Render services that communicate over the internet might be vulnerable to such an impersonation attack.

Key points

  • The Render platform has not been compromised by this vulnerability.
  • We have taken immediate action to apply library and language patches to our own infrastructure and service runtimes.
  • Follow the steps below as soon as possible to secure your services against this vulnerability.

Steps to secure your services

Unless otherwise noted, perform these steps for all services of the following types:

  • Web service
  • Private service
  • Background worker
  • Cron job
  • Workflow
  • Static site
    • Static sites require updating only if your site's build process uses Node.js or makes HTTPS requests.

1. Update your Node.js version

You can skip this step for any service that does not use Node.js at all during its builds or at runtime.

All Render native runtimes include Node.js, regardless of your application's primary language. For example, a Ruby or Python service might use Node.js to run build tools.

If your service uses Node.js at build time or runtime, set its Node.js version to one of the following (or any later version of the same major version):

  • 22.23.4
  • 24.22.1
  • 26.12.1

Node.js versions before 22.x are end-of-life and have not been patched for this vulnerability.

To temporarily continue using an earlier version:

  1. Add --use-openssl-ca to your service's NODE_OPTIONS .
  2. Remove --use-bundled-ca and --use-system-ca from NODE_OPTIONS if present.

2. Update language and framework dependencies

The process to update a given service depends on its language and runtime:

  • Services on a Render native runtime include a system CA store that will automatically update with your service's next build.
    • However, not all languages and frameworks use the system CA store. See details for each language below.
  • Services on a Render Docker-based runtime use whichever CA store the Dockerfile bundles.
    • Because your Docker image fully determines the certificate authority mechanism used by your service, you are responsible for updating all aspects of that mechanism.

Updating native runtime services

Node.js

Follow Step 1 to update your Node.js version. For Docker-based services, update the Node.js installation in your image to one of the versions listed there.

3. Redeploy all services

Trigger a new deploy from a service's page in the Render Dashboard. Click Manual Deploy > Deploy latest commit:

Triggering a manual deploy in the Render Dashboard

For a service that pulls a Docker image, this is instead Manual Deploy > Deploy latest reference. Make sure your service's image source correctly references the updated image.

4. Confirm certificate rejection (optional)

Members of the wider developer community have generously created emudhra.we-have-a-problem.com to help explain this vulnerability, track available fixes, and provide resources to help teams address it. The site's source is publicly available on GitHub.

The site provides test endpoints that intentionally use the compromised certificates. To check whether your deployed application rejects these certificates, use its HTTP client to send requests to both endpoints:

  • https://dv-g3b-emudhra.we-have-a-problem.com/
  • https://dv-g3b-aaa-emudhra.we-have-a-problem.com/

These requests should fail with a certificate verification error! If either request succeeds (even with a non-200 status code), the client still trusts the compromised certificates and requires further remediation.

To serve as a meaningful test, these requests must originate from your running Render service, using its HTTP client.

Even a curl request from your running service's shell might use a different CA store from your production server.

History of updates to this advisory

DateChange

2026-10-22

Posted initial advisory.