Share via


Beveiligingsadvies: Roltoewijzing bijwerken voor Microsoft Entra-verificatie

Er is een beveiligingsfout gedetecteerd die van invloed is op Microsoft Entra-verificatie voor Insluitende lezer. U wordt aangeraden de machtigingen voor uw Insluitende lezer resources te wijzigen.

Achtergrond

Wanneer u uw Insluitende lezer-resources in eerste instantie maakt en configureert voor Microsoft Entra-verificatie, moet u machtigingen verlenen voor de Microsoft Entra-toepassingsidentiteit om toegang te krijgen tot uw Insluitende lezer-resource. Dit wordt een roltoewijzing genoemd. De Azure-rol die eerder voor machtigingen werd gebruikt, was de rol Cognitive Services-gebruiker .

Tijdens een beveiligingscontrole is gedetecteerd dat deze Cognitive Services-gebruikersrol machtigingen heeft voor het weergeven van sleutels. Dit is enigszins van toepassing omdat Insluitende lezer integraties betrekking hebben op het gebruik van dit Microsoft Entra-toegangstoken in clientweb-apps en -browsers. Als het toegangstoken is gestolen door een slechte actor of aanvaller, is er een probleem dat dit toegangstoken kan worden gebruikt list keys voor uw Insluitende lezer resource. Als een aanvaller uw resource zou kunnen list keys gebruiken, zou deze de Subscription Key voor uw resource verkrijgen. De Subscription Key voor uw resource wordt gebruikt als verificatiemechanisme en wordt beschouwd als een geheim. Als een aanvaller de resource Subscription Keyhad, zou het hen in staat stellen om geldige en geverifieerde API-aanroepen te maken naar uw Insluitende lezer resource-eindpunt, wat kan leiden tot Denial of Service vanwege het toegenomen gebruik en de beperking op uw eindpunt. Het zou ook onbevoegd gebruik van uw Insluitende lezer-resource toestaan, wat zou leiden tot hogere kosten op uw factuur.

In de praktijk is deze aanval of aanval echter niet waarschijnlijk of zelfs niet mogelijk. Voor Insluitende lezer scenario's verkrijgen klanten Microsoft Entra-toegangstokens met een doelgroep van https://cognitiveservices.azure.com. Om uw resource succesvol list keys te kunnen gebruiken, moet het Microsoft Entra-toegangstoken een doelgroep hebben.https://management.azure.com Over het algemeen is dit niet veel van belang, omdat de toegangstokens die worden gebruikt voor Insluitende lezer scenario's niet werkenlist keys, omdat ze niet over de vereiste doelgroep beschikken. Om de doelgroep op het toegangstoken te wijzigen, moet een aanvaller de code voor het verkrijgen van tokens kapen en de doelgroep wijzigen voordat de aanroep naar Microsoft Entra ID wordt gedaan om het token te verkrijgen. Nogmaals, dit is niet waarschijnlijk misbruikt omdat we als best practice voor Insluitende lezer verificatie microsoft Entra-toegangstokens maken op de back-end van de webtoepassing, niet in de client of browser. Omdat de tokenverwerving plaatsvindt in de back-endservice, is het in die gevallen niet zo waarschijnlijk of zelfs mogelijk dat een aanvaller dit proces kan in gevaar brengen en de doelgroep kan wijzigen.

De echte zorg komt wanneer of als een klant tokens rechtstreeks in clientcode van Microsoft Entra-id zou verkrijgen. We raden u sterk aan dit te doen, maar omdat klanten naar wens kunnen implementeren, is het mogelijk dat sommige klanten dit doen.

Om de zorgen over elke mogelijkheid van het gebruik van het Microsoft Entra-toegangstoken te list keysbeperken, hebben we een nieuwe ingebouwde Azure-rol gemaakt met de naam Cognitive Services Immersive Reader User die niet over de machtigingen list keysbeschikt. Deze nieuwe rol is geen gedeelde rol voor het Azure AI-servicesplatform, zoals Cognitive Services User rol. Deze nieuwe rol is specifiek voor Insluitende lezer en staat alleen aanroepen toe aan Insluitende lezer API's.

