- Se señala que las alertas excesivas de Dependabot terminan haciendo que los desarrolladores pierdan tiempo en lugar de resolver problemas reales de seguridad
- Como ocurrió en el ecosistema de Go, se generan miles de PR y advertencias incluso en repositorios no afectados, lo que provoca confusión
- Al usar una GitHub Action basada en govulncheck, se puede detectar solo el código realmente vulnerable y eliminar alertas innecesarias
- Las actualizaciones de dependencias se gestionan de forma más segura y eficiente mediante pruebas periódicas y verificación de versiones recientes que con PR automatizados
- Este enfoque es importante para reducir la fatiga por alertas (alert fatigue) y aliviar la carga de los mantenedores de código abierto
Problemas de Dependabot
- Dependabot genera en masa alertas de seguridad y PR automáticos, lo que dificulta que los desarrolladores distingan los problemas realmente importantes
- Incluso una modificación menor en el paquete de Go
filippo.io/edwards25519 generó miles de PR
- También se enviaron alertas de seguridad erróneas a repositorios no afectados, como Wycheproof
- Las alertas incluyen puntajes CVSS incorrectos y métricas de compatibilidad bajas, creando una preocupación innecesaria
- Se indica que este exceso de notificaciones reduce la confianza y la eficiencia de la respuesta de seguridad
Una alternativa con govulncheck
- La base de datos de vulnerabilidades de Go ofrece metadatos detallados a nivel de versión, paquete y símbolo
- Por ejemplo, la vulnerabilidad
GO-2026-4503 solo afecta al símbolo Point.MultiScalarMult
- govulncheck usa análisis estático para detectar únicamente el código vulnerable que realmente puede ser llamado
- Si se usa junto con
go mod why, permite determinar con precisión si una dependencia indirecta tiene impacto
- Según el resultado del análisis, aunque exista una vulnerabilidad, no se emite una alerta si el código no llama a ese símbolo
- Se puede integrar fácilmente mediante la CLI (
govulncheck -json) o la API de Go (golang.org/x/vuln/scan)
Sustitución con GitHub Actions
- En lugar de Dependabot, se puede configurar una GitHub Action de govulncheck para ejecutar revisiones automáticas todos los días
- Solo envía alertas cuando se detectan vulnerabilidades reales
- Como no genera PR automáticos, los desarrolladores pueden concentrarse en los problemas de seguridad importantes
- Reducir las alertas erróneas ayuda a aliviar la fatiga por alertas de seguridad (alert fatigue) y mejora la calidad de la respuesta
- También elimina el problema de enviar PR innecesarios a mantenedores de código abierto
Cómo gestionar las actualizaciones de dependencias
- Las dependencias deben administrarse en bloque según el ciclo de desarrollo de cada proyecto
- Se deben ejecutar pruebas diarias con las versiones más recientes, pero realizar las actualizaciones reales solo cuando sea necesario
- En Go se pueden probar las versiones recientes con
go get -u -t ./..., y en npm con el comando npm update
- Este enfoque permite asegurar tanto la rapidez de respuesta ante vulnerabilidades de seguridad como la estabilidad
- Las pruebas con versiones recientes ayudan a detectar antes los problemas de compatibilidad
- También evita que se desplieguen de inmediato dependencias que contengan código malicioso
- Con geomys/sandboxed-step, es posible ejecutar de forma aislada con gVisor en un entorno de CI
Conclusión y contexto de apoyo
- La automatización de Dependabot a menudo genera más ruido (noise) que seguridad real
- Un enfoque basado en govulncheck y pruebas periódicas es una forma más precisa y sostenible de gestionar la seguridad
- El mantenimiento de código abierto del autor del artículo continúa gracias al apoyo, a través de la organización Geomys, de Ava Labs, Teleport, Tailscale y Sentry, entre otros
- Este modelo contribuye al mantenimiento estable del ecosistema open source y a mejorar la calidad de la seguridad
1 comentarios
Opiniones de Hacker News
Pero una herramienta que solo compara números de versión con una base de datos de vulnerabilidades no puede determinar si el código real está expuesto a esa vulnerabilidad, así que genera mucho ruido
Una herramienta que me impresionó recientemente es CodeQL. Se puede ejecutar en GitHub Advanced Security y rastrea el flujo real del código para mostrar visualmente la ruta completa desde una entrada hasta un uso riesgoso
Gracias a eso, ofrece información sobre la que sí se puede actuar y tiene pocos falsos positivos. Claro, en lenguajes dinámicos como Python puede haber código que evada la detección, pero en la mayoría de los casos sigue siendo bastante útil
Empezaron a aparecer comentarios del tipo “agrega una variable intermedia inútil” solo para evitar advertencias de CodeQL. Se siente como una herramienta sobreajustada a los datos
debug, y llegan demasiados reportes basura de ReDoS. En algunos casos hasta les asignan un CVE, y dan ganas de abandonar por completo el ecosistema de JSEstamos usando una GitHub Action que hicimos para avisar cuando en un PR se agrega una llamada vulnerable.
Si lo usas junto con el automerge de Dependabot, también es una buena combinación para mantener codebases de JS
Si las pruebas son buenas, a veces descubres bugs en versiones nuevas, pero en el proceso eso también termina en contribuciones a open source. Es molesto, pero ayuda a formar un buen hábito
Las notificaciones por email son molestas y tampoco me gusta que se acumulen PRs. Preferiría atenderlo concentradamente en ciertos horarios
dependabot.ymlpuedes ajustar la frecuencia de ejecución y la cantidad de PRsConsulta la documentación oficial
Incluso puedes ir corrigiéndolo tú mismo para reducir la cantidad de issues
Personalmente recomiendo Renovate. Soporta más lenguajes y más opciones de automerge
El problema de fondo de Dependabot es que confunde la gestión de dependencias con un problema de seguridad.
Una vulnerabilidad en una función que nunca se llama no es un tema de seguridad, sino ruido
En Python, siento que
pip-audit --desces mejor que Dependabot.Hasta que exista un análisis estático perfecto, una revisión manual trimestral podría ser incluso más segura
Ahí es donde aparece la brecha entre la seguridad real y las prácticas de seguridad
La mayoría de los CVE en realidad no afectan, pero las empresas se esfuerzan por llevar a 0 la cantidad de vulnerabilidades en imágenes de contenedor
Además, cuando actualizas dependencias, inevitablemente aparecen CVE nuevos. Eso pasa porque la mayoría del software no hace backport de parches
Cuantos más repositorios tengas y más variados sean los lenguajes, menos realista es agregar un workflow de CI perfecto para cada caso
No es perfecto, pero creo que sigue siendo mucho mejor que no hacer nada
¿Genera los CVE automáticamente?
La base de datos de vulnerabilidades de GitHub está más enfocada en cantidad que en calidad, y Dependabot funciona como un spammer tonto de alertas
Si el problema solo ocurre cuando llamas una función de forma incorrecta, probablemente el código ya ni siquiera estaba funcionando
El escaneo de imágenes de contenedor en GCP le lanza a Vanta un montón de alertas de CVE, pero la mayoría no se pueden corregir o en realidad son rutas que no se usan
Me pregunto si habrá alguna herramienta que haga este tipo de filtrado basado en contexto
Los resultados en general son positivos, pero con un codebase grande y muchas dependencias sigue siendo difícil bajar la cantidad de CVE