Informe CISA: Riesgos de seguridad de la memoria en proyectos críticos de código abierto
Los proyectos de código abierto son la piedra angular de la infraestructura del software moderno, que lo impulsa todo, desde los navegadores web hasta las aplicaciones móviles y los servicios en la nube. Estos proyectos, a los que contribuyen y mantienen comunidades de todo el mundo, permiten la innovación y la colaboración a una escala sin precedentes. Sin embargo, un estudio reciente de la Agencia de Ciberseguridad y Seguridad de las Infraestructuras (CISA) de Estados Unidos arroja luz sobre un problema crítico: la seguridad de la memoria en el software de código abierto.
Conclusiones de CISA sobre proyectos de código abierto
En colaboración con la Oficina Federal de Investigación (FBI) y organizaciones de ciberseguridad de Australia (ASD, ACSC) y Canadá (CCCS), CISA ha publicado un informe sobre 172 proyectos clave de código abierto. El objetivo de esta investigación es determinar su susceptibilidad a los fallos de memoria, como continuación del "Case for Memory Safe Roadmaps" publicado en diciembre de 2023. El informe subraya la importancia de escribir código seguro en memoria para mejorar la seguridad del software.
Comprender la seguridad de la memoria
La seguridad de la memoria se refiere a la capacidad de los lenguajes de programación para evitar errores comunes relacionados con la memoria, como desbordamientos de búfer y punteros colgantes. Los lenguajes seguros gestionan automáticamente la asignación y retirada de memoria, lo que reduce significativamente el riesgo de errores y minimiza la carga para los desarrolladores.
Ejemplos de lenguajes seguros para la memoria
Rust: Conocido por su comprobador de préstamos, Rust elimina las carreras de datos y garantiza un acceso seguro a la memoria.
Golang, Java, C#, Python: Estos lenguajes gestionan la memoria a través de la recolección de basura, recuperando automáticamente la memoria liberada para evitar su explotación.
Lenguajes no seguros para la memoria
Lenguajes como C, C++, Objective-C, Assembly, Cython y D no incorporan mecanismos de gestión de memoria. Los desarrolladores deben gestionar manualmente la memoria, lo que aumenta la probabilidad de errores y vulnerabilidades.
El código fuente abierto ampliamente utilizado no es seguro
El informe de CISA revela que más de la mitad de los proyectos críticos de código abierto analizados contienen código inseguro para la memoria. Entre las principales conclusiones se incluyen:
- El 52% de los proyectos contienen código escrito en lenguajes poco seguros para la memoria.
- El 55% del total de líneas de código (LdC) de estos proyectos no son seguras en memoria.
- Los proyectos más grandes tienen una cantidad desproporcionada de código inseguro en memoria, con los diez proyectos más grandes superando el 26% de LoC inseguro en memoria.
- La proporción media de LoC no seguros en memoria en estos grandes proyectos es del 62,5%, con cuatro proyectos que superan el 94%.
- Incluso los proyectos escritos en lenguajes seguros para la memoria dependen a menudo de componentes escritos en lenguajes no seguros para la memoria.
Algunos ejemplos notables son:
- Linux: Ratio de código no seguro 95%
- Tor: Ratio de código inseguro 93%
- Cromo: Proporción insegura 51
- Servidor MySQL: Ratio de inseguridad 84
- glibc: Ratio 85%
- Redis: Ratio 85
- SistemaD: Ratio 65%
- Electrón: Ratio 47
Retos y recomendaciones
Los desarrolladores de software se enfrentan a importantes retos que a menudo hacen necesario el uso de lenguajes no seguros para la memoria. Estos retos incluyen limitaciones de recursos, requisitos de rendimiento y la necesidad de implementar funcionalidades de bajo nivel como redes, criptografía y funciones del sistema operativo. CISA también destaca el problema de los desarrolladores que desactivan las funciones no seguras para la memoria para cumplir requisitos específicos, lo que aumenta aún más los riesgos.
Para mejorar la seguridad de los proyectos de código abierto, CISA recomienda lo siguiente:
Escribir código nuevo en lenguajes seguros para la memoria: Se prefieren lenguajes como Rust, Java y Go.
Transición de proyectos existentes: Los componentes críticos deben migrarse a lenguajes seguros para la memoria.
Siga prácticas de codificación seguras: Los desarrolladores deben gestionar y auditar cuidadosamente las dependencias.
Pruebas continuas: Realice análisis de estado, análisis dinámicos y pruebas fuzz para detectar y solucionar problemas de seguridad de memoria.
Conclusión
Los resultados de la investigación de CISA ponen de relieve la necesidad crucial de que la comunidad de código abierto dé prioridad a la seguridad de la memoria. Mediante la adopción de lenguajes y prácticas de memoria segura, los desarrolladores pueden reducir significativamente las vulnerabilidades en el software de código abierto, haciéndolo más seguro para todos. A medida que los proyectos de código abierto siguen creciendo en importancia y escala, garantizar su seguridad y fiabilidad es primordial.
Las fuentes de este artículo incluyen un artículo de BleepingComputer.