به‌روزرسانی‌های لازم برای اصلاح گواهی eMudhra درمعرض خطر

در ۱۹ اکتبر ۲۰۲۶، 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 نسخه ۳.۱۳.۷ یا بالاتر
    • Flutter نسخه ۳.۴۷.۸ یا بالاتر (با Dart نسخه ۳.۱۳.۷ یا بالاتر)
  2. برنامه‌تان را بازسازی کنید.

  3. برنامه یا فایل دودویی‌تان را دوباره مستقر کنید. برنامه‌ها یا فایل‌های دودویی Android،‏ Window، و 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)
    • گزینه ۱: cloud_firestore 7.1.0 (FlutterFire BoM 5.1.0 یا جدیدتر)
    • گزینه ۲:
      • ‫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. برنامه‌تان را دوباره منتشر کنید. برنامه‌تان را که نسخه به‌روزشده کیت توسعه نرم‌افزار دارد دوباره منتشر کنید (برای مثال، در Apple App Store یا کانال‌های توزیع رایانه شما).

پس‌از بازانتشار برنامه‌تان، باید کاربران نهایی را تشویق کنید که به جدیدترین نسخه برنامه‌تان به‌روزرسانی کنند. چون بسته گواهی ریشه TLS در باینری برنامه کامپایل شده است، به‌روزرسانی‌های سیستم‌عامل یا تغییرات سمت سرور به‌تنهایی نمی‌توانند نسخه‌های قبلاً نصب‌شده برنامه را اصلاح کنند.



برنامه‌های پلاتفرم Apple (بومی) که از Cloud Firestore استفاده می‌کنند

اگر برنامه پلاتفرم‌های بومی Apple (برای مثال، iOS) دارید و برنامه‌تان از Cloud Firestore استفاده می‌کند، کنش‌های زیر را انجام دهید:

  1. نسخه کیت توسعه نرم‌افزار مناسب برای برنامه‌تان را تعیین کنید. بسته به نسخه فعلی کیت توسعه نرم‌افزارتان، نسخه کیت توسعه نرم‌افزاری را انتخاب کنید که برای برنامه‌تان مناسب باشد.

    Firebase کیت توسعه نرم‌افزار برای پلاتفرم‌های Apple (به‌طور خاص، FirebaseFirestore)

    نسخه‌های کیت توسعه نرم‌افزار تحت‌تأثیر قرارگرفته نسخه‌های کیت توسعه نرم‌افزار با اصلاحیه امنیتی
    13.1.0 و نسخه‌های قبلی
    (به‌استثنای 12.19.3)
    • گزینه ۱: 13.1.1 یا جدیدتر
    • گزینه ۲: 12.19.3
  2. برنامه‌تان را به‌روز کنید. دستورالعمل‌های مربوط به کانال توزیع خود را دنبال کنید:

    • SPM: نسخه وابستگی بسته firebase-ios-sdk را در Xcode یا Package.swift به‌روز کنید.

    • توزیع Zip: از نسخه‌های GitHub، Firebase.zip را برای نسخه موردنظر بارگیری کنید و دسته‌های .xcframework موجود را در پروژه‌تان جایگزین کنید.

    • Carthage: Cartfile خود را برای هدف قرار دادن نسخه موردنظر به‌روز کنید و وابستگی‌ها را ازطریق Carthage به‌روز کنید.

  3. برنامه‌تان را دوباره منتشر کنید. برنامه‌تان را که نسخه به‌روزشده کیت توسعه نرم‌افزار دارد دوباره منتشر کنید (برای مثال، در Apple App Store یا کانال‌های توزیع رایانه).

پس‌از بازانتشار برنامه‌تان، باید کاربران نهایی را تشویق کنید که به جدیدترین نسخه برنامه‌تان به‌روزرسانی کنند. چون بسته گواهی ریشه TLS در باینری برنامه کامپایل شده است، به‌روزرسانی‌های سیستم‌عامل یا تغییرات سمت سرور به‌تنهایی نمی‌توانند ساخت‌های برنامه قبلاً نصب‌شده را اصلاح کنند.



برنامه‌های Unity که پلاتفرم‌های Apple یا رایانه را هدف قرار می‌دهند و از Cloud Firestore استفاده می‌کنند

