Parce que… c’est l’épisode 0x33B!

Shameless plug

Description

Cette description a été faite à l’aide de GLM 5.3 Flash, à partir de la transcription qui a été effectuée par ElevenLabs Scribev2. Aucune vérification humaine n’a été faite. Si vous découvrez des erreurs ou des inexactitudes, vous pouvez m’en faire part afin que je procède aux modifications appropriées.

Une intuition née sur le terrain

L’épisode spécial du Polysecure reçoit Rémi Matasse, chercheur chez Synactive, et Pierre Martin, chercheur en sécurité chez Depy, venus présenter à Pass the Salt leur recherche sur Livewire, une dépendance très répandue de l’écosystème Laravel. Tout commence lors d’une mission de Rémi, qui remarque des objets PHP circulant dans les requêtes et note le détail de côté. Le sujet resurgit quand les deux chercheurs partagent une mission commune, et Pierre vient le voir spontanément avec la même intuition. Voir des noms de classes PHP transiter dans des requêtes est rarement bon signe, et ce double déclic a lancé la recherche.

Le rôle de Livewire dans l’écosystème PHP

En PHP classique, avec Laravel ou Symfony, la mise à jour d’un formulaire recharge toute la page, ce qui alourdit le serveur et pénalise les utilisateurs à connexion limitée. Livewire se place au-dessus des applications Laravel pour imiter Next.js avec une approche proche du single page application, où l’HTML est délivré côté client et où des objets sont échangés entre le back-end et le front-end pour maintenir un état partagé. L’ampleur de la dépendance justifiait l’effort, car Livewire figure parmi les plus utilisées du framework, avec environ 20 % des applications Laravel exposées sur Internet et 80 millions de téléchargements.

Pourquoi les objets PHP sonnent l’alarme

Pour les auditeurs moins familiers avec PHP, Pierre détaille la mécanique du langage. Les projets PHP reposent sur des classes qui référencent des objets et des modèles de base de données. Laravel propose des classes contenant des méthodes potentiellement dangereuses, puisque le framework appelle des fonctions PHP sensibles comme include, require ou parfois eval. Pouvoir instancier n’importe quelle classe n’équivaut pas à appeler n’importe quelle méthode, mais le simple constructeur d’une classe peut suffire à remonter jusqu’à une exécution de commande.

De la gadget chain au bypass

En mode boîte blanche, les chercheurs identifient une instanciation arbitraire d’objets et jugent qu’une RCE est inévitable vu le nombre de dépendances présentes par défaut dans Laravel. Ils construisent une gadget chain enchaînant cinq ou six objets jusqu’à une exécution de commande arbitraire, mais la validation par checksum exige de connaître le secret, l’app key qui gère toute la cryptographie de Laravel, et Livewire refuse de traiter cela comme une vulnérabilité. Le plot twist présenté à Pass the Salt réside dans un bypass. La gadget chain peut être rejouée dans un champ d’update non signé que l’utilisateur doit pouvoir envoyer. Un défaut de logique dans leur récursion fait qu’un sous-tableau placé dans un tableau est traité comme un objet instanciable, ce qui permet la remote command execution sans le prérequis de signature, donc un contrôle complet du serveur.

Une disclosure exemplaire

Le rapport initial avait été refusé, mais les chercheurs persistent et finissent par sortir la CVE. Le rapport final est envoyé mi-juillet et la réponse arrive en moins de deux heures. Les développeurs confirment le problème, demandent la discrétion et publient un patch deux jours plus tard. Un accord prévoit d’attendre au minimum trois mois avant toute publication d’article ou d’outil d’exploitation, afin que même les équipes peu attentives puissent mettre à jour leurs applications.

Le bon, la brute et le truand

Leur présentation reprenait la trame du film, déclinée en the patched, the backdoored and the software hater. Ceux qui ont patché dès juillet n’ont subi aucun problème, faute d’exploit public à l’époque. Ceux qui n’ont pas patché ont essuyé des dégâts collatéraux après la publication courant décembre, avec des exploitations observées un peu partout dans le monde. Enfin, certains réagissent de mauvaise foi, accusant Livewire d’être une dépendance pourrie et refaisant tout leur serveur, alors qu’un simple patch aurait suffi, comme pour n’importe quelle one day.

L’aveuglement face aux avertissements

Le vrai problème tient au manque de visibilité sur son parc de dépendances, un enjeu commun à tous les langages. Livewire était notamment embarquée par Filament, un panel d’administration parmi les plus utilisés de Laravel, ce qui explique que beaucoup ignoraient sa présence. Pourtant, Composer, le gestionnaire de paquets de PHP, affiche des avertissements très visibles à chaque installation, avec le numéro de CVE et un score CVSS de 10. Pour les chercheurs, ceux qui prétendent ne pas savoir sont soit négligents, soit ont sciemment reporté le patch en l’absence d’exploit public. Rémi rappelle qu’une CVE publique suffit à un attaquant pour créer son propre exploit privé, d’autant qu’en 2026 les outils d’intelligence artificielle rendent ce passage trivial.

Trolls et threat actors

Après la publication, Rémi a passé plus de trois semaines à collectionner les réactions indignées repérées sur Reddit. Certains racontent avoir fait des cauchemars, d’autres prétendent qu’il faut abandonner PHP ou réécrire leur application en Go pour échapper aux failles. Pierre tient à rétablir les faits, car les développeurs de Livewire se sont révélés les plus réactifs de tous ceux chez qui les deux chercheurs ont rapporté des vulnérabilités, avec une gestion irréprochable, allant jusqu’à demander un moratoire de communication pour protéger leurs utilisateurs. La CVE a aussi rapidement attiré les APT, un scénario classique dès qu’une RCE facile devient disponible. Un rapport de threat intel documentait l’exploitation par un acteur iranien visant l’État américain, dans un contexte géopolitique évident. L’ajout de la vulnérabilité au catalogue de la CISA, qui recense les CVE activement exploitées, oblige les serveurs gouvernementaux à se mettre à jour sous peine de sanctions. Rémi a également repéré des traces d’acteurs asiatiques et éthiopiens, en s’appuyant sur un simple dork portant le numéro de CVE et filtré par date pour recenser les write-ups de particuliers et les rapports d’entreprises spécialisées.

État des lieux et recommandations

La vulnérabilité reste d’ailleurs exploitée aujourd’hui. Livewire a ajouté dans son code source une policy de blacklist empêchant l’instanciation des classes employées dans la gadget chain, une mesure de défense en profondeur puisque la faille, liée à la conception du composant, n’est pas patchable. Rémi recommande enfin de lancer régulièrement un composer audit pour vérifier ses dépendances et, en cas d’exploitation avérée, de changer son app key, sans quoi les attaquants peuvent revenir rejouer la même vulnérabilité à tout moment.

Notes

Contributeurs

Nicolas-Loïc Fortin Rémi Matasse
Nicolas-Loïc Fortin LinkedIn Rémi Matasse pierremartin

Crédits

Télécharger .m4a (21.6M) Télécharger .mp3 (15.8M)

Tags: cve, pentest, pts, vulnerabilite