Monitoreo de CVE
Hay un paquete vulnerable instalado. ¿Algo aquí lo llama?
Todos los escáneres responden a la primera mitad. La segunda es la que decide si merece la pena gastar la tarde de alguien, y una lista de paquetes instalados no puede responderla. SourceAnt ya dispone de un grafo de qué importa y qué llama a qué, así que puede hacerlo.
Dos respuestas, y solo una de ellas es urgente
Cada aviso que coincide con algo que instalas recibe una de estas, junto con el motivo.
reached Algo de lo que escribiste importa o llama a este paquete. El aviso trata de código que realmente ejecutas.
Los archivos que lo nombran vuelven con el veredicto, para que puedas ir a mirar en lugar de fiarte de nuestra palabra.
installed Está declarado, y nada en este repositorio lo nombra. Aun así merece la pena parchearlo algún día. No merece la pena despertar a nadie por ello.
Se mantiene en la lista en lugar de ocultarse, porque un escáner que descarta cosas en silencio es un escáner en el que nadie confía dos veces.
Dependabot te dice que el paquete está ahí. No te dice si algo de tu código llega hasta él, y esa es la pregunta que realmente tiene el ingeniero de guardia.
Cómo lo sabe
El grafo de código ya estaba ahí
SourceAnt indexa qué importa y qué llama a qué. Preguntar a ese índice si algo nombra un paquete convierte una lista de todo lo instalado en la lista más corta de lo que está conectado.
Esto no es un escáner aparte añadido por encima. Es una pregunta más planteada a un grafo que se construyó por otros motivos, y por eso la respuesta llega con los archivos detrás en lugar de una puntuación.
Dónde informa de más
Un paquete cuyo nombre es también una palabra común coincidirá con cosas que no tienen nada que ver con él. Por eso el veredicto nunca viaja solo. Los archivos que lo produjeron vienen con él, así que una respuesta errónea te lleva diez segundos refutar en lugar de una tarde de discusión.
El lockfile, no el manifiesto
Un manifiesto dice qué se pidió. Un lockfile dice qué está instalado. Un aviso trata de lo segundo, así que el lockfile prevalece siempre que existan ambos.
| Ecosistema | Se lee primero | Se recurre a |
|---|---|---|
| npm | package-lock.json | package.json |
| PyPI | poetry.lock | requirements.txt, luego pyproject.toml |
Un manifiesto que no se puede analizar te cuesta un ecosistema de la respuesta, no toda la lectura. Los rangos de versiones se comparan de forma conservadora a propósito, porque un sí erróneo es una alerta que alguien tiene que refutar.
Qué devuelve por aviso
Suficiente para actuar sin abrir otra pestaña, y suficiente para discrepar sin tener que fiarse de la palabra de nadie.
- gravedad y resumen
- Tal como los indica la base de datos de avisos, no como los reformulamos nosotros.
- versión instalada
- Leída de tu lockfile, así que es lo que está instalado y no lo que se solicitó.
- rango afectado
- El rango que indica el aviso, para que puedas comprobar tú mismo la coincidencia.
- primera versión corregida
- Adónde ir, cuando hay adónde ir.
- declarado en
- El archivo que lo incorporó.
- directa o transitiva
- Algo que elegiste tú, o algo que arrastraron tus elecciones. Solo una de las dos está en tus manos cambiar.
Frescura
Caducada según un reloj, porque tu repositorio no es lo que ha cambiado
La mayor parte de lo que SourceAnt conserva deja de ser cierto cuando cambia tu código, así que caduca con respecto al código. Una lectura de avisos no funciona así. Deja de ser cierta cuando cambia la base de datos de avisos, lo cual ocurre continuamente mientras tu repositorio permanece completamente quieto.
Por eso una lectura se conserva durante un número determinado de horas en lugar de hasta el siguiente commit, y el reloj lo configuras tú si estás bajo más presión que la mayoría.
Dos mitades de la misma pregunta
Una pregunta si el código que instalas es seguro. La otra pregunta si el código que instalas es tuyo.
Esta página
Un paquete que instalaste tiene un aviso publicado en su contra, y tu código llega hasta él.
Nombres de la cadena de suministro
Un paquete que creías tuyo lleva un nombre que cualquiera podría publicar, y tu build podría tomar el suyo.
Ponga su sistema en el registro
Ejecute el núcleo abierto en su propia infraestructura, o comience en el espacio de trabajo alojado. El grafo es portátil en ambos casos.