ต้องอัปเดตเพื่อแก้ไขการละเมิดใบรับรอง eMudhra

เมื่อวันที่ 19 ตุลาคม 2026 Google ได้รับทราบเกี่ยวกับผู้ออกใบรับรอง (eMudhra) ที่ถูกละเมิด เพื่อแก้ไขปัญหาด้านความปลอดภัยนี้ เราได้ออกแพตช์ด้านความปลอดภัยไปยังหลายๆ ส่วนของระบบนิเวศทันที

หน้านี้จะช่วยให้คุณเข้าใจประเภทแอปที่ได้รับผลกระทบและการดำเนินการที่จำเป็นเพื่อแก้ไขการละเมิดใบรับรอง eMudhra นี้ นอกจากนี้ เรายังมีข้อมูลโดยละเอียดเกี่ยวกับปัญหาด้านความปลอดภัยด้วย

ประเภทแอปที่ได้รับผลกระทบและการดำเนินการที่จำเป็น

เนื่องจากลักษณะของปัญหาด้านความปลอดภัยนี้ จึงส่งผลกระทบต่อแอปหลายประเภท หากประเภทแอปของคุณแสดงอยู่ที่นี่ แสดงว่าแอปน่าจะได้รับผลกระทบ โปรดอ่านส่วนที่เกี่ยวข้องเพื่อดูการดำเนินการที่ต้องทำ

แพลตฟอร์มอื่นๆ ที่ชุมชนรองรับก็ได้รับผลกระทบเช่นกัน (เช่น แอป React Native ที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Apple และใช้ Firestore)


แอป Flutter

แอป Flutter ได้รับผลกระทบในหลายๆ ด้าน โปรดอ่านส่วนที่เกี่ยวข้องเพื่อทำความเข้าใจการดำเนินการที่คุณต้องทำ

แอป Flutter ที่กำหนดเป้าหมายเป็น Android, Windows หรือ Linux

ขณะที่เบราว์เซอร์และระบบปฏิบัติการส่งรายการที่บล็อกใบรับรองกลางฉุกเฉิน dart:io ใน Android, Windows และ Linux จะตรวจสอบเชนใบรับรอง TLS โดยใช้เครื่องมือ BoringSSL ที่คอมไพล์แล้วของตนเอง และไม่อ่านรายการที่บล็อกใบรับรองกลางของระบบปฏิบัติการ ดูข้อมูลเพิ่มเติมเกี่ยวกับคำแนะนำด้านความปลอดภัยนี้

ดำเนินการต่อไปนี้หากคุณมีแอป Flutter หรือ Dart ที่กำหนดเป้าหมายเป็น Android, Windows หรือ Linux

  1. อัปเกรดเป็น Dart และ Flutter เวอร์ชันต่อไปนี้

    • Dart 3.13.7 ขึ้นไป
    • Flutter 3.47.8 ขึ้นไป (พร้อม Dart 3.13.7 ขึ้นไป)
  2. สร้างแอปใหม่

  3. ทำให้แอปหรือไบนารีใช้งานได้อีกครั้ง ทำให้แอปหรือไบนารีของ Android, Windows และ Linux ใช้งานได้อีกครั้งเพื่อให้มีการอัปเดตพร้อมการแก้ไขด้านความปลอดภัย

แอป Flutter ที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Apple หรือ Windows และใช้ Cloud Firestore

ดำเนินการต่อไปนี้หากคุณมีแอป Flutter ที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Apple (เช่น iOS) และแอปของคุณใช้ Cloud Firestore

  1. กำหนดเวอร์ชันปลั๊กอินที่เหมาะกับแอปของคุณ เลือกเวอร์ชันปลั๊กอินที่เหมาะกับแอปของคุณโดยพิจารณาจากเวอร์ชันปลั๊กอินปัจจุบัน

    ปลั๊กอิน FlutterFire (flutterfire) - iOS, macOS หรือ Windows

    เวอร์ชันปลั๊กอินที่ได้รับผลกระทบ เวอร์ชันปลั๊กอินที่มีการแก้ไขด้านความปลอดภัย
    cloud_firestore 7.0.0 และก่อนหน้า
    (ยกเว้น 6.10.1 และ 6.10.2)
    • ตัวเลือกที่ 1: cloud_firestore 7.1.0 (FlutterFire BoM 5.1.0 ขึ้นไป)
    • ตัวเลือกที่ 2
      • iOS และ macOS: cloud_firestore 6.10.1 (FlutterFire BoM 4.20.1)
      • Windows: cloud_firestore 6.10.2 (FlutterFire BoM 4.20.2)
  2. อัปเดตแอป เรียกใช้ flutter pub upgrade เพื่ออัปเดตปลั๊กอิน cloud_firestore เป็นเวอร์ชันที่ต้องการ

  3. สร้างแอปใหม่

  4. เผยแพร่แอปอีกครั้ง เผยแพร่แอปที่มี SDK เวอร์ชันที่อัปเดตแล้วอีกครั้ง (เช่น ไปยัง Apple App Store หรือช่องทางการจัดจำหน่ายบนเดสก์ท็อป)

