Saran keamanan: Memperbarui penetapan peran untuk autentikasi Microsoft Entra

Bug keamanan ditemukan yang memengaruhi autentikasi Microsoft Entra untuk Pembaca Imersif. Kami menyarankan agar Anda mengubah izin pada sumber daya Pembaca Imersif Anda.

Latar belakang

Saat Anda awalnya membuat sumber daya Pembaca Imersif dan mengonfigurasinya untuk autentikasi Microsoft Entra, Anda perlu memberikan izin bagi identitas aplikasi Microsoft Entra untuk mengakses sumber daya Pembaca Imersif Anda. Ini dikenal sebagai penetapan peran. Peran Azure yang sebelumnya digunakan untuk izin adalah peran Cognitive Services User.

Selama audit keamanan, ditemukan bahwa peran Pengguna Cognitive Services ini memiliki izin untuk mencantumkan kunci. Ini sedikit memprihatinkan karena integrasi Pembaca Imersif melibatkan penggunaan token akses Microsoft Entra ini di aplikasi web klien dan browser. Jika token akses dicuri oleh aktor atau penyerang yang buruk, ada kekhawatiran list keys bahwa token akses ini dapat digunakan untuk sumber daya Pembaca Imersif Anda. Jika penyerang bisa list keys untuk sumber daya Anda, maka mereka akan mendapatkan Subscription Key untuk sumber daya Anda. Subscription Key untuk sumber daya Anda digunakan sebagai mekanisme autentikasi dan dianggap rahasia. Jika penyerang memiliki Subscription Key sumber daya, ini akan memungkinkan mereka melakukan panggilan API yang valid dan diautentikasi ke titik akhir sumber daya Immersive Reader Anda, yang dapat menyebabkan Penolakan Layanan karena peningkatan penggunaan dan pelambatan pada titik akhir Anda. Ini juga akan memungkinkan penggunaan sumber daya Immersive Reader Anda yang tidak diotorisasi, yang akan menyebabkan peningkatan biaya pada tagihan Anda.

Namun, dalam praktiknya, serangan atau eksploitasi ini tidak mungkin terjadi atau bahkan mungkin tidak mungkin terjadi. Untuk skenario Pembaca Imersif, pelanggan mendapatkan token akses Microsoft Entra dengan audiens .https://cognitiveservices.azure.com Agar berhasil list keys untuk sumber daya Anda, token akses Microsoft Entra harus memiliki audiens .https://management.azure.com Secara umum, ini tidak terlalu menjadi perhatian, karena token akses yang digunakan untuk skenario Pembaca Imersif tidak akan berfungsi untuk list keys, karena mereka tidak memiliki audiens yang diperlukan. Untuk mengubah audiens pada token akses, penyerang harus membajak kode akuisisi token dan mengubah audiens sebelum panggilan dilakukan ke MICROSOFT Entra ID untuk memperoleh token. Sekali lagi, ini tidak mungkin dieksploitasi karena, sebagai praktik terbaik autentikasi Pembaca Imersif, kami menyarankan agar pelanggan membuat token akses Microsoft Entra di backend aplikasi web, bukan di klien atau browser. Dalam kasus tersebut, karena akuisisi token terjadi pada layanan backend, tidak mungkin atau bahkan mungkin bahwa penyerang dapat membahayakan proses itu dan mengubah audiens.

Kekhawatiran nyata datang ketika atau jika ada pelanggan yang memperoleh token dari ID Microsoft Entra langsung dalam kode klien. Kami sangat menyarankan terhadap hal ini, tetapi karena pelanggan bebas untuk menerapkan sesuai keinginan mereka, ada kemungkinan bahwa beberapa pelanggan melakukan ini.

Untuk mengurangi kekhawatiran tentang kemungkinan penggunaan token akses Microsoft Entra ke list keys, kami membuat peran Azure bawaan baru yang disebut Cognitive Services Immersive Reader User tidak memiliki izin untuk list keys. Peran baru ini bukan peran bersama untuk platform layanan Azure AI seperti Cognitive Services User peran. Peran baru ini khusus untuk Pembaca Imersif dan hanya memungkinkan panggilan ke API Pembaca Imersif.

