veilletech.fr
4 nov. Feed du jour
#03 PHP Article

Composer 2.11 : cooldown, six failles corrigées

Un jour d'attente coûte peu, une dépendance piégée coûte cher.

Composer 2.11.0 ajoute un délai de carence (cooldown) : il ignore les versions publiées depuis moins d'une durée que vous fixez, ce qui laisse le temps de retirer une version piégée. La release corrige aussi six failles, supprime le repli vers un clone du dépôt source et accélère la résolution. Le délai ne joue que sur update et require, jamais sur install.

4 min de lectureintermédiairevidéo 1:16
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Le réglage
  3. Les six correctifs de sécurité
  4. Ce qui casse
  5. Comment s'y prendre
  6. À retenir

Ce qui se passe

Composer 2.11.0 introduit une politique de cooldown : vous fixez une durée, et Composer écarte toute version publiée depuis moins longtemps que cela. L'idée est simple : si quelqu'un publie une version malveillante d'un paquet dont vous dépendez, elle a des chances d'être signalée et retirée avant que votre composer update ne la voie. La 2.10 avait déjà ajouté des politiques qui bloquent les versions visées par un avis de sécurité ou un logiciel malveillant connu ; le cooldown couvre le trou entre la publication et ce signalement.

Le réglage

La politique est désactivée par défaut. On la déclare dans composer.json :

JSON
{
    "config": {
        "policy": {
            "cooldown": {
                "period": "1 day"
            }
        }
    }
}

period accepte une chaîne ("6 hours", "7 days" ; unités second, minute, hour, day, week) ou un entier en secondes. Ce qu'il faut savoir :

La date retenue est le published-time que Packagist.org attribue à chaque version, pas le champ time du composer.json, que l'auteur du paquet maîtrise. Un dépôt qui ne fournit pas published-time pour une version nécessaire fait échouer la commande en nommant le paquet ; pour un dépôt de confiance, require-published-time: false retombe sur time. Les dépôts VCS, path et artifact utilisent toujours time. Private Packagist gère déjà cette politique, et un administrateur peut la fixer pour toute l'organisation.

Les six correctifs de sécurité

Ce qui casse

Si le téléchargement de l'archive (dist) échoue, Composer ne se rabat plus sur un clone du dépôt source, et l'option provisoire source-fallback (dépréciée en 2.10) disparaît. Si un paquet ne s'installe que depuis les sources, réglez preferred-install sur source pour lui, ou utilisez --prefer-source. Autre effet : modifier la config policy marque le fichier de verrouillage comme périmé, d'où un avertissement jusqu'à la prochaine mise à jour du lock.

Comment s'y prendre

  1. composer self-update.
  2. Ajouter un cooldown d'un jour sur un projet, lancer composer update en CI et lire les paquets écartés.
  3. Prévoir --no-cooldown dans la procédure de correctif urgent, et ignore pour vos paquets internes.
  4. Au passage, composer audit --direct (-D) n'audite que les dépendances directes.

Source : Laravel News, qui renvoie à l'annonce de Packagist et aux notes de version de Composer 2.11.0. Source en anglais.