Ataque de Deserialización Yaml (DES-Yaml); Explicación y PoC
Un ataque de deserialización YAML (DES-YAML) es una vulnerabilidad que puede surgir en aplicaciones Python que utilizan YAML (Yet Another Markup Language) para convertir objetos en un formato que se pueda almacenar o transmitir y viceversa.
Este problema de seguridad ocurre cuando un atacante logra manipular los datos YAML que son procesados por una función de deserialización en la aplicación. Si el código de la aplicación no verifica de manera adecuada la validez y la integridad de los datos YAML recibidos, existe la posibilidad de que el atacante pueda introducir código malicioso en el objeto que será deserializado.
Una vez que el objeto se ha deserializado, cualquier código malicioso incluido en él puede ser ejecutado dentro del contexto de la aplicación. Esto podría permitir al atacante tomar el control del sistema, acceder a información sensible o incluso ejecutar código de forma remota.
La deserialización YAML implica reconstruir objetos de Python a partir de los datos YAML. Si los datos YAML no son validados adecuadamente por la aplicación antes de este proceso, un atacante puede introducir código malicioso en los objetos deserializados. Este código malicioso puede ejecutarse en el contexto de la aplicación una vez que se completa la deserialización.
El impacto de un ataque de deserialización YAML puede ser grave y variado. Desde la ejecución de código arbitrario dentro de la aplicación hasta la toma completa del control del sistema, dependiendo de la naturaleza del código malicioso y los privilegios de la aplicación.
Para mitigar estos riesgos, es esencial implementar medidas de seguridad sólidas. Esto incluye validar y filtrar cuidadosamente los datos YAML antes de deserializarlos, evitando la deserialización automática de objetos no confiables y aplicando técnicas de mitigación de riesgos como la limitación de recursos para prevenir ataques de denegación de servicio (DoS).
Además, la conciencia sobre la seguridad en el desarrollo de software y el seguimiento de buenas prácticas son fundamentales. Los desarrolladores deben estar al tanto de los riesgos asociados con la deserialización YAML y utilizar bibliotecas y marcos de trabajo que implementen medidas de seguridad robustas en este proceso. La capacitación y la concientización sobre la seguridad son cruciales para abordar estos riesgos de manera efectiva en el desarrollo de aplicaciones Python.
La aplicación funciona cargando la cadena codificada Base64 para ser procesada por la aplicación y usar YAML para analizar el valor de la clave para mostrar el contenido en la aplicación.
Las inyecciones de YAML en Python es posible al invocar un subproceso que nos permitirá ejecutar comandos.
Vemos como hemos sido capaz de inyectar comandos a través del objeto YAML, y a iniciado el subproceso para ejecutar el comando «id».
