Share via


Avviso di sicurezza: Aggiornare l'assegnazione di ruolo per le autorizzazioni di autenticazione di Microsoft Entra

È stato rilevato un bug di sicurezza con Strumento di lettura immersiva configurazione di autenticazione di Microsoft Entra. Microsoft consiglia di modificare le autorizzazioni per le risorse Strumento di lettura immersiva, come descritto di seguito.

Background

È stato rilevato un bug di sicurezza correlato all'autenticazione di Microsoft Entra per Strumento di lettura immersiva. Quando si creano inizialmente le risorse di Strumento di lettura immersiva e le si configura per l'autenticazione di Microsoft Entra, è necessario concedere le autorizzazioni per l'identità dell'applicazione Microsoft Entra per accedere alla risorsa Strumento di lettura immersiva. Questa operazione è nota come assegnazione di ruolo. Il ruolo di Azure usato in precedenza per le autorizzazioni era il ruolo utente di Servizi cognitivi.

Durante un controllo di sicurezza, è stato rilevato che questo ruolo utente di Servizi cognitivi dispone delle autorizzazioni per elencare le chiavi. Ciò riguarda leggermente perché le integrazioni di Strumento di lettura immersiva comportano l'uso di questo token di accesso Microsoft Entra nelle app Web client e nei browser e se il token di accesso dovesse essere rubato da un attore o da un utente malintenzionato, c'è un problema che questo token di accesso potrebbe essere usato per list keys la risorsa Strumento di lettura immersiva. Se un utente malintenzionato potrebbe list keys per la risorsa, otterrebbe l'oggetto Subscription Key per la risorsa. L'oggetto Subscription Key per la risorsa viene usato come meccanismo di autenticazione e viene considerato un segreto. Se un utente malintenzionato avesse la risorsa Subscription Key, consentirebbe loro di effettuare chiamate API valide e autenticate all'endpoint della risorsa Strumento di lettura immersiva, il che potrebbe portare a Denial of Service a causa dell'aumento dell'utilizzo e della limitazione dell'endpoint. Consente anche l'uso non autorizzato della risorsa Strumento di lettura immersiva, con conseguente aumento degli addebiti sulla fattura.

In pratica, tuttavia, questo attacco o exploit non è probabile che si verifichi o non sia nemmeno possibile. Per gli scenari di Strumento di lettura immersiva, i clienti ottengono i token di accesso di Microsoft Entra con un gruppo di destinatari di https://cognitiveservices.azure.com. Per ottenere correttamente list keys la risorsa, il token di accesso di Microsoft Entra deve avere un gruppo di destinatari di https://management.azure.com. In generale, questo non è un problema eccessivo, poiché i token di accesso usati per gli scenari di Strumento di lettura immersiva non funzionano per list keys, perché non hanno il pubblico richiesto. Per modificare il gruppo di destinatari nel token di accesso, un utente malintenzionato dovrà dirottare il codice di acquisizione del token e modificare il gruppo di destinatari prima che venga effettuata la chiamata all'ID Microsoft Entra per acquisire il token. Anche in questo caso, questo non è probabilmente sfruttato perché, come procedura consigliata per l'autenticazione Strumento di lettura immersiva, è consigliabile che i clienti creino token di accesso Microsoft Entra nel back-end dell'applicazione Web, non nel client o nel browser. In questi casi, poiché l'acquisizione del token avviene nel servizio back-end, non è così probabile o forse anche possibile che l'utente malintenzionato possa compromettere tale processo e modificare il gruppo di destinatari.

Il vero problema è che si verifica quando o se un cliente dovesse acquisire i token dall'ID Microsoft Entra direttamente nel codice client. Sconsigliamo vivamente questo problema, ma poiché i clienti sono liberi di implementare in base alle esigenze, è possibile che alcuni clienti lo facciano.

Per attenuare le preoccupazioni relative a qualsiasi possibilità di usare il token di accesso Di Microsoft Entra a list keys, è stato creato un nuovo ruolo predefinito di Azure denominato Cognitive Services Immersive Reader User che non dispone delle autorizzazioni per list keys. Questo nuovo ruolo non è un ruolo condiviso per la piattaforma dei servizi di intelligenza artificiale di Azure, come Cognitive Services User il ruolo. Questo nuovo ruolo è specifico di Strumento di lettura immersiva e consentirà solo le chiamate alle API di Strumento di lettura immersiva.

È consigliabile che tutti i clienti eseseguono la migrazione all'uso del nuovo Cognitive Services Immersive Reader User ruolo anziché del ruolo originale Cognitive Services User . Di seguito è stato fornito uno script che è possibile eseguire in ognuna delle risorse per passare alle autorizzazioni di assegnazione di ruolo.

