Sortie de Snuffleupagus 0.7.0 - Los Elefantes

Posté par  (site web personnel) . Édité par Xavier Teyssier, Ysabeau 🧶, palm123, Anonyme, tisaac et Pierre Jarillon. Modéré par Xavier Teyssier. Licence CC By‑SA.
Étiquettes :
23
6
jan.
2021
PHP

Logo du projet

Snuffleupagus est un module pour PHP, version 7+ et maintenant 8+, qui a pour but d’augmenter drastiquement la difficulté des attaques contre les sites Web. Cela s’obtient, entre autres, via la désactivation de fonctions et de classes, et en fournissant un système de correctifs virtuels, permettant à l’administrateur de corriger des vulnérabilités spécifiques sans modifier le code PHP.

La version 0.7.0 sortie aujourd’hui, est un excellent prétexte pour reparler de ce projet sur LinuxFr.org

La principale nouveauté de cette version est le support de PHP 8, qui bien que n’ayant pas été très difficile fût fastidieuse. En effet, PHP a changé la capitalisation de certains de ses messages d’erreurs, ainsi que les paramètres par défaut de logging, cassant un grand nombre de tests unitaires. Quitte à moderniser le code, autant faire les choses à fond, en utilisant PCRE2 autant que possible tout en maintenant la compatibilité avec PCRE1 pour les vieilles versions de PHP. En effet, Snuffleupagus supporte toutes les versions de PHP7, y compris les versions en fin de vie, qui continuent d’exister dans certaines distributions linux bénéficiaire de support long.

C’est également l’occasion de corriger un bogue passé inaperçu jusqu’ici : le mode de typage strict apporté par Snuffleupagus n’était pas désactivable. Ce souci a été mis en lumière grâce à un bug dans composer, qui a au passage été corrigé. La bonne nouvelle, c’est que ce bogue n’a pas dû embêter grand monde pour ne jamais avoir été rencontré avant : soit personne n’utilise Snuffleupagus, soit les gens l’utilisant ont des bases de codes suffisamment propres pour ne pas comporter de fautes de types !

D’autres fonctionnalités mineures ont également été ajoutées, comme la possibilité de « sauter » des fonctions avec l’opérateur >: par exemple, la règle sp.disable_function("bla>blop").drop() terminera l’exécution si la fonction blop a dans ses parents la fonction bla. Ce qui devrait permettre d’écrire facilement des règles pour se prémunir des attaques basées sur de la désérialisation, en interdisant à des fonctions dangereuses de s’exécuter si unserialize est dans leurs fonctions parentes.

Afin d’obtenir toujours plus de visibilité, les requêtes sauvegardées lorsqu’une règle de filtrage est déclenchée contiennent maintenant l’ensemble de l’arbre d’appel des fonctions, permettant de comprendre le cheminement qui a mené à la règle.

Tout ça c’est intéressant, mais est-ce que Snuffleupagus fonctionne ? Il semblerait que oui : un des auteurs publie chaque année une rétrospective des résultats du logiciel contre les vulnérabilités les plus critiques. Force est de constater que la plupart des failles sont soit rendues inexploitables, soit le deviennent moins trivialement.

Quid de la suite ? Bien que le projet ait été abandonné par la société l’ayant open-sourcé (NBS-System), un des auteurs principaux continue de maintenir et de faire évoluer le projet, qui continue son bonhomme de chemin, gagnant en fonctionnalités tout en perdant des bugs.

Aller plus loin

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.