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:
- Os clientes que usam o Microsoft Defender para Office estão protegidos contra anexos que tentam explorar essa vulnerabilidade.
- 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.
- 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
}
}
Autor do roteiro: