Les mises à jour du Patch Tuesday de juillet 2023 de Microsoft ont mis en évidence plusieurs vulnérabilités activement exploitées, dont une (ou plusieurs ?) qui n’a toujours pas été corrigée. Voici ce que vous devez savoir sur CVE-2023-36884, une vulnérabilité zero-day que les attaquants exploitent pour obtenir une exécution de code à distance via des documents Microsoft Office « spécialement fabriqués ».
Qu’est-ce que CVE-2023-36884 ?
Réponse courte : Microsoft caractérise CVE-2023-36884 comme une vulnérabilité d’exécution de code HTML à distance pour Office et Windows avec un CVSS de 8,3. Réponse plus substantielle : Pour l’instant, Microsoft est toujours en train d’enquêter activement, et ne fournit pas grand-chose au-delà d’une description superficielle. Elle indique qu’une exploitation réussie de la vulnérabilité peut permettre à un attaquant d’exécuter du code à distance en utilisant le contexte de la victime, et qu’il suffit de la tromper pour qu’elle ouvre un document Microsoft Office conçu à cette fin. Curieusement, le communiqué commence par indiquer que « Microsoft enquête sur des rapports faisant état d’une série de vulnérabilités d’exécution de code à distance », ce qui amène Will Dormann, expert en vulnérabilités, à émettre la théorie suivante : « CVE-2023-36884 n’est qu’un espace réservé pour une mise à jour visant à corriger plusieurs vulnérabilités par le biais d’une seule CVE, qui pourrait être publiée ultérieurement, à une date inconnue. » Le communiqué manque de précisions mais il comporte un lien vers un article de blog qui explique comment Microsoft l’a découvert.
Espionnage et ransomware : exploitation active de CVE-2023-36884
En Juin, Microsoft a identifié une campagne de phishing lancée par un pirate que Microsoft suit sous le nom de Storm-0978. La campagne a ciblé des entités gouvernementales et de défense en Amérique du Nord et en Europe, avec des appâts liés au Congrès Mondial Ukrainien. Les e-mails envoyés dans le cadre de cette campagne contenaient des liens vers des documents Word qui exploitaient la norme CVE-2023-36884 afin d’installer des portes dérobées. Alors que ces cibles et les activités post-compromission suggèrent des intentions d’espionnage, Microsoft note que, pendant que cette campagne se déroulait, elle a également découvert que Storm-0978 menait des attaques de ransomware distinctes sur des cibles sans rapport avec elle, en utilisant les mêmes éléments. Selon Microsoft, l’activité du pirate en matière de ransomware a été « essentiellement de nature opportuniste et n’a absolument rien à voir avec les cibles d’espionnage ». MISE À JOUR : Une analyse technique encore plus approfondie de cette campagne est disponible sur le site de BlackBerry.
Existe-t-il un correctif pour CVE-2023-36884 ?
Pour l’instant, non. Microsoft indique qu’elle continue d’enquêter activement sur cette vulnérabilité et qu’à l’issue de cette enquête, la société « prendra les mesures appropriées pour protéger ses clients. Il peut s’agir de fournir une mise à jour de sécurité dans le cadre de notre processus de publication mensuel ou de fournir une mise à jour de sécurité hors cycle, en fonction des besoins du client. »
Mesures de mitigation pour CVE-2023-36884
Selon Microsoft, les entreprises disposent actuellement de trois moyens pour se protéger :
- Les clients qui utilisent Microsoft Defender pour Office sont protégés contre les pièces jointes qui tentent d’exploiter cette vulnérabilité.
- Dans les chaînes d’attaque actuelles, l’utilisation de la règle de réduction de la surface d’attaque « Bloquer la création de processus fils pour toutes les applications Office » empêchera l’exploitation de la vulnérabilité.
- Les entreprises qui ne peuvent pas profiter de ces protections peuvent ajouter les noms d’application suivants à cette clé de registre en tant que valeurs de type REG_DWORD avec des données 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
Remarque : Microsoft indique que si ces paramètres de registre peuvent atténuer l’exploitation de la faille, , ils pourraient également affecter le fonctionnement normal de certains cas d’utilisation liés à ces applications. Il est donc important de tester les changements avant de les déployer à grande échelle.
Comment mitiger les effets de CVE-2023-36884 à l’aide de PowerShell
Pour ceux qui envisagent de modifier le registre, , notre ingénieur produit logiciel Kyle Bohlander a créé le script suivant qui automatise le processus. L’utilisation de ce script avec NinjaOne (ou le RMM de votre choix) vous permettra de déployer la mitigation à distance et à grande échelle. Remarque : Ce script n’est pas réservé aux utilisateurs de NinjaOne. Il peut être utilisé par tout le monde. Toutefois, comme le conseille Microsoft, ce correctif doit être déployé sur des machines de test avant d’être déployé à plus grande échelle. Comme d’habitude, si vous décidez de l’exécuter, cela est à vos risques et périls. Exigences de l’appareil : Fonctionne sur les systèmes Windows 7 et Windows Server 2008 ou ultérieurs. Si vous devez revenir en arrière : Les paramètres de la clé de registre peuvent être annulés à l’aide du paramètre -Undo, ou appliqués à des produits Office spécifiques à l’aide du paramètre -OfficeProducts.
Auteur du script : Kyle Bohlander, Ingénieur produit logiciel chez NinjaOne
Téléchargez le fichier de script ici.
<# .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 } }