YAML es omnipresente en configuraciones y DevOps, pero su flexibilidad trae riesgos. Un uso descuidado puede introducir vulnerabilidades, errores en producción o archivos difíciles de mantener.
Algunas librerías (por ejemplo yaml.load
en Python) pueden ejecutar código arbitrario.
!!python/object/apply:os.system ["rm -rf /"]
Si se procesa con yaml.load
, el comando se ejecutará en el sistema.
Mitigación: usa safe_load()
y evita procesar YAML no confiable sin validación.
Un atacante puede alterar configuraciones para habilitar debug o escalar privilegios.
debug: true
admin: true
Mitigación: valida valores críticos contra esquemas (JSON Schema, OpenAPI) e integra linters en CI/CD.
Incorrecto:
database:
user: root
password: 1234
Mitigación: usa variables de entorno o gestores de secretos (Vault, Kubernetes Secrets).
app:
name: MiApp
port: 8080
Un espacio de más puede invalidar todo el archivo.
respuesta: yes # Interpretado como true
Usa comillas para valores dudosos: respuesta: "yes"
.
Los YAML extensos con múltiples anclas y alias son difíciles de revisar, especialmente en Kubernetes.
Solo se admite #
en una línea; no hay comentarios multilínea.
Parsear YAML suele ser más lento que JSON, por lo que no es ideal para intercambio de datos en tiempo real.
safe_load
y equivalentes).En resumen, YAML es potente pero requiere disciplina. Riesgos como ejecución de código, exposición de credenciales o errores de indentación pueden mitigarse con lectores seguros, validación, linters y convenciones claras.