- -

Árbol de páginas

Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Descripción y criticidad de la vulnerabilidad

Comprobar si tengo la vulnerabilidad

Productos afectados

Pendiente.

Los datos de esta tabla se han extraído de; https://www.cve.org/CVERecord?id=CVE-2024-29059 fortiguard.com/outbreak-alert/microsoft-net-framework-information-disclosure

https://www.cisa.gov/news-events/alerts/2025/02/04/cisa-adds-four-known-exploited-vulnerabilities-catalog

Comprobar si tengo la vulnerabilidad

Productos afectados

Las siguientes versiones de .Net Framework están afectadas por la vulnerabilidad.

Advertencia
ProductosVersiones vulnerables
Advertencia
Microsoft .NET Framework 2.0
ProductosVersiones vulnerables

Microsoft .NET Framework 32.0
Microsoft .NET Framework 3.0
Microsoft .NET Framework 3.5

 De 2.0.0 (incluido) a 3.0.50727.8976 (no incluido)

Microsoft .NET Framework 3.5.1

Anteriores a 3.0.30729.8959 (no incluido)

Microsoft .NET Framework 4.6.2
Microsoft .NET Framework 4.7
Microsoft .NET Framework 4.7.1
Microsoft .NET Framework 4.7.2

De 4.7.0 (incluido) a 4.7.04081.03 (no incluido)

Microsoft .NET Framework 4.8
Microsoft .NET Framework 3.5 AND 4.8

De 4.8.0 (incluido) a 4.8.04690.02 (no incluido)

Microsoft .NET Framework 4.8.1
Microsoft .NET Framework 3.5 AND 4.8.1

De 4.8.0 (incluido) a 4.8.09214.01 (no incluido)

Microsoft .NET Framework 3.5 AND 4.6/4.6.2

10.0.0 (incluido) a 10.0.10240.20402 (no incluido)

Comprobación de versiones vulnerables con script de Powershell realizado por ChatGPT. (¡ADVERTENCIA! revisad los resultados, no se ha verificado si ofrece resultados correctos).

Fuente; elaboración propia a partir de la información publicada en; https://www.cve.org/CVERecord?id=CVE-2024-29059.

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;

Image Added

Puede realizar la misma comprobación por línea de comandos:

Bloque de código
titlePowershell
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*,
Bloque de código
languagepowershell
titleComprueba_CVE-2024-29059.ps1
# 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") HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
     Where-Object   $installPath = ${ $_.PSPath
DisplayName -match ".NET Framework" } |
   $keyName = Select-Object DisplayName, DisplayVersion | Sort-Object DisplayVersion

Ejemplo de ejecución;

Image Added

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
languagepowershell
titleComprueba_CVE-2024-29059.ps1
# 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 {
$_.Name -replace '.*\\NDP\\', ''

        if ($version) {
            $dotNetVersions += [PSCustomObject]@{
                Key        = $keyName
                Version    = $version
             $version   Release= $_.GetValue("Version")
    = $release
   $release = $_.GetValue("Release")
        $installPath = $_.PSPath
  Path      $keyName = $installPath
   $_.Name -replace '.*\\NDP\\', ''

        if }
($version) {
          }
  $dotNetVersions  }

+= [PSCustomObject]@{
      return $dotNetVersions
}

