Dia 0 da Microsoft sem correção: Como mitigar o CVE-2023-36884 com o PowerShell

As atualizações do Patch Tuesday de julho de 2023 da Microsoft destacaram várias vulnerabilidades sob exploração ativa, incluindo uma (ou mais?) que permanece sem correção. Veja o que você precisa saber sobre CVE-2023-36884, uma vulnerabilidade de dia zero que os invasores estão explorando para obter execução remota de código por meio de documentos do Microsoft Office “especialmente criados”.

O que é o CVE-2023-36884?

Resposta curta: A Microsoft caracteriza o CVE-2023-36884 como uma vulnerabilidade de execução remota de código HTML do Office e do Windows com um CVSS básico de 8,3.

Resposta mais substancial: Por vir?

Por enquanto, o aviso da empresa indica que a Microsoft ainda está investigando ativamente e não fornece muito além de uma descrição superficial. Ele afirma que a exploração bem-sucedida da vulnerabilidade pode permitir que um invasor execute códigos remotamente no contexto da vítima, bastando enganá-la para que abra um documento do Microsoft Office especialmente elaborado.

Curiosamente, o aviso também começa afirmando: “A Microsoft está investigando relatórios de uma sériede  vulnerabilidades de execução remota de código” (ênfase minha), fazendo com que o especialista em vulnerabilidades Will Dormann teorize: “O CVE-2023-36884 é apenas um espaço reservado para uma atualização que aborda várias vulnerabilidades por meio de um único CVE, que pode ser lançado em algum momento desconhecido no futuro”

Embora o aviso, por si só, não tenha detalhes específicos, ele contém um link para uma postagem de blog que esclarece melhor como a Microsoft o descobriu.

Espionagem e ransomware – exploração ativa do CVE-2023-36884

Em junho, a Microsoft identificou uma campanha de phishing lançada por um agente de ameaças que a Microsoft rastreia como Storm-0978. A campanha teve como alvo entidades governamentais e de defesa na América do Norte e na Europa, com iscas relacionadas ao Congresso Mundial da Ucrânia. Os e-mails entregues como parte da campanha continham links para documentos do Word que abusavam do CVE-2023-36884 para instalar backdoors.

Embora esses alvos e as atividades pós-comprometimento sugiram motivos de espionagem, a Microsoft observa que, enquanto essa campanha estava sendo executada, ela também identificou o Storm-0978 conduzindo ataques de ransomware separados em alvos não relacionados usando as mesmas cargas iniciais.

De acordo com a Microsoft, a atividade de ransomware do agente da ameaça tem sido, “em grande parte, de natureza oportunista e totalmente separada de alvos focados em espionagem”

ATUALIZAÇÃO: Uma análise técnica ainda mais detalhada dessa campanha está disponível na BlackBerry.

Há uma correção disponível para o CVE-2023-36884?

No momento, não.

A Microsoft sugere que ainda está investigando ativamente essa vulnerabilidade e, após a conclusão, a empresa “tomará as medidas apropriadas para ajudar a proteger nossos clientes”. Isso pode incluir o fornecimento de uma atualização de segurança por meio de nosso processo de lançamento mensal ou de uma atualização de segurança fora do ciclo, dependendo das necessidades do cliente.”

Mitigações para o CVE-2023-36884

De acordo com a Microsoft, existem atualmente três maneiras de as empresas se protegerem:

  1. Os clientes que usam o Microsoft Defender para Office estão protegidos contra anexos que tentam explorar essa vulnerabilidade.
  2. Nas cadeias de ataque atuais, o uso da regra Block all Office applications from creating child processes Attack Surface Reduction impedirá que a vulnerabilidade seja explorada.
  3. As organizações que não podem tirar proveito dessas proteções podem adicionar os seguintes nomes de aplicativos a essa chave de registro como valores do tipo REG_DWORD com dados 1..:
    ComputadorHKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATION
    • Excel.exe
    • Graph.exe
    • MSAccess.exe
    • MSPub.exe
    • PowerPoint.exe
    • Visio.exe
    • WinProj.exe
    • WinWord.exe
    • Wordpad.exe

Observação: A Microsoft fornece um aviso de que, embora essas configurações de registro possam atenuar a exploração,  elas também podem afetar a funcionalidade regular de determinados casos de uso relacionados a esses aplicativos. Portanto, é importante fazer testes antes de implementar as alterações de forma ampla.