หลังจากเผยแพร่แอปอีกครั้ง คุณต้องกระตุ้นให้ผู้ใช้ปลายทางอัปเดตแอปเป็นเวอร์ชันล่าสุด เนื่องจากการคอมไพล์แพ็กเกจใบรับรองรูท TLS จะทำในไบนารีของแอปพลิเคชัน การอัปเดตระบบปฏิบัติการหรือการเปลี่ยนแปลงฝั่งเซิร์ฟเวอร์เพียงอย่างเดียวจึงไม่สามารถแก้ไขบิลด์ของแอปพลิเคชันที่ติดตั้งไว้ก่อนหน้านี้ได้



แอปแพลตฟอร์ม Apple (เนทีฟ) ที่ใช้ Cloud Firestore

ดำเนินการต่อไปนี้หากคุณมีแอปแพลตฟอร์ม Apple แบบเนทีฟ (เช่น iOS) และแอปของคุณใช้ Cloud Firestore

  1. กำหนดเวอร์ชัน SDK ที่เหมาะสมสำหรับแอป เลือกเวอร์ชัน SDK ที่เหมาะสมสำหรับแอปโดยพิจารณาจากเวอร์ชัน SDK ปัจจุบัน

    SDK Firebase สำหรับแพลตฟอร์ม Apple (โดยเฉพาะ FirebaseFirestore)

    เวอร์ชัน SDK ที่ได้รับผลกระทบ เวอร์ชัน SDK ที่มีการแก้ไขด้านความปลอดภัย
    13.1.0 และก่อนหน้า
    (ยกเว้น 12.19.3)
    • ตัวเลือกที่ 1: 13.1.1 ขึ้นไป
    • ตัวเลือกที่ 2: 12.19.3
  2. อัปเดตแอป ทำตามวิธีการสำหรับช่องทางการจัดจำหน่ายของคุณ

    • SPM: อัปเดตเวอร์ชันทรัพยากร Dependency ของแพ็กเกจ firebase-ios-sdk ใน Xcode หรือ Package.swift

    • การแจกจ่ายไฟล์ ZIP: จากรุ่น GitHub ให้ดาวน์โหลด Firebase.zip สำหรับเวอร์ชันที่ต้องการ และแทนที่แพ็กเกจ .xcframework ที่มีอยู่ในโปรเจ็กต์

    • Carthage: อัปเดต Cartfile เพื่อกำหนดเป้าหมายเวอร์ชันที่ต้องการและอัปเดตทรัพยากร Dependency ผ่าน Carthage

  3. เผยแพร่แอปอีกครั้ง เผยแพร่แอปที่มี SDK เวอร์ชันที่อัปเดตแล้วอีกครั้ง (เช่น ไปยัง Apple App Store หรือช่องทางการจัดจำหน่ายบนเดสก์ท็อป)

หลังจากเผยแพร่แอปอีกครั้ง คุณต้องกระตุ้นให้ผู้ใช้ปลายทางอัปเดตแอปเป็นเวอร์ชันล่าสุด เนื่องจากแพ็กเกจใบรับรองรูท TLS จะคอมไพล์เป็นไบนารีของแอปพลิเคชัน การอัปเดตระบบปฏิบัติการหรือการเปลี่ยนแปลงฝั่งเซิร์ฟเวอร์เพียงอย่างเดียวจะไม่แก้ไขบิลด์ของแอปพลิเคชันที่ติดตั้งไว้ก่อนหน้านี้



แอป Unity ที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Apple หรือเดสก์ท็อปและใช้ Cloud Firestore

