· 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:
- Desbordamiento de búfer: se escribe más allá del espacio reservado, y se pisan datos vecinos.
- Uso después de liberar: se usa memoria que ya se devolvió al sistema, y que quizá ya contiene otra cosa.
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
unsafequeda 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
- A proactive approach to more secure codeMicrosoft Security Response Center, 2019
- Software Memory SafetyNSA, 2022
- Rust in Android: move fast and fix thingsGoogle, 2025