Skip to main content

Détecter les vulnérabilités de sécurité de PHP Composer avec Snyk

Écrit par
Headshot of DeveloperSteve Coochin

DeveloperSteve Coochin

blog social php composer

20 mai 2021

0 minutes de lecture

PHP est largement utilisé pour alimenter les sites web. Des blogs au commerce en ligne, il fait partie de notre quotidien et alimente une grande partie de l’Internet que nous utilisons aujourd’hui. Selon un rapport Wappalyzer sur les principaux langages de programmation en 2020, PHP détient aujourd’hui 79 % des parts de marché des langages backend utilisés sur Internet.

Au fil des ans, l’un des principaux défis liés aux bibliothèques PHP a été la gestion des packages. Il existe plusieurs façons d’installer et de maintenir facilement des bibliothèques, notamment PECL et CPAN. Mentionnons également PEAR, lancé en 2009, qui a été l’un des premiers outils de chargement et de distribution de bibliothèques. Il a ensuite évolué en PEAR2, puis a fini par faire partie de PHP Composer (qui en est à sa 9e année !), que nous allons examiner aujourd’hui.

Qu’est-ce que PHP Composer ?

PHP Composer est un outil de gestion des paquets qui permet d’installer et de mettre à jour des bibliothèques et des dépendances en PHP. Il a rapidement gagné en popularité grâce à sa façon de charger et de gérer les bibliothèques et les dépendances au sein des frameworks et des projets. Utilisable en ligne de commande, il permet d’installer des applications, des bibliothèques et des dépendances PHP dans les projets, avec des fonctionnalités de chargement automatique. À noter que PHP Composer n’installe rien à l’échelle globale.

Examinons la sécurité de PHP Composer

PHP Composer accélère le développement d’applications, mais masque une partie du contrôle et de la visibilité. Il facilite donc le codage, mais soulève une question… est-ce fait en toute sécurité ? Avec Snyk, je peux répondre à cette question en quelques clics.

Avant d’examiner quelques implémentations de PHP Composer sur différentes plateformes, je voudrais souligner quelques points.

  • En tant qu’utilisateur et développeur de ces plateformes, mes découvertes m’ont surpris pour plusieurs raisons. Cela confirme qu’il est essentiel de sensibiliser et de former en permanence pour développer en toute sécurité.

  • Dans tous les cas ci-dessous, j’ai contacté les communautés concernées pour discuter des vulnérabilités et les sensibiliser lorsqu’elles n’en avaient pas encore connaissance (beaucoup avaient déjà apporté des correctifs).

Kirby

Pour commencer avec Kirby et Composer, vous pouvez suivre les instructions de configuration simples de la documentation Kirby meets Composer :

composer create-project getkirby/starterkit hello-world

Composer installe la dernière version de Kirby (3.3.5), qui ne présente qu’une vulnérabilité de gravité moyenne et une de faible gravité dans la Snyk Vulnerability DB. Cependant, l’interface de ligne de commande Snyk détecte un problème dans l’une des dépendances, PHPMailer, qui utilise la version 6.2.0. Cette version de PHP Mailer présente une vulnérabilité de gravité élevée liée aux scripts intersites (XSS).

Au moment de la rédaction, ce problème est corrigé dans PHPMailer 6.4.1. Vous pouvez le corriger en exécutant composer upgrade pour installer la dernière version. L’historique du module révèle une longue série de vulnérabilités. C’est pourquoi il est vivement recommandé d’effectuer des analyses régulières avec Snyk Code afin d’être alerté en cas de découverte de nouvelles vulnérabilités.

Joomla

Le dépôt Joomla inclut un fichier Composer qui installe toutes les dépendances nécessaires à son exécution. Une analyse avec l’interface en ligne de commande Snyk révèle 2 problèmes et 4 chemins vulnérables.

✗ Medium severity vulnerability found in phpmailer/phpmailer
  Description: Improper Input Validation
  Info: https://snyk.io/vuln/SNYK-PHP-PHPMAILERPHPMAILER-570519
  Introduced through: phpmailer/phpmailer@5.2.28
  From: phpmailer/phpmailer@5.2.28
  Fixed in: 6.1.6

✗ Medium severity vulnerability found in paragonie/random_compat
  Description: Man-in-the-Middle (MitM)
  Info: https://snyk.io/vuln/SNYK-PHP-PARAGONIERANDOMCOMPAT-72081
  Introduced through: paragonie/random_compat@1.4.3, joomla/session@1.6.0, paragonie/sodium_compat@1.9.1
  From: paragonie/random_compat@1.4.3
  From: joomla/session@1.6.0 > paragonie/random_compat@1.4.3
  From: paragonie/sodium_compat@1.9.1 > paragonie/random_compat@1.4.3
  Fixed in: 2.0

