Seguridad y limitaciones de YAML

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.

16.1 Riesgos de seguridad

a) Ejecución de código malicioso

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.

b) Inyección de datos

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.

c) Exposición de credenciales

Incorrecto:

database:
  user: root
  password: 1234

Mitigación: usa variables de entorno o gestores de secretos (Vault, Kubernetes Secrets).

16.2 Limitaciones técnicas

a) Sensibilidad a la indentación

app:
   name: MiApp
  port: 8080

Un espacio de más puede invalidar todo el archivo.

b) Ambigüedad en valores

respuesta: yes  # Interpretado como true

Usa comillas para valores dudosos: respuesta: "yes".

c) Archivos grandes y confusos

Los YAML extensos con múltiples anclas y alias son difíciles de revisar, especialmente en Kubernetes.

d) Comentarios limitados

Solo se admite # en una línea; no hay comentarios multilínea.

e) Rendimiento

Parsear YAML suele ser más lento que JSON, por lo que no es ideal para intercambio de datos en tiempo real.

16.3 Buenas prácticas de seguridad

  • Usa lectores seguros (safe_load y equivalentes).
  • Valida contra esquemas para garantizar tipos y valores.
  • No almacenes credenciales en texto plano.
  • Versiona los YAML, pero excluye datos sensibles.
  • Integra validadores/linting en CI/CD.

16.4 Buenas prácticas ante limitaciones

  • Divide archivos grandes en módulos manejables.
  • Documenta cada sección con comentarios claros.
  • Evita ambigüedades con comillas y nombres consistentes.
  • Aplica el estilo uniforme definido (ver Tema 15).
  • Usa JSON cuando el rendimiento sea crítico.

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.