Rust permite eludir restricciones de vida mediante asignación covariante

Fuentes: Rust allows bypassing lifetime requirements via covariant field assignment

El proyecto Rust ha identificado una vulnerabilidad crítica en su sistema de verificación de préstamos (borrow checker) que permite eludir las restricciones de vida (lifetime) de los campos de una estructura mediante asignación covariante. Este fallo, clasificado como una brecha de seguridad (I-unsound), permite que el compilador acepte código que genera comportamientos indefinidos, como el uso de punteros a memoria liberada o la lectura de datos corruptos, lo cual compromete la seguridad de la aplicación.

El problema surge cuando un campo de una estructura con una restricción de vida estricta (por ejemplo, 'static') se asigna a un valor que no cumple dicha restricción. Aunque el compilador debería rechazar esta operación, la lógica de unificación de tipos no verifica las restricciones de vida en este contexto específico. Esto ha permitido que versiones antiguas de Rust, desde la 1.4 hasta la actual, contuvieran este error sin ser detectadas, generando comportamientos erráticos que incluyen el uso de memoria liberada (stack-use-after-scope) y la impresión de datos corruptos.

La comunidad de desarrolladores ha documentado múltiples ejemplos que ilustran esta indefinición, mostrando cómo la asignación covariante puede crear referencias inválidas que persisten más allá de su alcance original. La corrección de este fallo es prioritaria para garantizar la seguridad de memoria en Rust, ya que las restricciones de vida son fundamentales para prevenir fugas de memoria y errores de acceso a datos. Este issue ha sido etiquetado como de alta prioridad (P-high) y está siendo revisado por el equipo de tipos de Rust para determinar la mejor solución técnica.