Ir al contenido
  1. Posts/

Nunca Uses yaml.load() en Python: El Riesgo de Seguridad Que Los LLMs Perpetúan

··234 palabras·2 mins·

🔓 yaml.load() es una Puerta Trasera en Tu Código
#

Los asistentes de IA generan yaml.load() con frecuencia porque aparece en código legacy — y eso es un problema de seguridad serio. ⚠️

🚨 ¿Por Qué es Peligroso?
#

yaml.load() no solo parsea texto. Puede ejecutar objetos Python embebidos en el YAML:

# PELIGROSO - puede ejecutar código arbitrario
import yaml
data = yaml.load(untrusted_input)  # ❌

# SEGURO
data = yaml.safe_load(untrusted_input)  # ✅

Si alguien controla el archivo YAML (config externo, entrada de usuario), puede ejecutar comandos en tu máquina.

✅ La Solución
#

Siempre usa yaml.safe_load() — solo soporta tipos YAML estándar (mappings, listas, strings, números, booleans, null) y rechaza cualquier cosa que intente ejecutar código.

🔍 Detectar el Problema Automáticamente
#

Usa Bandit para escanear tu codebase:

pip install bandit
bandit -r ./src

Bandit analiza Python contra 60+ reglas CWE y detecta este anti-patrón (B506).

💡 Explicación en pocas palabras
#

yaml.load() es una función insegura de Python que permite ejecutar código Python arbitrario embebido en archivos YAML. Los modelos de IA la generan frecuentemente porque abunda en código legacy. La solución es simple: sustituirla siempre por yaml.safe_load(). Para proyectos existentes, Bandit puede auditar automáticamente el código generado por IA en busca de este y otros 60+ patrones inseguros comunes.

Más información en el link 👇

También publicado en LinkedIn.
Juan Pedro Bretti Mandarano
Autor
Juan Pedro Bretti Mandarano