· 4 min de lectura · Por Grover Cordova

El 70 %: qué es la seguridad de memoria y por qué importa

La cifra de Microsoft, explicada: qué son estos fallos, cómo se ven en el código y qué cambia con Rust.

En 2019, Microsoft publicó un dato incómodo: alrededor del 70 % de los CVE que asigna cada año son fallos de seguridad de memoria. No son errores de un equipo descuidado, sino el resultado de décadas de software en C y C++, escrito por excelentes ingenieros.

Google vio un patrón parecido, y la NSA citó ambos casos al recomendar lenguajes seguros en memoria.

Qué es un fallo de memoria

Un programa guarda datos en memoria y accede a ellos por su dirección. Hay un fallo cuando lee o escribe donde no debe. Dos ejemplos clásicos:

1. Reservasstu datos es válido2. Liberasslibres sigue apuntando3. Otro la reutilizasdato ajenos lee datos ajenos
El puntero parece válido, pero la memoria ya pertenece a otra parte del programa.

Este código en C compila, aunque es incorrecto:

char *s = malloc(16);
free(s);
s[0] = 'x'; // uso después de liberar

Un atacante que controle lo que ocupa esa memoria puede llegar a leer datos o a ejecutar su propio código. Hay más fallos de esta familia, y los ilustramos uno por uno en Los 7 fallos de memoria más comunes.

Qué cambia con Rust

La misma idea no compila en Rust:

fn main() {
    let r;
    {
        let s = String::from("hola");
        r = &s;
    } // `s` se libera aquí
    println!("{r}"); // error[E0597]: `s` does not live long enough
}

El error se detecta antes de ejecutar el programa, sin importar lo cansado que estuviera quien lo escribió. Es la diferencia entre pedir cuidado y hacer imposible el error.

Los resultados

Android es el caso más documentado. Google informa que los fallos de memoria bajaron del 20 % de sus vulnerabilidades por primera vez en 2025, a medida que el código nuevo dejó de escribirse en C y C++.

Los límites

Rust no resuelve todo:

  • El código marcado como unsafe queda bajo tu responsabilidad. Android tuvo un fallo de este tipo (CVE-2025-48530), detectado antes de su publicación.
  • Los errores de lógica, de autorización y las dependencias comprometidas siguen siendo posibles.
  • Java, C#, Go y Python también son seguros en memoria, gracias a un recolector de basura que tiene su propio costo. Esta cifra describe sobre todo a C y C++.

La seguridad nunca depende de una sola decisión. Pero eliminar una clase entera de errores desde el diseño es de las pocas mejoras que no se desgastan con el tiempo.

Fuentes

  1. A proactive approach to more secure codeMicrosoft Security Response Center, 2019
  2. Software Memory SafetyNSA, 2022
  3. Rust in Android: move fast and fix thingsGoogle, 2025

Construye mejor software.

Seguridad, eficiencia y oficio, con fuentes y en español.