A ceux qui s’interrogent sur l’intérêt d’une revue de code régulière, la mésaventure du référentiel Git de PHP apporte une réponse sans équivoque. Pendant le week-end, deux commits ont été poussés vers le dépôt Git php-src maintenu par l’équipe PHP sur son serveur git.php.net. Ces deux propositions de modification de code étaient proposées sous les noms de Rasmus Lerdorf (co-auteur du PHP) et Nikita Popov, un développeur actif dans la communauté PHP.

Le problème est que, bien évidemment, les deux personnes ne sont pas à l’origine des commits. Dans ces derniers, les pirates ont indiqué au début « fix typo » pour préciser qu’il s’agissait juste d’une correction typographique mineure. Mais en analysant le code, une backdoor a été détectée dans l’appel de la fonction zend_eval_string. Cette porte dérobée permet d’exécuter du code à distance (RCE) sur un site web se servant de cette version détournée de PHP. « Cette ligne exécute le code PHP depuis l’en-tête http useragent, si la chaîne commence par zerodium », précise un développeur à Michael Vorisek, qui a été le premier à signaler l’anomalie. L’impact de la backdoor n’est pas anodin car PHP est utilisé par près de 80% des sites web.

Une bascule sur GitHub

Dans un message à nos confrères de Bleepingcomputer, Nikita Popov a expliqué que « le premier commit a été découvert quelques heures après avoir été effectué, dans le cadre d’une revue de code post-commit routinière. Les changements étaient manifestement malveillants et ont été annulés immédiatement. Une révision plus approfondie est en cours pour savoir si d’autres commits douteux auraient échappé à la vigilance de la communauté.

Par ailleurs, dans un message sur la liste d’informations de PHP, le développeur indique, « tout porte à croire qu'il s'agit d'une compromission du serveur git.php.net (plutôt que la compromission d'un compte git individuel). » Une enquête est en cours pour en savoir plus, mais en attendant les résultats, la sécurité n’est plus assurée sur le serveur Git de PHP. En conséquence, « nous allons supprimer le serveur git.php.net. À la place, les dépôts sur GitHub, qui n'étaient auparavant que des miroirs, deviendront la règle », précise Nikita Popov. Il ajoute, « les changements doivent être poussés directement vers GitHub plutôt que vers git.php.net ».