...
Fuente; elaboración propia a partir de la información publicada en; https://www.cve.org/CVERecord?id=CVE-2024-29059.
De manera alternativa, se proporciona un script de Powershell realizado por ChatGPT. (¡ADVERTENCIA! revisad los resultados, no se ha verificado si ofrece resultados correctos).
Versiones de .Net Framework Targeting Pack
El IDE de código Visual Studio permite disponer de varias versiones de .Net Framework permite tener una versión de .net framework instalada pero a la vez puede compilar para otras versiones anteriores. Esto lo implementa a través de los "Targeting Pack", versiones de net framework adicionales que incluye las dll para la compilación, pero que no incluye el runtime.
Las versiones de net que se llaman "Targeting Pack" no son vulnerables, ya que no permiten ejecutar aplicaciones net, sólo sirve para compilarlas.
Comprobación de la versión de net framework instalada
La manera más fácil es revisar la lista de programas instalados y comprobar las versiones de .Net framework;
Puede realizar la misma comprobación por línea de comandos:
| Bloque de código | ||
|---|---|---|
| ||
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*,
HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
Where-Object { $_.DisplayName -match ".NET Framework" } |
Select-Object DisplayName, DisplayVersion | Sort-Object DisplayVersion |
Ejemplo de ejecución;
Otra comprobación por línea de comandos
De manera alternativa, se proporciona un script de Powershell realizado por ChatGPT. (¡ADVERTENCIA! revisad los resultados, no se ha verificado si ofrece resultados correctos).
| Bloque de código | ||||
|---|---|---|---|---|
| ||||
# Función para obtener versiones instaladas desde el registro
function Get-DotNetVersions {
$dotNetVersions = @()
$ndpBaseKey = "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP"
Get-ChildItem -Path $ndpBaseKey -Recurse |
Where-Object { $_.GetValue("Version") -or $_.GetValue("Release") } |
ForEach-Object {
| ||||
| Bloque de código | ||||
| ||||
# Función para obtener versiones instaladas desde el registro function Get-DotNetVersions { $dotNetVersions = @() $ndpBaseKey = "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP" Get-ChildItem -Path $ndpBaseKey -Recurse | Where-Object { $_.GetValue("Version") -or $_.GetValue("Release") } | ForEach-Object { $version = $_.GetValue("Version") $release = $_.GetValue("Release") $installPath = $_.PSPath $keyName = $_.Name -replace '.*\\NDP\\', '' if ($version) { $dotNetVersions$version += [PSCustomObject]@{$_.GetValue("Version") $release = $_.GetValue("Release") Key $installPath = $_.PSPath = $keyName $keyName = $_.Name -replace '.*\\NDP\\', '' Version if = $version($version) { Release = $release $dotNetVersions += [PSCustomObject]@{ Key Path = $installPath$keyName } Version } } return $dotNetVersions } # Comprobación contra rangos vulnerables function Check-VulnerableVersion($versionObj) { = $version $results = @() $verRelease = [version]$versionObj.Version = $release switch -Wildcard ($versionObj.Key) { "v2.0*" { Path = $installPath if ($ver -ge [version]"2.0.0" -and $ver -lt [version]"3.0.50727.8976") { } } } $results += "❌ $($versionObj.Key) versión $ver es vulnerable (rango: 2.0.0 - 3.0.50727.8976)" return $dotNetVersions } # Comprobación contra rangos vulnerables function Check-VulnerableVersion($versionObj) { $results = @() $ver }= [version]$versionObj.Version switch }-Wildcard ($versionObj.Key) { "v3v2.0*" { if ($ver -ge [version]"2.0.0" -and $ver -lt [version]"3.0.50727.8976") { $results += "❌ $($versionObj.Key) versión $ver es vulnerable (rango: 2.0.0 - 3.0.50727.8976)" } } "v3.50*" { if ($ver -ge [version]"102.0.0" -and $ver -lt [version]"103.0.1024050727.204028976") { $results += "❌ .NET 3.5 versión $ver es vulnerable (rango: 10.0.0 - 10.0.10240.20402)" } elseif ($ver -lt [version]"3.0.30729.8959") { $($versionObj.Key) versión $ver es vulnerable (rango: 2.0.0 - 3.0.50727.8976)" } $results += "❌} .NET 3.5.1 versión $ver es vulnerable (< 3.0.30729.8959)" "v3.5" { } if ($ver -ge [version]"10.0.0" -and $ver -lt } [version]"10.0.10240.20402") { "v4\Full" { $results += "❌ .NET 3.5 versión $ver es #vulnerable Usar Release para versiones 4.x (rango: 10.0.0 - 10.0.10240.20402)" } $release = $versionObj.Release elseif ($ver -lt [version]"3.0.30729.8959") { if ($release) { $results += "❌ .NET 3.5.1 versión $ver es vulnerable # Obtener versión por Release(< 3.0.30729.8959)" } $versionInfo = switch ($release) {} "v4\Full" { { $_# -geUsar 533325Release }para {versiones "4.8.1" }x $release = $versionObj.Release { $_ -ge 528040 } { "4.8" } if ($release) { { $_ -ge 461814# }Obtener { "4.7.2" }versión por Release $versionInfo = switch { $_ -ge 461308 } { "4.7.1" }($release) { { $_ -ge 460798533325 } { "4.8.71" } { $_ -ge 394802528040 } { "4.6.28" } default{ $_ -ge 461814 } { "Desconocida4.7.2" } } { $_ -ge 461308 } # Rango { "4.7.0 a 4.7.04081.03 1" } if{ ($release$_ -ge 460798 -and $release -lt 528040) { } { "4.7" } { $results += "❌ .NET Framework 4.x (Release $release) versión $versionInfo es vulnerable (rango 4.7.0 a 4.8 sin parche)"$_ -ge 394802 } { "4.6.2" } default { "Desconocida" } } # Rango 4.87.0 a 4.87.0469004081.0203 if ($versionInfo$release -eq "4.8"ge 460798 -and $release -lt 528040) { $results += "❌ .NET Framework 4.8 versiónx $versionInfo (releaseRelease $release) versión $versionInfo es vulnerable (<rango 4.8.04690.027.0 a 4.8 sin parche)" } # Rango 4.8.0 a 4.8.0921404690.0102 if ($versionInfo -eq "4.8.1" -and $release -lt 533325528040) { $results += "❌ .NET 4.8.1 versión $versionInfo (release $release) es vulnerable (< 4.8.0921404690.01)" 02)" } # Rango 4.8.0 }a 4.8.09214.01 } if ($versionInfo -eq }"4.8.1" -and $release -lt 533325) { } if ($results.Count -eq 0) { $results return+= "✅ $($versionObj.Key) versión $($versionObj.Version) no es vulnerable❌ .NET 4.8.1 versión $versionInfo (release $release) es vulnerable (< 4.8.09214.01)" } else { return $results } } # Ejecutar comprobación} Write-Host "🔎 Comprobando versiones de .NET Framework instaladas..." -ForegroundColor Cyan $versions = Get-DotNetVersions} foreach ($v in $versions) { $results} = Check-VulnerableVersion -versionObj $v} if ($results.Count -iseq [array]0) { $resultsreturn | ForEach-Object { Write-Host $_ -ForegroundColor Red }"✅ $($versionObj.Key) versión $($versionObj.Version) no es vulnerable" } else { Write-Hostreturn $results -ForegroundColor Green } } |
Comprobación de la versión de net framework instalada
La manera más fácil es revisar la lista de programas instalados y comprobar las versiones de .Net framework;
Puede realizar la misma comprobación por línea de comandos:
| Bloque de código | ||
|---|---|---|
| ||
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*,
HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
Where-Object { $_.DisplayName -match ".NET Framework" } |
Select-Object DisplayName, DisplayVersion | Sort-Object DisplayVersion |
Ejemplo de ejecución;
...
# Ejecutar comprobación
Write-Host "🔎 Comprobando versiones de .NET Framework instaladas..." -ForegroundColor Cyan
$versions = Get-DotNetVersions
foreach ($v in $versions) {
$results = Check-VulnerableVersion -versionObj $v
if ($results -is [array]) {
$results | ForEach-Object { Write-Host $_ -ForegroundColor Red }
} else {
Write-Host $results -ForegroundColor Green
}
}
|
Solución
Paso 1
El primer paso consiste en instalar las actualizaciones de Windows pendientes o comprobar que está actualizadoestá actualizado.
- Haz clic en el botón de inicio (ícono de Windows) o presiona
Win + Ipara abrir Configuración. - Ve a Actualización y seguridad (o Windows Update, dependiendo de la versión).
- Haz clic en Buscar actualizaciones.
Paso 2
Es posible que tengas instaladas versiones antiguas de .Net Framework que no aparecen en
...
la lista de agregar y quitar programas.
Para examinarlas, abre el menú "Ejecutar" (tecla <Windows> + R) escribe "appwiz.cpl" y selecciona "Activar o desactivar las características de Windows"
Desactiva los recuadros de ".Net Framework 3.5 (incluye .NET 2.0 y 3.0)
Paso 3
...
...
El componente .Net framework es un componente incluido en el núcleo de Windows, que sube automáticamente de versión al actualizar el sistema operativo.
...