Kami menyarankan semua pelanggan untuk menggunakan peran baru Cognitive Services Immersive Reader User alih-alih peran asli Cognitive Services User . Kami telah menyediakan skrip di bawah ini yang dapat Anda jalankan pada setiap sumber daya Anda untuk beralih izin penetapan peran.

Rekomendasi ini berlaku untuk SEMUA pelanggan, guna memastikan bahwa kerentanan ini di-patch untuk semua orang, tidak peduli apa skenario implementasi atau kemungkinan serangan.

Jika Anda TIDAK melakukannya, tidak ada yang akan rusak. Peran lama akan terus berfungsi. Dampak keamanan bagi sebagian besar pelanggan sangat minim. Namun, kami menyarankan agar Anda bermigrasi ke peran baru untuk mengurangi masalah keamanan yang dibahas. Menerapkan pembaruan ini adalah rekomendasi saran keamanan; itu bukan mandat.

Sumber daya Pembaca Imersif baru yang Anda buat dengan skrip kami di Cara: Membuat sumber daya Pembaca Imersif secara otomatis menggunakan peran baru.

Memperbarui peran dan memutar kunci langganan Anda

Jika Anda membuat dan mengonfigurasi sumber daya Pembaca Imersif menggunakan instruksi tentang Cara: Membuat sumber daya Pembaca Imersif sebelum Februari 2022, kami sarankan Anda melakukan operasi berikut untuk memperbarui izin penetapan peran pada SEMUA sumber daya Pembaca Imersif Anda. Operasi melibatkan menjalankan skrip untuk memperbarui penetapan peran pada satu sumber daya. Jika Anda memiliki banyak sumber daya, jalankan skrip ini beberapa kali, sekali untuk setiap sumber daya.

Setelah Anda memperbarui peran menggunakan skrip berikut, kami juga menyarankan agar Anda memutar kunci langganan pada sumber daya Anda. Ini jika kunci Anda disusupi oleh eksploitasi, dan seseorang benar-benar menggunakan sumber daya Anda dengan autentikasi kunci langganan tanpa persetujuan Anda. Memutar kunci merender kunci sebelumnya tidak valid dan menolak akses lebih lanjut. Untuk pelanggan yang menggunakan autentikasi Microsoft Entra, yang seharusnya semua orang per implementasi SDK Pembaca Imersif saat ini, memutar kunci tidak berpengaruh pada layanan Pembaca Imersif, karena token akses Microsoft Entra digunakan untuk autentikasi, bukan kunci langganan. Memutar kunci langganan hanyalah tindakan pencegahan lain.

Anda dapat memutar kunci langganan di portal Azure. Navigasikan ke sumber daya Anda lalu ke bagian Keys and Endpoint . Di bagian atas, ada tombol ke Regenerate Key1 dan Regenerate Key2.

Screenshot of the Azure portal showing an Immersive Reader resource with the Keys and Endpoint section selected, which shows the Regenerate Keys buttons at the top.