We adviseren ALLE klanten om de nieuwe Cognitive Services Immersive Reader User rol te gebruiken in plaats van de oorspronkelijke Cognitive Services User rol. Hieronder vindt u een script dat u op elk van uw resources kunt uitvoeren om over te schakelen over de roltoewijzingsmachtigingen.

Deze aanbeveling is van toepassing op ALLE klanten om ervoor te zorgen dat dit beveiligingsprobleem voor iedereen wordt gepatcht, ongeacht het implementatiescenario of de kans op aanvallen.

Als je dit niet doet, zal er niets breken. De oude rol blijft functioneren. De beveiligingsimpact voor de meeste klanten is minimaal. We raden u echter aan om te migreren naar de nieuwe rol om de besproken beveiligingsproblemen te beperken. Het toepassen van deze update is een aanbeveling voor beveiligingsadvies; Het is geen mandaat.

Alle nieuwe Insluitende lezer resources die u met ons script maakt op How to: Create an Insluitende lezer resource automatically use the new role.

Rol bijwerken en uw abonnementssleutels draaien

Als u vóór februari 2022 een Insluitende lezer-resource hebt gemaakt en geconfigureerd met behulp van de instructies in: Een Insluitende lezer-resource maken, raden we u aan de volgende bewerking uit te voeren om de roltoewijzingsmachtigingen voor al uw Insluitende lezer resources bij te werken. De bewerking omvat het uitvoeren van een script om de roltoewijzing voor één resource bij te werken. Als u meerdere resources hebt, voert u dit script meerdere keren uit, één keer voor elke resource.

Nadat u de rol hebt bijgewerkt met behulp van het volgende script, raden we u ook aan de abonnementssleutels voor uw resource te roteren. Dit is het geval dat uw sleutels zijn aangetast door de exploit en iemand uw resource daadwerkelijk gebruikt met verificatie van de abonnementssleutel zonder uw toestemming. Als u de sleutels roteert, worden de vorige sleutels ongeldig en wordt verdere toegang geweigerd. Voor klanten die Microsoft Entra-verificatie gebruiken, wat iedereen moet zijn per huidige implementatie van de Insluitende lezer SDK, heeft het roteren van de sleutels geen invloed op de Insluitende lezer-service, omdat Microsoft Entra-toegangstokens worden gebruikt voor verificatie, niet voor de abonnementssleutel. Het roteren van de abonnementssleutels is slechts een andere voorzorgsmaatregel.

U kunt de abonnementssleutels roteren in Azure Portal. Navigeer naar uw resource en vervolgens naar de Keys and Endpoint sectie. Bovenaan zijn er knoppen aan Regenerate Key1 en 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.

Azure PowerShell gebruiken om uw roltoewijzing bij te werken

  1. Begin met het openen van Azure Cloud Shell. Zorg ervoor dat Cloud Shell is ingesteld op PowerShell in de vervolgkeuzelijst linksboven of door te typen pwsh.

  2. Kopieer en plak het volgende codefragment in de 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. Voer de functie Update-ImmersiveReaderRoleAssignmentuit, waarbij u de <PARAMETER_VALUES> tijdelijke aanduidingen vervangt door uw eigen waarden.

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

    De volledige opdracht ziet er ongeveer als volgt uit. Hier plaatsen we elke parameter op een eigen regel voor duidelijkheid, zodat u de hele opdracht kunt zien. Kopieer deze opdracht niet of gebruik deze opdracht niet. Kopieer en gebruik de opdracht met uw eigen waarden. In dit voorbeeld zijn dummywaarden voor de <PARAMETER_VALUES>. Uw waarden zijn anders, omdat u uw eigen namen voor deze waarden hebt.

    Update-ImmersiveReaderRoleAssignment
        -SubscriptionName 'MyOrganizationSubscriptionName'
        -ResourceGroupName 'MyResourceGroupName'
        -ResourceName 'MyOrganizationImmersiveReader'
        -AADAppIdentifierUri 'https://MyOrganizationImmersiveReaderAADApp'
    
    Parameter Opmerkingen
    SubscriptionName De naam van uw Azure-abonnement.
    ResourceGroupName De naam van de resourcegroep die uw Insluitende lezer resource bevat.
    ResourceName De naam van uw Insluitende lezer resource.
    AADAppIdentifierUri De URI voor uw Microsoft Entra-app.

Volgende stap