Como mitigar o CVE-2023-36884 usando o PowerShell

Para aqueles que estão no terceiro grupo e consideram fazer as alterações no registro, nosso engenheiro de produtos de software Kyle Bohlander criou o seguinte script que automatizará esse processo. A utilização desse script com o Ninja (ou o RMM de sua preferência) permitirá que você implemente a atenuação remotamente e em escala.

Observação: Esse script não se limita apenas aos usuários do NinjaOne. Ele pode ser usado por qualquer pessoa. No entanto, conforme recomendado pela Microsoft, essa correção deve ser implementada em máquinas de teste antes de uma implementação mais ampla. Como de costume, se você optar por executá-lo, será por sua própria conta e risco.

Requisitos do dispositivo: Funciona nos sistemas Windows 7 e Windows Server 2008 e superiores.

Se você precisar reverter: As configurações da chave do registro podem ser desfeitas com o parâmetro -Undo ou aplicadas a produtos específicos do Office usando o parâmetro -OfficeProducts.

 

Autor do roteiro: Kyle Bohlander, engenheiro de produtos de software da NinjaOne

 

 

Faça o download do arquivo de script aqui.

<#
.SYNOPSIS
    This script will set the registry keys required to remediate CVE-2023-36884. Please note that these keys may effect regular functionality of Microsoft Office Products. 
    These changes can be undone with the -Undo parameter or applied only to specific office products using the -OfficeProducts parameter.
.DESCRIPTION
    This script will set the registry keys required to remediate CVE-2023-36884. Please note that these keys may effect regular functionality of Microsoft Office Products. 
    These changes can be undone with the -Undo parameter or applied only to specific office products using the -OfficeProducts parameter.
.EXAMPLE
    (No Parameters)
    
    Visio was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONVisio.exe to 1
    Success!
    Word was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONWinWord.exe to 1
    Success!
    Wordpad was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONWordpad.exe to 1
    Success!
    Project was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONWinProj.exe to 1
    Success!
    PowerPoint was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONPowerPoint.exe to 1
    Success!
    Excel was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONExcel.exe to 1
    Success!
    Publisher was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONMsPub.exe to 1
    Success!
    Graph was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONGraph.exe to 1
    Success!
    Access was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONMSAccess.exe to 1
    Success!
​
PARAMETER: -Undo
    Remove's the registry keys used for this fix (if they're set at all).
.EXAMPLE
    -Undo
    
    Visio was selected for remediation.
    Succesfully removed registry key!
    Word was selected for remediation.
    Succesfully removed registry key!
    Wordpad was selected for remediation.
    Succesfully removed registry key!
    Project was selected for remediation.
    Succesfully removed registry key!
    PowerPoint was selected for remediation.
    Succesfully removed registry key!
    Excel was selected for remediation.
    Succesfully removed registry key!
    Publisher was selected for remediation.
    Succesfully removed registry key!
    Graph was selected for remediation.
    Succesfully removed registry key!
    Access was selected for remediation.
    Succesfully removed registry key!
​
PARAMETER: -OfficeProducts "Excel,Word"
    Set's the registry key for only those products. Can be given an individual product or a comma seperated list. Can also be used in combination with the -Undo parameter Ex. "Publisher" or "Word,Excel,Access"
.EXAMPLE
    -OfficeProducts "Excel,Word"
    
    Word was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONWinWord.exe to 1
    Success!
    Excel was selected for remediation.
    Set Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATIONExcel.exe to 1
    Success!
​
.OUTPUTS
    None
.NOTES
    General notes
