Elegiste 19 paquetes. Se instalaron 1.328.
Medido con DepSentinel sobre el package-lock.json de un proyecto React de prueba. Cada punto es un paquete que se instala en tu máquina y en tu CI, y cada uno puede ejecutar código al instalarse. Casi nadie ha leído ninguno.
- 19 los que escribiste en
package.json - 3 ejecutan scripts en tu máquina al instalarse
- 1.306 que nunca elegiste
DepSentinel los revisa todos en segundos.
Lo que busca en cada escaneo
Siete comprobaciones, todas con una explicación y una forma concreta de arreglarlas.
- Paquetes maliciosos conocidos
- Cada dependencia se contrasta con OSV (los avisos
MAL-*de OpenSSF) y con una base local firmada que sigue funcionando sin conexión. Reconoce casos comoevent-stream@3.3.6,crossenvo las versiones secuestradas deua-parser-js. - Typosquatting
- Nombres casi idénticos a los populares:
reactt,lodassh,reqeusts. Mide la distancia de edición y la antigüedad del paquete para no marcar los legítimos. - Scripts de instalación peligrosos
- Lee
preinstall,installypostinstall. Con--deepdescarga el paquete, comprueba su hash contra el lockfile y revisa el código que esos scripts ejecutan: descargas remotas, shells inversas, robo de credenciales. - Vulnerabilidades conocidas
- CVE y GHSA vía OSV, con severidad CVSS y la versión que lo corrige.
depsentinel fixsube las dependencias directas y fija las acciones de GitHub a un SHA. - Dependencias abandonadas
- Paquetes sin versiones desde hace años, versiones deprecadas o retiradas, y paquetes que ya no existen en el registry.
- Cambios raros de versión o mantenedor
- Versiones
99.xtípicas de dependency confusion, publicadores o mantenedores nuevos justo en la versión reciente, y tarballs que no coinciden con el lockfile. - Más allá de npm
- PyPI, Go, Dockerfiles y GitHub Actions:
curl | shen un Dockerfile, acciones sin fijar a un SHA,pull_request_targetcon checkout del PR, inyección de comandos en workflows.
De cero a bloquear en el CI
Tres pasos. El primero y el segundo no necesitan cuenta ni servidor.
-
Instálalo
go install github.com/AlejandroMolines/depsentinel/cmd/depsentinel@latestUn único binario sin dependencias. También hay imagen de Docker y binarios en cada release, con su suma de comprobación.
-
Escanea tu proyecto
cd mi-proyecto depsentinel scanDetecta solo los lockfiles, Dockerfiles y workflows que encuentre.
depsentinel report --html --openabre el panel con el detalle de cada paquete. -
Que el CI lo exija
- uses: AlejandroMolines/depsentinel/action@v1 with: fail-on: highComenta el resultado en cada pull request y falla el build si hay riesgo alto. Una excepción solo vale si lleva justificación escrita.
🛡️ DepSentinel · risk high
2 high or critical dependency findings · 1328 packages analyzed (npm, GitHub Actions)
| Severity | Package | Rule | Detail |
|---|---|---|---|
| 🟠 high | lodash@4.17.15 | vulnerability | Command Injection in lodash (fixed in 4.17.21) |
| 🟠 high | some-org/deploy@main | action-pinning | Action pinned to a mutable branch (main) |
| 🟡 medium | reactt@1.0.0 | typosquat | Possible typosquatting of «react» |
How to fix
False positive? Ignore with justification
The check fails: 2 finding(s) of severity high or higher.
This is what the comment DepSentinel leaves (and updates, without duplicating) on every pull request looks like.
Qué sale de tu máquina, y qué no
DepSentinel funciona en tu equipo o en tu CI. No hay cuenta, no hay servidor propio y no hay telemetría.
Sale, solo si hay conexión
- El nombre y la versión de cada paquete público, hacia
api.osv.dev, para consultar avisos de seguridad. - El nombre del paquete, hacia
registry.npmjs.org,pypi.orgoproxy.golang.org, para leer fechas y mantenedores.
No sale nunca
- Tu código, tu lockfile completo, las rutas de tu equipo, tokens y variables de entorno.
- Los paquetes instalados desde git, rutas locales o URLs.
Tú decides
--offline no abre ninguna conexión y usa solo las reglas locales. --no-osv y --no-registry apagan cada fuente por separado, y DEPSENTINEL_OSV_URL apunta a un espejo interno. La base de datos de paquetes maliciosos se descarga con depsentinel db update y se verifica con una firma Ed25519 antes de usarla. Solo dos comandos que tú lanzas a propósito salen a otros sitios: db update descarga el feed del repositorio y fix consulta api.github.com para resolver el SHA de una acción.
Gratis. Siempre.
Gratis para personas, proyectos de código abierto y educación. Las donaciones aún no están disponibles: cuando lo estén, se usarán para el dominio, los servidores del feed y las auditorías de seguridad. Las empresas podrán patrocinar, pero ningún patrocinio ni donación desbloqueará funciones.
Cada mes publicamos cuánto entra y en qué se gasta: ver las cuentas.