eMudhra 인증서 사태, 내 플러터 앱도 다시 빌드해야 하나? — Flutter 3.47.8·Firestore 7.1.0 기준 정리
네, 안드로이드·윈도우·리눅스용으로 낸 플러터 앱이라면 Firebase를 안 써도 Flutter 3.47.8(Dart 3.13.7) 이상으로 다시 빌드해 스토어에 올려야 합니다. 이미 설치된 앱은 옛 인증서 목록을 계속 믿기 때문에, 사용자 업데이트까지 받아야 끝납니다.
무슨 일인가
인도 인증기관 eMudhra의 중간 인증서(Intermediate CA) 여러 개의 개인키가 유출돼 폐기됐습니다. 중간 인증서는 웹사이트 HTTPS 인증서를 발급해 주는 '중간 도장'인데, 키가 새면 공격자가 진짜처럼 보이는 가짜 인증서를 만들 수 있습니다. 구글은 10월 19일 이 사실을 알았고, 크롬·파이어폭스 같은 브라우저와 운영체제는 곧바로 신뢰 목록을 갱신했습니다.
문제는 인증서 목록을 앱 안에 직접 넣어 두는 부품입니다. Firebase 공식 안내(10월 29일 갱신)에 따르면 Flutter·Dart SDK, Cloud Firestore SDK(애플·플러터·유니티·C++), App Distribution Gradle 플러그인이 여기에 해당해, 구글이 새 버전에서 해당 루트를 뺐습니다. 이 부품들은 OS가 업데이트돼도 따라 바뀌지 않으니, 개발자가 새 버전으로 앱을 다시 빌드해야 합니다.
안드로이드·윈도우·리눅스
(iOS 6.10.1·윈도우 6.10.2도 가능)
(CocoaPods는 12.19.3)
(앱 재배포는 불필요)
왜 중요한가
브라우저 문제는 사용자가 브라우저만 업데이트하면 끝나지만, 앱에 내장된 인증서 목록은 개발자가 새 빌드를 내고, 사용자가 그 업데이트를 받아야 바뀝니다. 개발사와 연락이 끊긴 '방치 앱'은 아무도 다시 빌드하지 않으니 옛 목록을 계속 믿습니다. 구글 안내에는 실제 악용 사례 언급이 없고, 공격하려면 가짜 인증서에 더해 사용자와 같은 네트워크(공용 와이파이 등)에 끼어들 위치도 필요하지만, 고칠 방법이 이미 나온 만큼 미룰 이유가 없습니다.
내 사업·앱에 무슨 의미
- 플러터 앱 운영자 — 안드로이드 앱이 있다면 Firebase를 안 써도 해당합니다. 외주로 만든 앱이면 개발사에 "Flutter 3.47.8 이상으로 재빌드했나"를 물어보세요.
- iOS 앱 + Firestore — 네이티브든 플러터든 Firestore SDK 버전을 올려야 합니다. CocoaPods를 쓰면 12.19.3이 마지막 선택지입니다.
- 개발자 — App Distribution 플러그인은 버전만 올리면 되고 앱 재배포는 필요 없지만, CI가 새 플러그인을 받아 오는지 확인하세요.
지금 해볼 것
flutter --version, grep -A2 cloud_firestore pubspec.lock로 현재 버전을 봅니다.flutter upgrade 후 flutter pub upgrade. iOS는 Podfile 버전 고정을 풀고 12.19.3 이상으로.Q&A — eMudhra 인증서와 플러터 앱 자주 묻는 질문
Firebase를 안 쓰는 플러터 앱도 다시 빌드해야 하나요?
네, 안드로이드·윈도우·리눅스 타깃이면 해당합니다. 문제의 인증서 목록이 Firebase가 아니라 Flutter·Dart SDK 자체에 들어 있어서, Firebase 사용 여부와 상관없이 Flutter 3.47.8·Dart 3.13.7 이상으로 다시 빌드해야 합니다.
앱을 다시 올리지 않으면 지금 당장 앱이 멈추나요?
아니요, 앱이 멈추지는 않습니다. 대신 폐기된 인증서로 만든 가짜 서버를 계속 믿을 수 있는 상태로 남아, 공용 와이파이 같은 곳에서 중간자 공격을 당할 여지가 생깁니다.
서버(Firestore 백엔드)도 손봐야 하나요?
아니요, Firestore와 App Distribution 백엔드는 영향이 없다고 구글이 밝혔습니다. 고칠 곳은 앱 안에 들어간 SDK와 빌드 도구 쪽입니다.
출처
- Firebase — Updates required to remediate eMudhra certificate compromise (2026-10-29 갱신)
- Classmethod — iOS 개발 주간 변경 사항 (2026-10-28)