Pesadilla de seguridad de subprocesos: Un fallo misterioso en ARM64, incluso con Rust seguro

2025-01-22
Pesadilla de seguridad de subprocesos: Un fallo misterioso en ARM64, incluso con Rust seguro

Durante la portabilidad del código de E/S de red de Python a Rust en EdgeDB, surgió un fallo misterioso en plataformas ARM64. Inicialmente se sospechó que era un bloqueo, pero la causa raíz resultó ser un comportamiento inseguro de subprocesos en las funciones `setenv` y `getenv`. En ARM64, la biblioteca `openssl-probe` usa `setenv` para establecer variables de entorno, mientras que otro subproceso llama concurrentemente a `getenv`. Esto reubica la matriz `environ`, lo que provoca un fallo. La solución consistió en cambiar el backend TLS de reqwest de rust-native-tls a rustls. Esto destaca cómo incluso en Rust seguro para la memoria, las interacciones con la biblioteca estándar de C todavía pueden introducir problemas de seguridad de subprocesos.