ดำเนินการต่อไปนี้หากคุณมีแอป Unity ที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Apple (เช่น iOS) และแอปของคุณใช้ Cloud Firestore

  1. กำหนดเวอร์ชัน SDK ใหม่ที่เหมาะกับแอปของคุณ เลือกเวอร์ชัน SDK ที่เหมาะกับแอปของคุณโดยพิจารณาจากเวอร์ชัน SDK ปัจจุบัน

    Firebase SDK สำหรับ Unity (firebase-unity-sdk) — iOS หรือเดสก์ท็อป (Linux, macOS, Windows)

    เวอร์ชัน SDK ที่ได้รับผลกระทบ เวอร์ชัน SDK ที่มีการแก้ไขด้านความปลอดภัย
    14.0.0 และเวอร์ชันก่อนหน้า
    (ยกเว้น 13.17.1)
    • ตัวเลือกที่ 1: 14.1.0 ขึ้นไป
    • ตัวเลือกที่ 2: 13.17.1
  2. อัปเดตแอป ดาวน์โหลด Firebase Unity SDK สำหรับเวอร์ชันที่ต้องการจากหน้าเผยแพร่ของ GitHub

  3. ลิงก์และสร้างแอปใหม่ ลิงก์และสร้างแอปพลิเคชัน iOS และเดสก์ท็อปใหม่

  4. เผยแพร่แอปอีกครั้ง เผยแพร่แอปที่มี SDK เวอร์ชันที่อัปเดตแล้วอีกครั้ง (เช่น ไปยัง Apple App Store หรือช่องทางการจัดจำหน่ายบนเดสก์ท็อป)

หลังจากเผยแพร่แอปอีกครั้ง คุณต้องกระตุ้นให้ผู้ใช้ปลายทางอัปเดตแอปเป็นเวอร์ชันล่าสุด เนื่องจากการคอมไพล์แพ็กเกจใบรับรองรูท TLS จะทำในไบนารีของแอปพลิเคชัน การอัปเดตระบบปฏิบัติการหรือการเปลี่ยนแปลงฝั่งเซิร์ฟเวอร์เพียงอย่างเดียวจึงไม่สามารถแก้ไขบิลด์ของแอปพลิเคชันที่ติดตั้งไว้ก่อนหน้านี้ได้



แอป C++ ที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Apple หรือเดสก์ท็อปและใช้ Cloud Firestore

ดำเนินการต่อไปนี้หากคุณมีแอป C++ ที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Apple (เช่น iOS) และแอปของคุณใช้ Cloud Firestore

  1. กำหนดเวอร์ชัน SDK ใหม่ที่เหมาะกับแอปของคุณ เลือกเวอร์ชัน SDK ที่เหมาะกับแอปของคุณโดยพิจารณาจากเวอร์ชัน SDK ปัจจุบัน

    Firebase SDK สำหรับ C++ (firebase_cpp_sdk) — iOS หรือเดสก์ท็อป (Linux, macOS, Windows)

    เวอร์ชัน SDK ที่ได้รับผลกระทบ เวอร์ชัน SDK ที่มีการแก้ไขด้านความปลอดภัย
    14.0.0 และก่อนหน้า
    (ยกเว้น 13.13.1)
    • ตัวเลือกที่ 1: 14.1.0 ขึ้นไป
    • ตัวเลือกที่ 2: 13.13.1
  2. อัปเดตแอป ดาวน์โหลด Firebase C++ SDK สำหรับเวอร์ชันที่ต้องการจากหน้าเผยแพร่ของ GitHub

  3. ลิงก์และสร้างแอปใหม่ ลิงก์และสร้างแอปพลิเคชัน iOS และเดสก์ท็อปใหม่

  4. เผยแพร่แอปอีกครั้ง เผยแพร่แอปที่มี SDK เวอร์ชันที่อัปเดตแล้วอีกครั้ง (เช่น ไปยัง Apple App Store หรือช่องทางการจัดจำหน่ายบนเดสก์ท็อป)

หลังจากเผยแพร่แอปอีกครั้ง คุณต้องกระตุ้นให้ผู้ใช้ปลายทางอัปเดตแอปเป็นเวอร์ชันล่าสุด เนื่องจากการคอมไพล์แพ็กเกจใบรับรองรูท TLS จะทำในไบนารีของแอปพลิเคชัน การอัปเดตระบบปฏิบัติการหรือการเปลี่ยนแปลงฝั่งเซิร์ฟเวอร์เพียงอย่างเดียวจึงไม่สามารถแก้ไขบิลด์ของแอปพลิเคชันที่ติดตั้งไว้ก่อนหน้านี้ได้



แอป Android (เนทีฟ) ที่ใช้ปลั๊กอิน Gradle Firebase App Distribution