اگر برنامه Unity دارید که پلاتفرم‌های Apple را هدف قرار می‌دهد (برای مثال، iOS) و برنامه‌تان از Cloud Firestore استفاده می‌کند، اقدامات زیر را انجام دهید:

  1. نسخه جدید کیت توسعه نرم‌افزار مناسب برای برنامه‌تان را تعیین کنید. بسته به نسخه فعلی کیت توسعه نرم‌افزارتان، نسخه کیت توسعه نرم‌افزاری را انتخاب کنید که برای برنامه‌تان مناسب باشد.

    کیت توسعه نرم‌افزار Firebase برای Unity‏ (firebase-unity-sdk) — iOS یا رایانه (Linux،‏ macOS،‏ Windows)

    نسخه‌های کیت توسعه نرم‌افزار تحت‌تأثیر قرارگرفته نسخه‌های کیت توسعه نرم‌افزار با اصلاحیه امنیتی
    14.0.0 و نسخه‌های قبلی
    (به‌استثنای 13.17.1)
    • گزینه ۱: 14.1.0 یا جدیدتر
    • گزینه ۲: 13.17.1
  2. برنامه‌تان را به‌روز کنید. کیت توسعه نرم‌افزار Firebase Unity را برای نسخه موردنظر از صفحه انتشار GitHub بارگیری کنید.

  3. برنامه‌تان را پیوند دهید و بازسازی کنید. برنامه‌های iOS و رایانه را پیوند دهید و بازسازی کنید.

  4. برنامه‌تان را دوباره منتشر کنید. برنامه‌تان را که نسخه به‌روزشده کیت توسعه نرم‌افزار دارد دوباره منتشر کنید (برای مثال، در Apple App Store یا کانال‌های توزیع رایانه).

پس‌از بازانتشار برنامه‌تان، باید کاربران نهایی را تشویق کنید که به جدیدترین نسخه برنامه‌تان به‌روزرسانی کنند. چون بسته گواهی ریشه TLS در باینری برنامه کامپایل شده است، به‌روزرسانی‌های سیستم‌عامل یا تغییرات سمت سرور به‌تنهایی نمی‌توانند نسخه‌های قبلاً نصب‌شده برنامه را اصلاح کنند.



برنامه‌های C++‎ که پلاتفرم‌های Apple یا رایانه را هدف قرار می‌دهند و از Cloud Firestore استفاده می‌کنند

اگر برنامه ++C دارید که پلاتفرم‌های Apple را هدف قرار می‌دهد (برای مثال، iOS) و برنامه‌تان از Cloud Firestore استفاده می‌کند، اقدامات زیر را انجام دهید:

  1. نسخه جدید کیت توسعه نرم‌افزار مناسب برای برنامه‌تان را تعیین کنید. بسته به نسخه فعلی کیت توسعه نرم‌افزارتان، نسخه کیت توسعه نرم‌افزاری را انتخاب کنید که برای برنامه‌تان مناسب باشد.

    کیت توسعه نرم‌افزار Firebase برای C++‎‏ (firebase_cpp_sdk) — iOS یا رایانه (Linux،‏ macOS،‏ Windows)

    نسخه‌های کیت توسعه نرم‌افزار تحت‌تأثیر قرارگرفته نسخه‌های کیت توسعه نرم‌افزار با وصله امنیتی
    ‫14.0.0 و نسخه‌های قبلی
    (به‌استثنای 13.13.1)
    • گزینه ۱: 14.1.0 یا جدیدتر
    • گزینه ۲: 13.13.1
  2. برنامه‌تان را به‌روز کنید. کیت توسعه نرم‌افزار Firebase در ++C را برای نسخه موردنظر از صفحه انتشار GitHub بارگیری کنید.

  3. برنامه‌تان را پیوند دهید و بازسازی کنید. برنامه‌های iOS و رایانه را پیوند دهید و بازسازی کنید.

  4. برنامه‌تان را دوباره منتشر کنید. برنامه‌تان را که نسخه به‌روزشده کیت توسعه نرم‌افزار دارد دوباره منتشر کنید (برای مثال، در Apple App Store یا کانال‌های توزیع رایانه).