Questa raccomandazione si applica a TUTTI i clienti, per assicurarsi che questa vulnerabilità venga applicata a tutti, indipendentemente dallo scenario di implementazione o dalla probabilità di attacco.

Se non si esegue questa operazione, non verrà interrotta alcuna operazione. Il ruolo precedente continuerà a funzionare. L'impatto sulla sicurezza per la maggior parte dei clienti è minimo. È tuttavia consigliabile eseguire la migrazione al nuovo ruolo per attenuare i problemi di sicurezza descritti in precedenza. L'applicazione di questo aggiornamento è una raccomandazione di consulenza sulla sicurezza; non è un mandato.

Tutte le nuove risorse Strumento di lettura immersiva create con lo script in Procedura: Creare una risorsa Strumento di lettura immersiva useranno automaticamente il nuovo ruolo.

Invito all'azione

Se è stata creata e configurata una risorsa Strumento di lettura immersiva usando le istruzioni riportate in Procedura: Creare una risorsa Strumento di lettura immersiva prima di febbraio 2022, è consigliabile eseguire l'operazione seguente per aggiornare le autorizzazioni di assegnazione dei ruoli in TUTTI i Strumento di lettura immersiva risorse. L'operazione comporta l'esecuzione di uno script per aggiornare l'assegnazione di ruolo in una singola risorsa. Se si dispone di più risorse, eseguire questo script più volte, una volta per ogni risorsa.

Dopo aver aggiornato il ruolo usando lo script seguente, è anche consigliabile ruotare le chiavi di sottoscrizione nella risorsa. Questo è nel caso in cui le chiavi siano state compromesse dall'exploit precedente e qualcuno sta effettivamente usando la risorsa con l'autenticazione della chiave di sottoscrizione senza il consenso dell'utente. La rotazione delle chiavi comporterà il rendering delle chiavi precedenti non valide e negherà qualsiasi ulteriore accesso. Per i clienti che usano l'autenticazione di Microsoft Entra, che devono essere tutti in base all'implementazione corrente di Strumento di lettura immersiva SDK, la rotazione delle chiavi non avrà alcun impatto sul servizio Strumento di lettura immersiva, poiché i token di accesso di Microsoft Entra vengono usati per l'autenticazione, non la chiave di sottoscrizione. La rotazione delle chiavi di sottoscrizione è solo un'altra precauzione.

È possibile ruotare le chiavi di sottoscrizione nel portale di Azure. Passare alla risorsa e quindi al Keys and Endpoint pannello. Nella parte superiore sono presenti pulsanti per Regenerate Key1 e Regenerate Key2.

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

Usare l'ambiente Azure PowerShell per aggiornare l'assegnazione di ruolo delle risorse Strumento di lettura immersiva

  1. Per iniziare, aprire Azure Cloud Shell. Assicurarsi che Cloud Shell sia impostato su PowerShell nell'elenco a discesa in alto a sinistra o digitando pwsh.

  2. Copiare e incollare il frammento di codice seguente nella 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 Azure AD application service principal
        $principalId = az ad sp show --id $AADAppIdentifierUri --query "objectId" -o tsv
        if (-not $principalId) {
            throw "Error: Failed to find Azure AD 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. Eseguire la funzione Update-ImmersiveReaderRoleAssignment, specificando i segnaposto "<PARAMETER_VALUES>" riportati di seguito con i propri valori in base alle esigenze.

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

    Il comando completo avrà un aspetto simile al seguente. Qui è stato inserito ogni parametro nella propria riga per maggiore chiarezza, in modo da poter visualizzare l'intero comando. Non copiare o usare questo comando così com'è. Copiare e usare il comando precedente con i propri valori. In questo esempio sono presenti valori fittizi per l'PARAMETER_VALUES<> precedente. I tuoi valori saranno diversi, come si vedrà con i propri nomi per questi valori.

    Update-ImmersiveReaderRoleAssignment
    -SubscriptionName 'MyOrganizationSubscriptionName'
    -ResourceGroupName 'MyResourceGroupName'
    -ResourceName 'MyOrganizationImmersiveReader'
    -AADAppIdentifierUri 'https://MyOrganizationImmersiveReaderAADApp'

    Parametro Commenti
    SubscriptionName Nome della sottoscrizione di Azure.
    ResourceGroupName Nome del gruppo di risorse che contiene la risorsa Strumento di lettura immersiva.
    NomeRisorsa Nome della risorsa Strumento di lettura immersiva.
    AADAppIdentifierUri URI per l'app Azure AD.

Passaggi successivi