[av_textblock size=» av-medium-font-size=» av-small-font-size=» av-mini-font-size=» font_color=» color=» id=» custom_class=» template_class=» av_uid=’av-lkh21if4′ sc_version=’1.0′ admin_preview_bg=»]
Las actualizaciones del Martes de parches de Microsoft de julio de 2023 han revelado una vulnerabilidad (¿o más?) en explotación activa que sigue sin estar parcheada. Esto es lo que necesitas saber sobre CVE-2023-36884, una vulnerabilidad de día cero que los atacantes están explotando para obtener la ejecución remota de código a través de documentos de Microsoft Office «especialmente diseñados».
¿Qué es CVE-2023-36884?
Respuesta rápida: Microsoft caracteriza al CVE-2023-36884 como una vulnerabilidad que permite la ejecución remota de código HTML de Office y Windows con una puntuación CVSS base de 8.3.
Respuesta más sustancial: ¿Qué va a ocurrir?
Por ahora, el aviso de la compañía sugiere que Microsoft sigue investigando activamente, sin proporcionar mucha información más allá de una descripción superficial. Afirma que la explotación exitosa de la vulnerabilidad puede permitir a un atacante realizar la ejecución remota de código en el propio entorno de la víctima, y que esto simplemente requiere engañar a la víctima para que abra un documento de Microsoft Office especialmente diseñado.
Curiosamente, el aviso comienza afirmando que «Microsoft está investigando informes de una serie de vulnerabilidades de ejecución remota de código» (el énfasis es mío), lo que ha llevado al experto en vulnerabilidades Will Dormann a teorizar que «el CVE-2023-36884 no es más que un indicador de posición para una actualización que aborda múltiples vulnerabilidades mediante un único CVE, que podría publicarse en algún momento desconocido en el futuro».
Aunque el aviso en sí mismo carece de detalles, se enlaza con una entrada de blog que arroja más luz sobre cómo lo descubrió Microsoft.
Espionaje y ransomware: explotación activa del CVE-2023-36884
En junio, Microsoft identificó una campaña de phishing lanzada por un agente malicioso al que se refiere como Storm-0978. La campaña iba dirigida a entidades gubernamentales y de defensa de Norteamérica y Europa, con señuelos relacionados con el Congreso Mundial de Ucrania. Los correos electrónicos enviados como parte de la campaña contenían enlaces a documentos de Word que abusaban del CVE-2023-36884 para instalar puertas traseras.
Aunque estos objetivos y las actividades posteriores al ataque sugieren motivos de espionaje, Microsoft señala que, mientras se desarrollaba esta campaña, también identificó que Storm-0978 estaba llevando a cabo otros ataques de ransomware contra objetivos no relacionados, utilizando las mismas herramientas iniciales.
Según Microsoft, la actividad de ransomware del agente agresor ha sido «en gran medida de naturaleza oportunista y totalmente separada de los objetivos centrados en el espionaje».
ACTUALIZACIÓN: BlackBerry ofrece un desglose técnico aún más detallado de esta campaña.
¿Hay algún parche disponible para CVE-2023-36884?
Por el momento, no.
Microsoft ha comunicado que todavía está investigando activamente esta vulnerabilidad y que, una vez haya terminado, la empresa tomará «las medidas adecuadas para ayudar a proteger a los clientes. Esto podría incluir proporcionar una actualización de seguridad a través de nuestro proceso de lanzamiento mensual o proporcionar una actualización de seguridad fuera de ciclo, dependiendo de las necesidades del cliente».
Recomendaciones para CVE-2023-36884
Según Microsoft, las empresas tienen tres formas de protegerse:
- Los clientes que utilizan Microsoft Defender para Office están protegidos de los archivos adjuntos que intentan aprovecharse de esta vulnerabilidad.
- En las cadenas de ataque actuales, el uso de la regla de reducción de superficie de ataque Block all Office applications from creating child processes impedirá que se explote la vulnerabilidad.
- Las organizaciones que no sean capaces de aplicar estas medidas de protección, pueden añadir los siguientes nombres de aplicaciones a esta clave de registro como valores del tipo REG_DWORD con datos 1.: ComputerHKEY_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
Nota: Microsoft advierte que, si bien estos ajustes del registro pueden mitigar la explotación, también podrían afectar a la funcionalidad normal de determinados casos de uso relacionados con estas aplicaciones. Por lo tanto, es importante realizar pruebas antes de implementar los cambios de forma generalizada.
Cómo mitigar CVE-2023-36884 utilizando PowerShell
Para aquellos que estén considerando poner en práctica la tercera opción y hacer los cambios en el registro, nuestro Ingeniero de producto de software Kyle Bohlander ha creado el siguiente script que automatizará ese proceso. Al utilizar este script con Ninja (o el RMM de tu elección), podrás desplegar la mitigación de forma remota y a escala.
Nota: Este script no está limitado únicamente a los usuarios de NinjaOne. Cualquiera puede utilizarlo. Sin embargo, como aconseja Microsoft, esta corrección debe desplegarse en máquinas de prueba antes de proceder a una implementación más amplia. Como siempre, si decides ejecutarlo es bajo tu propia responsabilidad.
Requisitos del dispositivo: Funciona en sistemas Windows 7 y Windows Server 2008 en adelante.
Si necesitas revertir: La configuración de la clave del registro puede deshacerse con el parámetro -Undo, o aplicarse a productos específicos de Office mediante el parámetro -OfficeProducts.
<# .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 } }
[/av_textblock]
Autor del script: Kyle Bohlander, Ingeniero de productos de software de NinjaOne