# Comprobación contra rangos vulnerables
function Check-VulnerableVersion($versionObj) {
   Key $results = @()
    $ver = [version]$versionObj.Version

$keyName
    switch -Wildcard ($versionObj.Key) {
        "v2.0*" {
 Version    = $version
       if ($ver -ge [version]"2.0.0" -and $ver -lt [version]"3.0.50727.8976") {
 Release    = $release
             $results += "❌ $($versionObj.Key) versión $ver es vulnerable (rango: 2.0.0 - 3.0.50727.8976)" Path       = $installPath
            }
        }
    }

    "v3.0*" {
            if ($ver -ge [version]"2.0.0" -and $ver -lt [version]"3.0.50727.8976"return $dotNetVersions
}

# Comprobación contra rangos vulnerables
function Check-VulnerableVersion($versionObj) {
    $results = @()
    $ver = [version]$versionObj.Version

    switch -Wildcard ($versionObj.Key) {
          "v2.0*" {
      $results += "❌ $($versionObj.Key) versión $ver es vulnerableif (rango: $ver -ge [version]"2.0.0" -and $ver -lt [version]"3.0.50727.8976")" {
            }
    $results +=   }
        "v3.5" {"❌ $($versionObj.Key) versión $ver es vulnerable (rango: 2.0.0 - 3.0.50727.8976)"
            }
        }
    if  ($ver -ge [version]"10v3.0.0*" {
            if ($ver -ge [version]"2.0.0" -and $ver -lt [version]"103.0.1024050727.204028976") {
                $results += "❌ $($versionObj.NET 3.5 Key) versión $ver es vulnerable (rango: 102.0.0 - 103.0.1024050727.204028976)"
            }
 elseif ($ver -lt [version]"3.0.30729.8959") {
   }
        "v3.5" {
    $results += "❌ .NET 3.5.1 versión $ver es vulnerableif (< 3$ver -ge [version]"10.0.30729.8959)"
     0" -and $ver -lt [version]"10.0.10240.20402") {
       }
        }
 $results += "❌ .NET 3.5 versión $ver "v4\Full" {
    es vulnerable (rango: 10.0.0 - 10.0.10240.20402)"
        # Usar Release para versiones 4.x
    } elseif ($ver -lt [version]"3.0.30729.8959") {
        $release = $versionObj.Release
      $results += "❌ .NET 3.5.1 versión if$ver es vulnerable ($release) {< 3.0.30729.8959)"
            }
    # Obtener versión por Release}
        "v4\Full" {
       $versionInfo = switch ($release) {
 # Usar Release para versiones 4.x
            $release = $versionObj.Release
 { $_ -ge 533325 } { "4.8.1" }
    if ($release) {
              { $_ -ge# 528040Obtener }versión { "4.8" }por Release
                $versionInfo = switch ($release) {
 $_   -ge 461814 } { "4.7.2" }
                    { $_ -ge 461308533325 } { "4.78.1" }
                    { $_ -ge 460798528040 } { "4.78" }
                    { $_ -ge 394802461814 } { "4.67.2" }
                    default{ $_ -ge 461308 } { "Desconocida4.7.1" }
                }

    { $_ -ge 460798 }        # Rango { "4.7.0 a 4.7.04081.03" }
                if ($release -ge 460798 -and{ $release$_ -lt 528040) {ge 394802 } { "4.6.2" }
                    $resultsdefault +={ "❌ .NET Framework 4.x (Release $release) versión $versionInfo es vulnerable (rango 4.7.0 a 4.8 sin parche)"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.8x versión $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.0102)"
                }

            }
    # Rango 4.8.0  }
a 4.8.09214.01
            }

    if ($results.Count -eq 0$versionInfo -eq "4.8.1" -and $release -lt 533325) {
        return "✅ $($versionObj.Key) versión $($versionObj.Version) no es vulnerable"
     $results }+= else {
        return $results"❌ .NET 4.8.1 versión $versionInfo (release $release) es vulnerable (< 4.8.09214.01)"
    }
}

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

Image Removed

Puede realizar la misma comprobación por línea de comandos:

Bloque de código
titlePowershell
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;

Image Removed

Solución

Paso 1

El primer paso consiste en instalar las actualizaciones de Windows pendientes o comprobar que está actualizado.

  1. Haz clic en el botón de inicio (ícono de Windows) o presiona Win + I para abrir Configuración.
  2. Ve a Actualización y seguridad (o Windows Update, dependiendo de la versión).
  3. Haz clic en Buscar actualizaciones.

Image Removed

Paso 2

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.

...

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

  1. Haz clic en el botón de inicio (ícono de Windows) o presiona Win + I para abrir Configuración.
  2. Ve a Actualización y seguridad (o Windows Update, dependiendo de la versión).
  3. Haz clic en Buscar actualizaciones.

Image Added

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)

Image Added

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.

Sin embargo, es posible tener distintas versiones de .Net Framework a la vez en el equipo. Esto sucede por ejemplo, al instalar un programa que necesita una versión específica de net framework y que lo instala durante el asistente de instalación. En casos como éste el componente .Net framework no se actualiza automáticamente.


Nota

Las distintas versiones de .NET Framework funcionan como productos independientes, esto es, se ha de escoger el instalador adecuado;

  • para actualizar .net 4.7 → descárgese el instalador de net 4.7
  • para actualizar .net 4.8 → descárgese el instalador de net 4.8
  • para actualizar .net 4.8.1 → descárgese el instalador de net 4.8.1

el instalador de 4.8.1  NO actualiza 4.8, ni 4.7 ni ninguna otra versión anterior

...

.


Por ello, para protegerse de este ataque siga estos pasos:

  1. Compruebe que tiene su sistema operativo actualizado.
  2. Vaya a la lista de programas instalados y compruebe cuál es la versión obsoleta (véase Comprobar si estoy afectado por la vulnerabilidad)
  3. Si necesita el componente; descargue de la página oficial la versión correspondiente a net framework e instálela.
    • Página oficial; https://dotnet.microsoft.com/es-es/download/dotnet-framework
    • Selecciona la versión que deseas instalar (por ejemplo, .NET Framework 4.8.1).
    • Haz clic en "Runtime" si solo necesitas ejecutar apps, si eres programador, selecciona "Developer Pack" en su lugar.
    • Descarga el instalador adecuado para tu arquitectura:
      • x86 para 32 bits
      • x64 para 64 bits
    • Ejecute como administrador el fichero descargado. Sigue las instrucciones del instalador.
  4. Verifique en la lista de programas instalados que la versión obsoleta ha desaparecido. Si no es así, desinstálela manualmente.



Buenas prácticas

Seguir las prácticas de seguridad recomendadas ayuda a mitigar o eliminar este problema y otros de igual naturaleza que puedan surgir en el futuro.

  • No deshabilite las actualizaciones de seguridad de Windows.
    • En equipos de aulas desarrolle un plan de actualizaciones que incluya al menos una actualización mensual poco después de la liberación de actualizaciones de Microsoft.
  • Instale el antivirus corporativo ESET en todos sus equipos; puestos de trabajo y servidores.
    • El antivirus nos permite enviarle notificaciones que le afectan sobre problemas de seguridad de sus equipos.

Incluir página
Pie de pagina manuales
Pie de pagina manuales