#>
[CmdletBinding()]
param (
    [Parameter()]
    [String]$OfficeProducts = "All",
    [Parameter()]
    [Switch]$Undo
)
​
begin {
​
    # Test's if the script is running in an elevated fashion (required for HKLM edits)
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }
​
    # This is just to make setting regkey's easier
    function Set-RegKey {
        param (
            $Path,
            $Name,
            $Value,
            [ValidateSet("DWord", "QWord", "String", "ExpandedString", "Binary", "MultiString", "Unknown")]
            $PropertyType = "DWord"
        )
        if (-not $(Test-Path -Path $Path)) {
            # Check if path does not exist and create the path
            New-Item -Path $Path -Force | Out-Null
        }
        if ((Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue)) {
            # Update property and print out what it was changed from and changed to
            $CurrentValue = (Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue).$Name
            try {
                Set-ItemProperty -Path $Path -Name $Name -Value $Value -Force -Confirm:$false -ErrorAction Stop | Out-Null
            }
            catch {
                Write-Error "[Error] Unable to Set registry key for $Name please see below error!"
                Write-Error $_
                exit 1
            }
            Write-Host "$Path$Name changed from $CurrentValue to $($(Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue).$Name)"
        }
        else {
            # Create property with value
            try {
                New-ItemProperty -Path $Path -Name $Name -Value $Value -PropertyType $PropertyType -Force -Confirm:$false -ErrorAction Stop | Out-Null
            }
            catch {
                Write-Error "[Error] Unable to Set registry key for $Name please see below error!"
                Write-Error $_
                exit 1
            }
            Write-Host "Set $Path$Name to $($(Get-ItemProperty -Path $Path -Name $Name -ErrorAction SilentlyContinue).$Name)"
        }
    }
​
    # All the microsoft office products with their corresponding dword value
    $RemediationValues = @{ "Excel" = "Excel.exe"; "Graph" = "Graph.exe"; "Access" = "MSAccess.exe"; "Publisher" = "MsPub.exe"; "PowerPoint" = "PowerPnt.exe"; "OldPowerPoint" = "PowerPoint.exe" ; "Visio" = "Visio.exe"; "Project" = "WinProj.exe"; "Word" = "WinWord.exe"; "Wordpad" = "Wordpad.exe" }
}
process {
​
    # Error out when not elevated
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
​
    # If they have a smaller selection we'll want to filter our remediation list
    if ($OfficeProducts -notlike "All") {
        $OfficeProducts = $OfficeProducts.split(',') | ForEach-Object { $_.Trim() }
        $RemediationTargets = $RemediationValues.GetEnumerator() | ForEach-Object { $_ | Where-Object { $OfficeProducts -match $_.Key } }
    }
    else {
        $RemediationTargets = $RemediationValues.GetEnumerator()
    }
​
    # Path to all the registry keys
    $Path = "Registry::HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftInternet ExplorerMainFeatureControlFEATURE_BLOCK_CROSS_PROTOCOL_FILE_NAVIGATION"
​
    # We'll want to display an error if we don't have anything to do
    if ($RemediationTargets) { 
​
        # For Each product we're targeting we'll set the regkey. The Set-RegKey function already checks if it was succesful and will display an error and exit if it fails
        $RemediationTargets | ForEach-Object { 
            Write-Host "$($_.Name) was selected for remediation."
            if (-not $Undo) {
                Set-RegKey -Path $Path -Name $_.Value -Value 1
                Write-Host "Success!"
            }
            else {
                # If you only applied it to certain products this will error so instead we'll hide the errors and check afterwards if the registry key is there.
                Remove-ItemProperty -Path $Path -Name $_.Value -ErrorAction SilentlyContinue | Out-Null
                if (Get-ItemProperty -Path $Path -Name $_.Value -ErrorAction SilentlyContinue) {
                    Write-Error "[Error] Unable to undo registry key $($_.Value)!"
                    exit 1
                }
                else {
                    Write-Host "Succesfully removed registry key!"
                }
            }
        }
​
        Write-Warning "A reboot may be required."
        exit 0
    }
    else {
        Write-Host $RemediationTargets
        Write-Warning "No products were selected! The valid value's for -OfficeProducts is listed below you can also use a comma seperated list or simply put 'All'."
        $RemediationValues | Sort-Object Name | Format-Table | Out-String | Write-Host
        Write-Error "ERROR: Nothing to do!"
        exit 1
    }
}

 

Próximas etapas

A criação de uma equipe de TI simplificada e de alto desempenho exige uma solução centralizada que sirva como pedra angular da sua abordagem de prestação de serviços. Ao eliminar a necessidade de uma infraestrutura intrincada no local, o NinjaOne permite que as equipes de TI supervisionem, protejam e ofereçam suporte a todos os dispositivos, independentemente de sua localização.

Saiba mais sobre o NinjaOne Patch Management, confira um tour ao vivo ou inicie sua avaliação gratuita da plataforma NinjaOne.

Categories:

You might also like