ดำเนินการต่อไปนี้หากคุณมีแอป Android แบบเนทีฟที่ใช้ปลั๊กอิน Firebase App Distribution Gradle

  1. กำหนดเวอร์ชันปลั๊กอินใหม่ที่เหมาะกับแอปของคุณ คุณใช้ปลั๊กอินเวอร์ชัน 5.3.1 ขึ้นไปได้

  2. อัปเดตไฟล์ Gradle ในไฟล์ Gradle ระดับรูท (ระดับโปรเจ็กต์) (<project>/build.gradle.kts หรือ <project>/build.gradle) ให้อัปเดตปลั๊กอิน App Distribution Gradle เป็นเวอร์ชัน 5.3.1 ขึ้นไป โดยทำดังนี้

    Kotlin

    plugins {
        // ...
        // Update the version in the dependency for the App Distribution Gradle plugin.
        // Make sure the version is 5.3.1 or higher.
        id("com.google.firebase.appdistribution") version "5.3.1" apply false
    }
    

    Groovy

    plugins {
        // ...
        // Update the version in the dependency for the App Distribution Gradle plugin.
        // Make sure the version is 5.3.1 or higher.
        id 'com.google.firebase.appdistribution' version '5.3.1' apply false
    }
    

    buildscript (เดิม)

    buildscript {
        dependencies {
            // ...
            // Update the version in the dependency for the App Distribution Gradle plugin.
            // Make sure the version is 5.3.1 or higher.
            classpath 'com.google.firebase:firebase-appdistribution-gradle:5.3.1'
        }
    }
    
  3. ล้างและยืนยันเวิร์กโฟลว์ CI/CD ตรวจสอบว่าไปป์ไลน์การสร้างและการทำให้ใช้งานได้แบบอัตโนมัติ (เช่น GitHub Actions, GitLab CI หรือ Jenkins) ดึงข้อมูลเวอร์ชันปลั๊กอินที่อัปเดตเมื่อดำเนินการต่างๆ เช่น ./gradlew appDistributionUpload<Variant>



ข้อมูลโดยละเอียดเกี่ยวกับสิ่งที่เกิดขึ้น

เมื่อวันที่ 19 ตุลาคม 2026 Google ทราบว่าคีย์ส่วนตัวสำหรับใบรับรองผู้ออกใบรับรอง (CA) ระดับกลางหลายรายการที่ออกโดยผู้ออกใบรับรองบุคคลที่สาม (eMudhra) ถูกบุกรุกและถูกเพิกถอนในเวลาต่อมา (ดูรายละเอียดเพิ่มเติมได้ที่บล็อกโพสต์ด้านความปลอดภัยของ Google)

แม้ว่าระบบปฏิบัติการและเว็บเบราว์เซอร์จะเผยแพร่การอัปเดตเพื่อไม่เชื่อถือใบรับรองกลางเหล่านี้ใน Trust Store ของระบบ แต่ผลิตภัณฑ์ที่ได้รับผลกระทบจะตรวจสอบการเชื่อมต่อ Transport Layer Security (TLS) โดยใช้แพ็กเกจใบรับรองรูทแบบฝังที่คอมไพล์เป็นไบนารี

เนื่องจากผู้โจมตีสามารถใช้คีย์ของผู้ออกใบรับรองที่ถูกบุกรุกเพื่อปลอมแปลงใบรับรอง HTTPS ที่ดูถูกต้องตามกฎหมาย แอปที่ได้รับผลกระทบจึงตรวจไม่พบการเพิกถอนและยังคงเชื่อถือข้อมูลเข้าสู่ระบบปลอมต่อไป ด้วยเหตุนี้ ผู้โจมตีในเครือข่ายจึงสามารถทำการโจมตีแบบ Man-in-the-Middle เพื่อแอบอ้างเป็นเซิร์ฟเวอร์แบ็กเอนด์จริง ซึ่งรวมถึง Firestore และปลายทาง HTTPS ที่แอป Flutter/Dart ที่ได้รับผลกระทบหรือปลั๊กอิน Gradle ของ App Distribution ติดต่อด้วย โดยจะแอบดักจับ ขโมย หรือแทรกแซงข้อมูลที่ละเอียดอ่อนของผู้ใช้

เพื่อปกป้องการเชื่อมต่อของไคลเอ็นต์จากผู้ออกใบรับรองที่ถูกบุกรุกนี้ เราได้บรรเทาปัญหานี้โดยการนำใบรับรองรูทที่เชื่อมโยงกับตัวกลาง eMudhra ที่ถูกบุกรุกออกในรายการต่อไปนี้

  • SDK ของ Cloud Firestore สำหรับ Apple, Flutter, Unity และ C++

    แบ็กเอนด์ของ Cloud Firestore ไม่ได้รับผลกระทบ และส่วนอื่นๆ ของผลิตภัณฑ์ Cloud Firestore ก็ไม่ได้รับผลกระทบเช่นกัน

  • Flutter SDK และปลั๊กอิน FlutterFire สำหรับ Cloud Firestore

  • ปลั๊กอิน Gradle ของ Firebase App Distribution

    แบ็กเอนด์ของ App Distribution ไม่ได้รับผลกระทบ และส่วนอื่นๆ ของผลิตภัณฑ์ App Distribution ก็ไม่ได้รับผลกระทบเช่นกัน