Détecter les vulnérabilités dans les dépendances de son projet
La gestion des dépendances dans un projet est quelque chose de complexe. Il y a autant de gestionnaires qu'il y a de langages et leur politique de gestion des versions varient beaucoup. Par exemple, composer, le gestionnaire de dépendances de PHP ne fait pas apparaître le numéro de version mineure tandis que npm (NodeJS) le fait. Par ailleurs, dès lors qu'un projet est installé et qu'il n'est pas à jour alors il peut avoir un décalage entre les déclarations et la réalité. Il n'est donc pas fiable de regarder ces déclarations de versions pour analyser un projet.
Les gestionnaires de dépendances génèrent (presque) tous des fichiers de lock qui listent les versions installées. Open Source Vulnerability Detector aka osv-detector s'appuie sur ces fichiers pour lancer des détections de vulnérabilités. Il s'agit d'un projet écrit en Go, léger et très simple d'utilisation. Les sources sont disponibles sur Github et les binaires y sont également publiés.
Pour l'utiliser, il suffit de lui passer au moins un fichier de lock et il s'occupe du reste.
$ osv-detector Gemfile.lock package-lock.json
Si des vulnérabilités sont détectées alors elles sont listées et le programme retourne un code de sortie à 1
. Les vulnérabilités sont accompagnées d'un lien pour en apprendre un peu plus comme par exemple les versions corrigées.
Loaded the following OSV databases:
npm (2774 vulnerabilities, including withdrawn - last updated Fri, 13 Jan 2023 20:30:13 GMT)
package-lock.json: found 932 packages
Using db npm (2774 vulnerabilities, including withdrawn - last updated Fri, 13 Jan 2023 20:30:13 GMT)
ansi-html@0.0.7 is affected by the following vulnerabilities:
GHSA-whgm-jr23-g3j9: Uncontrolled Resource Consumption in ansi-html (https://github.com/advisories/GHSA-whgm-jr23-g3j9)
ansi-regex@3.0.0 is affected by the following vulnerabilities:
GHSA-93q8-gq69-wqmw: Inefficient Regular Expression Complexity in chalk/ansi-regex (https://github.com/advisories/GHSA-93q8-gq69-wqmw)
[...]
J'ai packagé osv-detector dans une image docker pour permettre de l'utiliser dans le cadre d'une intégration continue.
$ docker run -it -v "$(pwd):/app" deblan/osv-detector Gemfile.lock package-lock.json
osv-detector est un outil très pratique pour analyser rapidement les dépendances d'un projet et identifier rapidement les vulnérabilités. Il s'intègre parfaitement dans une chaîne de production et peut ainsi aider à s'assurer que le code est sécurisé.