Organization:      developersteve-285
Package manager:   composer
Target file:       composer.lock
Project name:      joomla/joomla-cms
Open source:       no
Project path:     /php/joomla-cms
Licenses:          enabled

Tested 39 dependencies for known issues, found 2 issues, 4 vulnerable paths.

Tip: Detected multiple supported manifests (2), use --all-projects to scan all of them at once.

Nous détectons à nouveau PHPMailer, qui installe la version 5.2.28. Cette version présente un problème de validation incorrecte des entrées, que Snyk indique comme corrigé dans la version 6.1.6.

Snyk a également découvert une vulnérabilité de type attaque de l’homme du milieu (MITM), introduite par `paragoine/random_compat` en version 1.4.3 et associée à `joomla/session`. Les attaques MitM sont extrêmement dangereuses, car elles permettent l’écoute clandestine des communications électroniques. Pour en savoir plus sur ce type de vulnérabilité, consultez notre article de blog sur les attaques de l’homme du milieu.

Drupal

Grâce au guide pratique du dépôt Drupal, nous pouvons rapidement démarrer avec la dernière branche de développement 9.x.

composer create-project drupal-composer/drupal-project:9.x-dev some-dir --no-interaction

Pendant l’installation, nous pouvons vérifier les problèmes connus dans la Snyk Vulnerability Database, qui répertorie également les vulnérabilités de l’historique des versions de Drupal à surveiller. Ensuite, avec l’interface en ligne de commande Snyk, nous constatons que la version 9.x ne présente aucun problème. Par précaution, nous pouvons faire de même avec Drupal 8.x et constater que cette version ne présente pas non plus de problème. Parfait !

Maintenant que ces deux versions sont validées, vérifions également Drupal 7, qui est encore assez utilisé. Pour cela, clonez le dépôt Drupal 7.x.

L’analyse de la version 7.x donne des résultats un peu différents avec l’interface en ligne de commande Snyk : 9 vulnérabilités et 18 chemins vulnérables. Les risques vont des exploits de téléversement de fichiers aux attaques par déni de service (DoS), en passant par l’exécution de code à distance (RCE) et l’exécution de code arbitraire (ACE).

✗ Medium severity vulnerability found in drupal/drupal
  Description: Cross-site Scripting (XSS)
  Info: https://snyk.io/vuln/SNYK-PHP-DRUPALDRUPAL-174348
  Introduced through: drupal/drupal@7.80.0, drupal/composer_autoloader@1.3.0
  From: drupal/drupal@7.80.0
  From: drupal/composer_autoloader@1.3.0 > drupal/drupal@7.80.0
  Fixed in: 8.5.15, 8.6.15

✗ Medium severity vulnerability found in drupal/drupal
  Description: Arbitrary Code Execution
  Info: https://snyk.io/vuln/SNYK-PHP-DRUPALDRUPAL-174350
  Introduced through: drupal/drupal@7.80.0, drupal/composer_autoloader@1.3.0
  From: drupal/drupal@7.80.0
  From: drupal/composer_autoloader@1.3.0 > drupal/drupal@7.80.0
  Fixed in: 8.5.15, 8.6.15

✗ Medium severity vulnerability found in drupal/drupal
  Description: Access Control Bypass
  Info: https://snyk.io/vuln/SNYK-PHP-DRUPALDRUPAL-174352
  Introduced through: drupal/drupal@7.80.0, drupal/composer_autoloader@1.3.0
  From: drupal/drupal@7.80.0
  From: drupal/composer_autoloader@1.3.0 > drupal/drupal@7.80.0
  Fixed in: 8.5.15, 8.6.16

✗ Medium severity vulnerability found in drupal/drupal
  Description: Access Restriction Bypass
  Info: https://snyk.io/vuln/SNYK-PHP-DRUPALDRUPAL-538566
  Introduced through: drupal/drupal@7.80.0, drupal/composer_autoloader@1.3.0
  From: drupal/drupal@7.80.0
  From: drupal/composer_autoloader@1.3.0 > drupal/drupal@7.80.0
  Fixed in: 8.7.11, 8.8.1

