Programme de divulgation des vulnérabilités de Snyk : que se passe-t-il en coulisses ?
Asaf Biton
14 avril 2020
0 minutes de lectureChez Snyk, nous sommes convaincus qu’il est essentiel de sécuriser la communauté open source. C’est pourquoi nous avons lancé notre programme de divulgation responsable des vulnérabilités, qui prend en charge toutes les vulnérabilités détectées dans les packages open source gérés et dans des langages de programmation tels que JavaScript, Java, Python, .NET, Go, Ruby et PHP.
Pourquoi divulguer des vulnérabilités avec Snyk ?
Avec notre démarche de divulgation des vulnérabilités chez Snyk, nous cherchons à rapprocher les chercheurs et les mainteneurs et à atténuer certaines des difficultés et des points de friction liés à la divulgation responsable, comme nous l’avons expliqué dans un précédent article de blog.
Alors, comment rapprochons-nous ces deux parties ? Lorsqu’une nouvelle vulnérabilité est signalée à Snyk, elle est directement transmise à l’équipe de sécurité, qui évalue et vérifie le signalement. En tant qu’entreprise qui place les développeurs au premier plan, nous estimons qu’il faut aussi tenir compte du point de vue des mainteneurs. Nous privilégions un dialogue ouvert et constructif du début à la fin (conformément à notre politique de divulgation des vulnérabilités). Nous cherchons à entendre les deux points de vue pour parvenir à une décision que le mainteneur pourra accepter et qui soit aussi la plus responsable, en nous appuyant sur notre expérience et notre expertise et en prenant en compte tous les facteurs, par exemple le contexte du package, la gravité, la probabilité d’exploitation, etc.
Snyk est également une CNA (autorité de numérotation des CVE) et peut donc attribuer des identifiants CVE aux problèmes qui nous sont signalés. Une fois qu’un correctif est publié (ou, à défaut, si nous n’avons reçu aucune réponse sous 50 jours), nous attribuons un identifiant CVE au problème et publions un avis public. L’attribution d’un CVE à une vulnérabilité est essentielle : elle permet à tout l’écosystème d’être informé du problème et aux développeurs et aux organisations de prendre les mesures nécessaires pour sécuriser leur code.
Tout au long du processus, nous veillons à tenir régulièrement informée la personne qui a initialement signalé la vulnérabilité. Et, surtout, nous lui attribuons le mérite de cette découverte précieuse.
À ce jour, notre programme a permis de divulguer de manière responsable 88 vulnérabilités signalées par différents chercheurs externes. Examinons l’un de ces cas.
Étude de cas : partenariat avec l’université Johns Hopkins
Nous avons récemment collaboré avec des chercheurs de l’université Johns Hopkins pour divulguer à grande échelle 57 vulnérabilités.
Dans le cadre de leur thèse, l’équipe de l’université Johns Hopkins a imaginé une méthode révolutionnaire pour automatiser la détection des vulnérabilités :
"Nous proposons un nouveau concept, appelé Object Property Graph (OPG), pour représenter les interactions entre les objets JavaScript et faciliter la détection des vulnérabilités JavaScript. Un OPG représente sous forme de nœuds dans une structure de type graphe toutes les informations sur les noms d’objets, telles que les noms de variables et les propriétés, les portées des objets et les objets eux-mêmes. Il est ainsi possible de parcourir le graphe pour résoudre un objet pendant l’exécution. L’OPG offre deux principaux types d’utilité : (i) faciliter la construction d’un CFG et d’un DFG de meilleure qualité, c’est-à-dire plus précis, lorsqu’un objet inconnu doit être résolu ; et (ii) représenter les interactions entre objets afin de pouvoir interroger ces interactions pour détecter certains schémas de vulnérabilité.
Nous avons conçu et implémenté un framework, appelé OPGen, qui génère des OPG pour les applications Node.js au cours d’une « exécution simulée ». Nous avons utilisé OPGen pour détecter quatre types de vulnérabilités Node.js : l’injection de commandes, la pollution de prototype, l’exécution de code arbitraire et la traversée de chemin.
À partir du CPG (graphe des propriétés du code), nous ajoutons les nœuds représentant les objets et les arêtes associées. Pour cela, nous simulons l’exécution du code et vérifions si un flux de données part de l’entrée utilisateur et peut atteindre les fonctions puits."
- Song Li, JHU Security Labs
L’équipe nous a ensuite contactés via le formulaire de divulgation des vulnérabilités. Nous lui avons répondu en proposant un appel vidéo pour discuter de la nature et de l’ampleur des découvertes, ainsi que de la manière dont nous pouvions l’aider.
Une fois l’ampleur de la divulgation établie, nous avons créé un dépôt privé partagé dans lequel l’équipe pouvait ajouter ses nouvelles découvertes. Elle nous a communiqué le type de vulnérabilité, le package et les versions concernés, une preuve de concept (POC) et un lien vers le code vulnérable. Le tout dans un format unique, intégré à un pipeline personnalisé pour nos systèmes internes, qui nous a permis de gérer efficacement l’ampleur de cette divulgation.
À l’aide d’un outil interne que nous avons créé, nous avons vérifié les POC concernés, puis évalué la vulnérabilité en détail et collaboré avec les mainteneurs concernés pour la divulguer de manière responsable.
À ce jour, nous avons publié plus de 55 vulnérabilités issues de ce partenariat, notamment des vulnérabilités d’injection de commandes, de traversée de chemin, de pollution de prototype et d’exécution de code. En voici quelques exemples : SNYK-JS-BLAMER-559541, SNYK-JS-BODYMEN-548897 et SNYK-JS-PULVERIZR-560122.
Nous continuons à travailler en étroite collaboration avec l’équipe de JHU Security Labs sur de nouvelles découvertes et des vulnérabilités qui n’ont pas encore été publiées.
Comment commencer ?
La première étape importante consiste à lire notre politique de divulgation des vulnérabilités.
Une fois cette lecture terminée, le meilleur moyen de soumettre un signalement est d’utiliser le formulaire de divulgation dédié.
Veuillez fournir autant d’informations que possible, notamment :
une description du problème
les étapes pour le reproduire (ou une preuve de concept)
vos coordonnées — afin que nous sachions qui créditer et qui contacter si nous avons besoin de plus d’informations.
Vous pouvez également nous écrire à report@snyk.io. Là encore, veillez à fournir autant d’informations que possible.