Resumen
hydra.utils.instantiate() resuelve y llama a objetos Python definidos en configuración. Si una aplicación pasa configuración no confiable a instantiate(), un atacante que controle el campo _target_ y sus argumentos puede provocar ejecución de código arbitrario en el proceso que consume dicha configuración.
Hydra no es un servicio de red. La explotación requiere que una aplicación, biblioteca o flujo de trabajo de usuario cargue configuración controlada por el atacante, sobreescrituras de CLI o metadatos de modelo, y los pase a hydra.utils.instantiate().
Detalles
La API de instanciación de Hydra está diseñada para construir objetos y llamar funciones a partir de configuración. Por ejemplo:
component:
_target_: package.module.Class
arg: value
Cuando esta configuración se pasa a hydra.utils.instantiate(), Hydra resuelve _target_ y lo invoca con los argumentos proporcionados.
Este mecanismo está concebido para configuración de aplicación de confianza. Sin embargo, si una entrada no confiable controla _target_, la configuración se convierte en un mecanismo de selección de invocables. Una configuración maliciosa puede seleccionar un invocable capaz de ejecutar código o comandos del sistema operativo y proporcionar argumentos controlados por el atacante.
Este problema pertenece a la misma clase general de vulnerabilidades analizada por Unit 42 para bibliotecas de IA y ML como NVIDIA NeMo, donde metadatos de modelo no confiables eran pasados a la función de instanciación de Hydra. Más información en:
https://unit42.paloaltonetworks.com/rce-vulnerabilities-in-ai-python-libraries/
Hydra 1.3.4 incluye una lista negra para algunos valores peligrosos de _target_. Dicha lista negra es una medida de defensa en profundidad y no constituye un límite de seguridad completo. La lista negra no está presente en el paquete hydra-core 1.3.3 publicado, por lo que esta vulnerabilidad no debe describirse como una evasión de una lista negra de la versión 1.3.3.
Impacto
Un ataque exitoso puede ejecutar código en el proceso que llama a hydra.utils.instantiate(). El impacto queda limitado a los privilegios y el entorno de ese proceso.
El impacto potencial incluye:
- Lectura de archivos, credenciales, variables de entorno o datos accesibles al proceso.
- Modificación de archivos, salidas, checkpoints o estado de la aplicación con permisos de escritura para el proceso.
- Terminación o interrupción del proceso.
Uso afectado
Las aplicaciones y bibliotecas se ven afectadas cuando pasan configuración no confiable o semicon fiable, metadatos de modelo, sobreescrituras de CLI u otros datos controlados externamente a hydra.utils.instantiate() sin restringir qué objetivos pueden instanciarse.
La configuración propia de la aplicación, considerada de confianza, no se ve afectada de la misma manera.
Remediación
Hydra 1.3.4 refuerza el comportamiento existente añadiendo una lista negra de objetivos claramente peligrosos. Representa una mejora de seguridad sustancial, y los usuarios que permanezcan en la línea de versiones 1.3 deben actualizar a 1.3.4 o una versión posterior.
La línea de desarrollo de Hydra 1.4, aún no publicada, utiliza un modelo de instanciación basado en lista blanca que aborda completamente esta clase de vulnerabilidad. La lista blanca debe provenir de código de aplicación de confianza u otro canal confiable, no de la configuración no confiable que se está instanciando.
Las aplicaciones que consuman configuración no confiable o semiconfiable no deben pasarla directamente a hydra.utils.instantiate(). Deben validar los valores de _target_ contra una lista blanca de confianza antes de la instanciación.
