Questa correzione prevede l'utilizzo di uno script di Windows PowerShell che utilizza comandi di scripting Windows nativi.
Queste istruzioni possono essere applicate a qualsiasi tipo di installazione di DPA su Windows, inclusi l'applicazione DPA, il datastore DPA e l'agent DPA standalone (installato da solo su un server o su un altro tipo di application server).
Per ulteriori informazioni sulle vulnerabilità Apache Log4j, consultare il seguente l'avviso di sicurezza Dell:
Per domande o assistenza su queste istruzioni, contattare il supporto tecnico Dell.
Procedura di risoluzione manuale:
Nota:
Nota: in alternativa, alla fine di queste istruzioni viene fornito il testo completo del file log4j_jndiremoval.txt, che può essere copiato e incollato in un file di testo.
Dalla finestra Windows PowerShell, se si tratta di un'installazione dell'agent nell'applicazione o nel datastore DPA, il comando è:
dpa agent stop
Dalla finestra Windows PowerShell, se si tratta di un'installazione standalone dell'agent DPA, il comando è:
\dpa stop
Esempio:
C:\Program Files\EMC\DPA\agent\etc\dpa stop
Nota: il percorso di installazione DPA deve essere immesso una seconda volta.
Dalla finestra Windows PowerShell, se si tratta di un'installazione dell'agent nell'applicazione o nel datastore DPA, il comando è:
dpa agent start
Dalla finestra Windows PowerShell, se si tratta di un'installazione standalone dell'agent DPA, il comando è:
\dpa start
Esempio:
C:\Program Files\EMC\DPA\agent\etc\dpa start
Appendice:
di seguito è riportato il testo completo dello script PowerShell. Se non è possibile accedere al file allegato a questo articolo della Knowledge Base, è possibile copiare e incollare il testo così com'è in un file di testo (.txt) da utilizzare nella procedura descritta più sopra.
param ( [switch]$verify ) '--------------------------------------------------------------------------' '--------------------------------------------------------------------------' ' Data Protection Advisor CVE-2021-44228, CVE-2021-45046 Patcher 1.1 ' ' Developer : Pankaj Pande(p.pande@dell.com) ' ' Release : 29 Dec 2021 ' '--------------------------------------------------------------------------' 'Welcome to CVE-2021-44228, CVE-2021-45046 Patching Tool.' 'This utility will assist you in patching Data Protection Advisor for CVE-2021-44228 and CVE-2021-45046 on a Windows system.' "Special Note : The tool automates remediation steps for all internal components. Following remediation, validation checks are also run. While this tool remediates these vulnerabilities, all available information from Apache on log4j continues to be monitored. If new CVEs are discovered, Dell Technologies' Engineering teams will clarify impact and new remediation steps where necessary. If needed this tool will be updated to include the new remediation steps." '---------------------------------------------------------------------------' function List-JndiLookup { Param ( [string[]]$JarFiles, [string] $FilenameToRemove ) #initiate the .net namespace add-type -AssemblyName 'System.IO.Compression.filesystem' "The number of files to be processed is : $($JarFiles.Count)" #list the files we are processing # them later foreach ($JarFile in $JarFiles) { "$JarFile" } $processedFiles = 0; $skippedFiles = 0; foreach ($JarFile in $JarFiles) { # Open the jar for updating (.jar files are just .zip files) try { $ProcessJarFile = [io.compression.zipfile]::Open($JarFile,'Update') } catch { # Error Handling } "Checking $JarFile for $FilenameToRemove" $totalFilesInJar = ($ProcessJarFile.Entries | Where FullName -Match $FilenameToRemove).Count if($totalFilesInJar -gt 0){ $processedFiles++ } #close Zip try { $ProcessJarFile.Dispose() } catch { # Error Handling } } if ( $processedFiles -gt 0) { Write-Host "$processedFiles file(s) found vulnerable" -fore red Write-Host "Finished...Please make sure to run the patching on this sytem" -fore red } else { Write-Host "$processedFiles file(s) found vulnerable" -fore green Write-Host "Finished...No Action needed" -fore green } } function Remove-JndiLookup { Param ( [string[]]$JarFiles, [string] $FilenameToRemove ) #initiate the .net namespace add-type -AssemblyName 'System.IO.Compression.filesystem' "The number of files to be processed is : $($JarFiles.Count)" #list the files we are processing # them later foreach ($JarFile in $JarFiles) { "$JarFile" } "Starting patching/Removel Process" $processedFiles = 0; $skippedFiles = 0; foreach ($JarFile in $JarFiles) { # Open the jar for updating (.jar files are just .zip files) try { $ProcessJarFile = [io.compression.zipfile]::Open($JarFile,'Update') } catch { # Error Handling } "Checking $JarFile for $FilenameToRemove" $totalFilesInJar = ($ProcessJarFile.Entries | Where FullName -Match $FilenameToRemove).Count if($totalFilesInJar -gt 0){ "Deleting unwanted file $FilenameToRemove from $JarFile" ($ProcessJarFile.Entries | Where FullName -Match $FilenameToRemove).Delete() $processedFiles++ } else { "File $FilenameToRemove not found inside $JarFile, this may have already been deleted." $skippedFiles++ } # Clean up / close the zip try { $ProcessJarFile.Dispose() } catch { # Error Handling } } "$processedFiles file(s) processed`n$skippedFiles file(s) skipped" Write-Host "Finished..." -fore green } if ( $verify ) { Write-Host "Running in dry-run mode. Will not process any files" -fore green } else { Write-Host "Running in fix mode. Will patch files that are found affected" -fore red } $dpa_path = Read-Host "Enter the DPA location " Write-Host "Running in : '$dpa_path' " -fore green if ($verify) { List-JndiLookup -JarFiles (Get-ChildItem -Exclude 'tmp' -Recurse -Path "$dpa_path" -Filter 'dpa*.jar' | ? { $_.FullName -inotmatch 'tmp' }).FullName -FilenameToRemove 'JndiLookup.class' } else { Remove-JndiLookup -JarFiles (Get-ChildItem -Exclude 'tmp' -Recurse -Path "$dpa_path" -Filter 'dpa*.jar' | ? { $_.FullName -inotmatch 'tmp' }).FullName -FilenameToRemove 'JndiLookup.class' }
Per domande o assistenza su queste istruzioni, contattare il supporto tecnico Dell.