Menggunakan Azure PowerShell untuk memperbarui penetapan peran Anda

  1. Mulai dengan membuka Azure Cloud Shell. Pastikan Azure Cloud Shell diatur ke PowerShell di menu turun kiri atas atau dengan mengetik pwsh.

  2. Salin dan tempel cuplikan kode berikut ke dalam shell.

    function Update-ImmersiveReaderRoleAssignment(
        [Parameter(Mandatory=$true, Position=0)] [String] $SubscriptionName,
        [Parameter(Mandatory=$true)] [String] $ResourceGroupName,
        [Parameter(Mandatory=$true)] [String] $ResourceName,
        [Parameter(Mandatory=$true)] [String] $AADAppIdentifierUri
    )
    {
        $unused = ''
        if (-not [System.Uri]::TryCreate($AADAppIdentifierUri, [System.UriKind]::Absolute, [ref] $unused)) {
            throw "Error: AADAppIdentifierUri must be a valid URI"
        }
    
        Write-Host "Setting the active subscription to '$SubscriptionName'"
        $subscriptionExists = Get-AzSubscription -SubscriptionName $SubscriptionName
        if (-not $subscriptionExists) {
            throw "Error: Subscription does not exist"
        }
        az account set --subscription $SubscriptionName
    
        # Get the Immersive Reader resource 
        $resourceId = az cognitiveservices account show --resource-group $ResourceGroupName --name $ResourceName --query "id" -o tsv
        if (-not $resourceId) {
            throw "Error: Failed to find Immersive Reader resource"
        }
    
        # Get the Microsoft Entra application service principal
        $principalId = az ad sp show --id $AADAppIdentifierUri --query "objectId" -o tsv
        if (-not $principalId) {
            throw "Error: Failed to find Microsoft Entra application service principal"
        }
    
        $newRoleName = "Cognitive Services Immersive Reader User"
        $newRoleExists = az role assignment list --assignee $principalId --scope $resourceId --role $newRoleName --query "[].id" -o tsv
        if ($newRoleExists) {
            Write-Host "New role assignment for '$newRoleName' role already exists on resource"
        } 
        else {
            Write-Host "Creating new role assignment for '$newRoleName' role"
            $roleCreateResult = az role assignment create --assignee $principalId --scope $resourceId --role $newRoleName
            if (-not $roleCreateResult) {
                throw "Error: Failed to add new role assignment"
            }
            Write-Host "New role assignment created successfully"
        }
    
        $oldRoleName = "Cognitive Services User"
        $oldRoleExists = az role assignment list --assignee $principalId --scope $resourceId --role $oldRoleName --query "[].id" -o tsv
        if (-not $oldRoleExists) {
            Write-Host "Old role assignment for '$oldRoleName' role does not exist on resource"
        }
        else {
            Write-Host "Deleting old role assignment for '$oldRoleName' role"
            az role assignment delete --assignee $principalId --scope $resourceId --role $oldRoleName
            $oldRoleExists = az role assignment list --assignee $principalId --scope $resourceId --role $oldRoleName --query "[].id" -o tsv
            if ($oldRoleExists) {
                throw "Error: Failed to delete old role assignment"
            }
            Write-Host "Old role assignment deleted successfully"
        }
    }
    
  3. Jalankan fungsi Update-ImmersiveReaderRoleAssignment, ganti <PARAMETER_VALUES> tempat penampung dengan nilai Anda sendiri yang sesuai.

    Update-ImmersiveReaderRoleAssignment -SubscriptionName '<SUBSCRIPTION_NAME>' -ResourceGroupName '<RESOURCE_GROUP_NAME>' -ResourceName '<RESOURCE_NAME>' -AADAppIdentifierUri '<MICROSOFT_ENTRA_APP_IDENTIFIER_URI>'
    

    Perintah lengkap terlihat seperti berikut ini. Di sini kita menempatkan setiap parameter pada barisnya sendiri untuk kejelasan, sehingga Anda dapat melihat seluruh perintah. Jangan salin atau gunakan perintah ini apa adanya. Salin dan gunakan perintah dengan nilai Anda sendiri. Contoh ini memiliki nilai dummy untuk <PARAMETER_VALUES>. Anda akan berbeda, saat Anda muncul dengan nama Anda sendiri untuk nilai-nilai ini.

    Update-ImmersiveReaderRoleAssignment
        -SubscriptionName 'MyOrganizationSubscriptionName'
        -ResourceGroupName 'MyResourceGroupName'
        -ResourceName 'MyOrganizationImmersiveReader'
        -AADAppIdentifierUri 'https://MyOrganizationImmersiveReaderAADApp'
    
    Parameter Komentar
    SubscriptionName Nama langganan Azure Anda.
    ResourceGroupName Nama grup sumber daya yang berisi sumber daya Pembaca Imersif Anda.
    ResourceName Nama sumber daya Immersive Reader Anda.
    AADAppIdentifierUri URI untuk aplikasi Microsoft Entra Anda.

Langkah selanjutnya