پس‌از بازانتشار برنامه‌تان، باید کاربران نهایی را تشویق کنید که به جدیدترین نسخه برنامه‌تان به‌روزرسانی کنند. چون بسته گواهی ریشه TLS در باینری برنامه کامپایل شده است، به‌روزرسانی‌های سیستم‌عامل یا تغییرات سمت سرور به‌تنهایی نمی‌توانند نسخه‌های قبلاً نصب‌شده برنامه را اصلاح کنند.



برنامه‌های Android (بومی) که از افزایه Gradle‏ Firebase App Distribution استفاده می‌کنند

اگر برنامه Android بومی دارید که از افزایه Gradle Firebase App Distribution استفاده می‌کند، کنش‌های زیر را انجام دهید:

  1. نسخه جدید افزایه مناسب برای برنامه‌تان را تعیین کنید. می‌توانید از افزایه نسخه ۵.۳.۱ یا بالاتر استفاده کنید.

  2. فایل Gradle را به‌روز کنید. در فایل Gradle سطح ریشه (سطح پروژه) (<project>/build.gradle.kts یا <project>/build.gradle)، افزایه Gradle App Distribution را به نسخه ۵.۳.۱ یا بالاتر به‌روز کنید:

    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> دریافت می‌کنند.



اطلاعات دقیق درباره آنچه اتفاق افتاده است

در ۱۹ اکتبر ۲۰۲۶، Google متوجه شد که کلیدهای خصوصی چندین گواهینامه «مرجع صدور گواهی» (CA) واسط که توسط مرجع صدور گواهی شخص ثالث (eMudhra) صادر شده بود، لو رفته و متعاقباً لغو شده است (برای جزئیات بیشتر، به پست وبلاگ امنیتی Google مراجعه کنید).

درحالی‌که سیستم‌عامل‌ها و مرورگرهای وب به‌روزرسانی‌هایی را برای سلب اعتماد از این گواهینامه‌های واسط در مخزن گواهی‌های سیستم توزیع کرده‌اند، محصولات تحت‌تأثیر قرارگرفته اتصالات «امنیت لایه انتقال» (TLS) را بااستفاده از دسته گواهینامه ریشه جاسازی‌شده که در فایل دودویی کامپایل شده است اعتبارسنجی می‌کنند.

چون مهاجمان می‌توانند از کلیدهای «مرجع صدور گواهی» به‌خطر افتاده برای جعل گواهی‌های HTTPS که قانونی به‌نظر می‌رسند استفاده کنند، برنامه‌های تحت‌تأثیر قرارگرفته نمی‌توانند لغو را تشخیص دهند و همچنان به اعتبارنامه‌های جعلی اعتماد می‌کنند. درنتیجه، مهاجمان در شبکه می‌توانند حملات «مرد میانی» را برای جعل هویت سرورهای زیرینه واقعی، ازجمله Firestore و هر نقطه پایانی HTTPS که برنامه‌های Flutter/Dart متأثر یا افزونه App Distribution Gradle با آن‌ها تماس گرفته‌اند، انجام دهند و به‌طور مخفیانه داده‌های حساس کاربر را رهگیری، سرقت، یا دستکاری کنند.

برای محافظت از اتصالات کارخواه دربرابر این مرجع صدور گواهینامه به‌خطرافتاده، این مشکل را با برداشتن گواهینامه‌های ریشه‌ای که به واسطه‌های eMudhra به‌خطرافتاده زنجیر شده‌اند در موارد زیر کاهش دادیم:

  • Cloud Firestore کیت توسعه نرم‌افزار برای Apple،‏ Flutter،‏ Unity، و C++‎

    بخش پشتیبان Cloud Firestore تحت‌تأثیر قرار نگرفت و هیچ بخش دیگری از محصول Cloud Firestore نیز تحت‌تأثیر قرار نگرفت.

  • کیت توسعه نرم‌افزار Flutter و افزایه FlutterFire برای Cloud Firestore

  • افزایه Gradle‏ Firebase App Distribution

    بخش پشتیبان App Distribution تحت‌تأثیر قرار نگرفت و هیچ بخش دیگری از محصول App Distribution نیز تحت‌تأثیر قرار نگرفت.