Emudhra compromise affects older versions of key Python libraries - uv, certifi, pip, sigstore, pixi
eMudhra 인증서 키 유출, 구버전 uv·certifi·pip 등에 영향
eMudhra 인증기관의 개인 키가 노출돼 관련 CA 인증서를 신뢰 저장소에서 제거해야 하는 보안 사고가 발생했습니다. pip 26.2.2 이상으로 올리고, uv와 certifi를 갱신하며 컨테이너 이미지도 다시 빌드해야 합니다.
- 주제
에디터 노트
이번 조치에서 놓치기 쉬운 부분은 시스템 CA 저장소를 갱신해도 구버전 pip의 신뢰 목록이 그대로 남는다는 점입니다. pip가 내장 certifi를 시스템 저장소와 함께 사용하므로 최소 26.2.2로 올려야 한다는 설명은 구체적이며, 운영체제 수준의 인증서 갱신만 안내하는 것보다 실제 취약 경로를 잘 짚습니다. 다만 적용 범위는 설치 방식마다 다릅니다. 공유 스크립트는 일부 가상환경만 찾고 컨테이너와 잠금 파일은 갱신하지 않으며, Python 3.10 미만도 대상에서 제외합니다. 댓글은 주로 원 게시물로 연결할 뿐 별도의 검증이나 반론을 보태지 않습니다. 따라서 게시글의 명령을 모든 Python 설치에 그대로 적용하기보다 각 환경의 pip, certifi와 OS 인증서 상태를 따로 확인해야 한다는 조건이 남습니다.
AI 요약
eMudhra 중간 인증서에 쓰인 개인 키가 노출되면서 Python 생태계의 인증서 묶음에서 관련 인증서를 제거하는 조치가 필요해졌습니다. 구버전 pip는 시스템 인증서 저장소를 갱신해도 내장 certifi를 계속 신뢰하므로 pip 26.2.2 이상으로 올려야 합니다. uv와 certifi 갱신, 가상환경 및 컨테이너 이미지 점검 방법과 예외 사항을 정리합니다.
영향과 대응
사고 원인은 eMudhra CA 인증서의 취약한 개인 키입니다. 게시글은 8개 eMudhra CA의 개인 키 값 d가 모두 256보다 작았다고 설명합니다. 이 때문에 certifi 같은 CA 묶음에서 emSign 루트 인증서를 제거해야 했고, 업데이트하지 않은 TLS 클라이언트는 python.org와 pypi.org 접속을 포함해 중간자 공격에 노출될 수 있습니다. 공지에는 2026년 10월 18일이 언급되지만, 영향을 받지 않은 emSign 루트 인증서와의 호환성을 위해 게시글은 10월 19일 버전을 권장합니다.
기존 가상환경의 pip와 uv를 최신 버전으로 갱신해야 합니다. 특히 pip는 26.2.2 이상이어야 합니다. pip는 시스템 신뢰 저장소와 함께 자체 포함된 certifi 인증서도 읽으며, 이를 끄는 공식 설정은 없습니다. REQUESTS_CA_BUNDLE이나 --cert 옵션은 인증서를 추가할 뿐입니다. 따라서 운영체제의 인증서 저장소만 갱신하면 구버전 pip가 취약한 중간 인증서를 계속 신뢰할 수 있습니다.
게시글은 체크섬이 포함된 pip wheel의 직접 URL을 이용해 pip를 안전하게 설치하는 방법을 제시합니다. macOS의 python.org 배포판은 certifi 묶음을 포함하므로 pip와 certifi도 별도로 갱신해야 합니다. uv는 운영체제 인증서 저장소를 사용하도록 UV_SYSTEM_CERTS=true를 지정한 뒤 uv self update를 실행하는 방법을 안내합니다. 이 방법은 운영체제의 인증서와 검증기가 이미 최신 상태라는 전제가 있으며, Linux에서는 배포판의 ca-certificates 갱신 여부를 확인해야 합니다.
설치 환경별 점검
새 가상환경을 만든 뒤 pip를 갱신하는 방법은 ensurepip에 포함된 구버전 pip를 우회하는 임시책입니다. CPython 저장소에는 ensurepip 관련 수정이 병합됐고 백포트와 보안 릴리스가 추진 중이라고 게시글은 전합니다. 여러 가상환경을 찾고 갱신하는 스크립트도 공유됐지만, 홈 디렉터리 아래 일반 가상환경만 대상으로 합니다. 시스템 설치나 앱에 내장된 환경, Homebrew 및 python.org 설치는 다루지 않습니다. Python 3.10보다 오래된 환경도 제외하며, 의존성 고정 파일이나 컨테이너 이미지를 갱신하지 않습니다.
게시글은 Debian 패키지 pip가 시스템 CA 저장소를 사용하도록 수정됐다는 댓글을 인용하고, 배포판의 ca-certificates 보안 업데이트가 문제를 처리했다고 설명합니다. cibuildwheel 4.3.3은 manylinux 2026.10.21-1을 사용하지만, pip에서 Python 3.9는 여전히 취약하므로 uv로 빌드하고 최소 버전을 지정하라는 안내도 있습니다. 의존성 갱신을 늦추는 cooldown 설정을 사용하면 업데이트 전까지 취약 상태가 이어질 수 있습니다. 별도로 CPython ssl 모듈에서 Go와 같은 SPKI 해시 차단을 적용하는 티켓과 PR도 제출했다고 게시글은 밝힙니다. 이 방어는 운영체제, certifi 또는 pip가 최신이 아닐 때 연결을 막는 추가 조치입니다.
Reddit 반응
- @Ska82 — /u/Ska82가 제출한 글입니다. [링크] [댓글]
- @Wh00ster — Seth의 게시물입니다: https://www.reddit.com/r/Python/s/ZBuWJmkK7u
- @Ska82 — 고맙습니다. 기본 정렬에서는 조금 둘러봐도 보이지 않아 제가 올렸습니다.
원문: Python Discuss / 번역·요약: Trawling