7호02 / 05

eMudhra 중간 CA 8개의 개인키가 한 바이트였다 — 1초 만에 복구, 브라우저들이 긴급 차단

원문 Scott Helme ↗

Scott Helme의 글 "8비트의 신뢰"와 Cloudflare의 대응 글, 연구자의 공개 사이트를 합쳐 정리합니다.

결함

eMudhra 중간 CA 8개의 P-384 개인키 값(d)이 4, 56, 115 같은 한 바이트였습니다. 정상이라면 384비트 난수여야 합니다. 공개키는 d×G이므로 0부터 255까지 대입하면 최대 255번 만에 맞는 d가 나옵니다. Helme는 노트북에서 16개 인증서(키 8개 × 발급본 2개, Sectigo의 AAA Certificate Services 교차서명 포함)의 키를 약 1초에 전부 복구했다고 밝혔고, 나중에 AI 에이전트에 프롬프트 하나로도 됐다고 덧붙였습니다.

8개의 구성: TLS 발급 CA 6개(DV·OV·EV × G3B/G3C), 코드서명 CA 2개.

키는 2025년 4월 생성됐고, Sectigo 교차서명은 5월입니다. 그 뒤 CT 로그에 이 CA로 발급된 인증서 기록은 없습니다. Helme가 전한 eMudhra 측 설명은 스크립트 버그로 HSM에 두 번째 약한 키쌍이 생성됐고 비슷한 이름 때문에 사람이 잘못 골랐다는 것인데, 공식 결론인지는 확인되지 않습니다.

타임라인

날짜 내용
10/17 (토) 연구자가 Apple·Google·Microsoft·Mozilla·eMudhra에 신고. 같은 날 저녁 Chrome CRLSet 차단, 몇 시간 뒤 Firefox OneCRL 차단
10/19 Cloudflare 인지(약 17:00 UTC). 다운스트림 신뢰 저장소에 공개
10/20 Mozilla 공개 발표, 루트 제거 NSS 업데이트. Microsoft 차단. Cloudflare WARP(02:00)·cloudflared(09:15)·CDN 및 Zero Trust(19:20) 완화 배포
10/22 Apple 차단

Chrome은 루트 자체를 Chrome Root Store v43에서 제외한다고 확인했습니다.

영향

악용 가능성: 공격자가 이 키로 임의 도메인의 인증서를 만들어 서버를 사칭할 수 있습니다. Cloudflare는 자사 서비스에서 실제 악용을 확인하지 못했다고 밝혔습니다. 발급된 최종 인증서 수와 영향 도메인 수는 어느 글에도 없습니다.

브라우저 밖이 문제다

Cloudflare 글의 핵심입니다. 브라우저는 CRLSet·OneCRL 같은 "스위치 하나"로 고쳐졌습니다. 그러나

  • 서버의 신뢰 저장소(OS ca-certificates, Python certifi, Node, JVM cacerts)는 각자 갱신해야 합니다.
  • 컨테이너는 베이스 이미지를 갱신하고 다시 빌드해야 합니다. SDK만 올려서는 안 되고, 실제 TLS 경로를 정하는 건 HTTP 라이브러리·런타임·OS입니다.
  • Windows는 eMudhra 코드서명 루트를 직접 신뢰하며, 폐기 확인을 켜지 않으면 체인을 수락한다고 Helme가 테스트로 확인했습니다.
  • 라우터·프린터·IoT는 갱신 수단이 없으면 인증서 만료(2039년 7월)까지 믿습니다.

Cloudflare는 "오류가 나더라도 검증을 끄는 것으로 해결하지 말라"고 강조했습니다.

실무에서 할 일

  1. 서버·CI·컨테이너의 CA 번들을 갱신하세요. ca-certificates, certifi, Node, JVM 각각입니다.
  2. 베이스 이미지를 갱신하고 재빌드·재배포하세요. 실행 중인 컨테이너는 안 바뀝니다.
  3. mTLS로 클라이언트 인증서를 받는 곳은 업로드된 CA 목록에 eMudhra가 있는지 보세요.
  4. curl이나 브라우저로 테스트하는 건 백그라운드 서비스를 증명하지 못합니다. 실제 앱의 TLS 경로로 확인하세요.
  1. 01PHP 8.x 전 라인 RCE 2건 — CVE가 하루 먼저 새고, 릴리스가 앞당겨졌다
  2. 02eMudhra 중간 CA 8개의 개인키가 한 바이트였다 — 1초 만에 복구, 브라우저들이 긴급 차단지금 읽는 글
  3. 03LiteLLM 1.107.0 침해 — Python이 뜰 때마다 도는 자격증명 탈취기, 공식 파이프라인으로 배포됐다
  4. 04DuckDB 2.0 LTS "Cinnamon Teal" — 새 파서가 기본, VARIANT 타입, 비동기 I/O, 그리고 2.0 파일은 1.x가 못 읽는다
  5. 05OpenCode Console 침해 — 저장해 둔 Anthropic·OpenAI·Google API 키가 새고, 밤사이 청구서가 왔다

2026년 10월 20일에 올라온 글

그날 대시보드 →
  1. ·tsrs — Cloudflare와 VoidZero가 TypeScript 컴파일러를 Rust로 포팅, 'TS 7.0보다 최대 8배'

댓글

불러오는 중…