Vulnerabilidades de día cero de Microsoft sin parchear: cómo mitigar CVE-2023-36884 con PowerShell

[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:

  1. Los clientes que utilizan Microsoft Defender para Office están protegidos de los archivos adjuntos que intentan aprovecharse de esta vulnerabilidad.
  2. 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.
  3. 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.

Descarga el script aquí.

<#
.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

 

Categorías:

Quizá también te interese…

×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón “Acepto” que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona “tal cual” y “según disponibilidad”, sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).