✗ Medium severity vulnerability found in drupal/drupal
  Description: Arbitrary File Upload
  Info: https://snyk.io/vuln/SNYK-PHP-DRUPALDRUPAL-538568
  Introduced through: drupal/drupal@7.80.0, drupal/composer_autoloader@1.3.0
  From: drupal/drupal@7.80.0
  From: drupal/composer_autoloader@1.3.0 > drupal/drupal@7.80.0
  Fixed in: 8.7.11, 8.8.1

✗ Medium severity vulnerability found in drupal/drupal
  Description: Denial of Service (DoS)
  Info: https://snyk.io/vuln/SNYK-PHP-DRUPALDRUPAL-538570
  Introduced through: drupal/drupal@7.80.0, drupal/composer_autoloader@1.3.0
  From: drupal/drupal@7.80.0
  From: drupal/composer_autoloader@1.3.0 > drupal/drupal@7.80.0
  Fixed in: 8.7.11, 8.8.1

✗ High severity vulnerability found in drupal/drupal
  Description: Arbitrary Code Execution
  Info: https://snyk.io/vuln/SNYK-PHP-DRUPALDRUPAL-1048286
  Introduced through: drupal/drupal@7.80.0, drupal/composer_autoloader@1.3.0
  From: drupal/drupal@7.80.0
  From: drupal/composer_autoloader@1.3.0 > drupal/drupal@7.80.0

✗ High severity vulnerability found in drupal/drupal
  Description: Remote Code Execution (RCE)
  Info: https://snyk.io/vuln/SNYK-PHP-DRUPALDRUPAL-173722
  Introduced through: drupal/drupal@7.80.0, drupal/composer_autoloader@1.3.0
  From: drupal/drupal@7.80.0
  From: drupal/composer_autoloader@1.3.0 > drupal/drupal@7.80.0
  Fixed in: 8.5.11, 8.6.10

✗ High severity vulnerability found in drupal/drupal
  Description: Access Restriction Bypass
  Info: https://snyk.io/vuln/SNYK-PHP-DRUPALDRUPAL-70088
  Introduced through: drupal/drupal@7.80.0, drupal/composer_autoloader@1.3.0
  From: drupal/drupal@7.80.0
  From: drupal/composer_autoloader@1.3.0 > drupal/drupal@7.80.0
  Fixed in: 8.3.1, 8.2.8

Organization:      developersteve-285
Package manager:   composer
Target file:       composer.lock
Project name:      drupal-composer/drupal-project
Open source:       no
Project path:      /Users/developersteve/Desktop/Code/php/drupal/7/my_site_name_dir
Licenses:          enabled

Tested 40 dependencies for known issues, found 9 issues, 18 vulnerable paths.

Au vu de ces résultats, je recommande de passer au minimum à la version 8.x pour sécuriser votre implémentation de Drupal.

Aidez les communautés en contribuant

Quand j’ai commencé à tester certaines de ces plateformes couramment utilisées, je ne savais pas vraiment ce que j’allais découvrir. Comme je l’ai dit, les résultats m’ont assez surpris. Les développeurs, les équipes ou les entreprises qui utilisent ces plateformes en production sans se méfier ne savent peut-être pas exactement ce qu’elles laissent passer. J’espère que cet article aidera davantage d’équipes à rester en sécurité.

Mais je ne suis qu’un développeur, et ceci n’est qu’un article de blog. Pour avoir un véritable impact sur la sécurité, je vous encourage à tester vous-même les projets et à contribuer à leurs correctifs. Ces communautés extraordinaires sont souvent animées par des développeurs passionnés qui veulent créer des outils utiles aux personnes du monde entier. Elles ont besoin de votre soutien.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis de capture du drapeau en regardant à la demande notre atelier virtuel d’initiation.

Lire la suite

blog feature snyk container custom base recommendations
Blog

AppSec agentique : le développement logiciel est devenu agentique. Pas la sécurité.

Le développement piloté par l’IA dépasse les workflows de sécurité traditionnels. L’AppSec agentique de Snyk s’appuie sur des agents de sécurité pour détecter, corriger et vérifier les vulnérabilités en continu, tandis que les équipes définissent les exigences.

feature insights context
Blog

Les attaques autonomes sont déjà là. La défense doit suivre leur rythme.

Les attaquants autonomes réduisent la fenêtre de défense. Découvrez comment la découverte, la correction, la validation et la prévention continues peuvent aider les équipes de sécurité à suivre le rythme.

feature insights context
Blog

La prévention est-elle essentiellement un problème résolu ?

La prévention dans le code généré par les agents est résolue sur le plan architectural, mais le défi reste de choisir des contrôles qui protègent la sécurité sans ralentir le développement.