Les principaux développeurs spécialisés dans le langage PHP mettent les bouchées doubles afin de livrer dans les plus brefs délais un correctif destiné à résoudre un problème récemment signalé, susceptible d'empêcher les systèmes 32 bits exécutant du PHP de servir des pages web. C'est ce qu'a indiqué un développeur ce mercredi. Ce bug expose les systèmes PHP - un langage largement utilisé dans le développement Web - à une attaque par déni de service (DOS) exploitable à distance. « Il est lié à un problème de virgule flottante et touche les systèmes Linux et Windows », a précisé Andi Gutmans, le PDG de Zend Technologies, fournisseur d'outils de développement PHP.

Selon le CEO de Zend, la faille résulte d'un défaut de conception du chipset x87 intégré à une ancienne version du processeur Intel X86, dont les compilateurs ne savent pas traiter un problème spécifique de virgule flottante. « En conséquence, le traitement de la virgule flottante en PHP est affectée par ce bogue », explique-t-il en ajoutant ne pas avoir actuellement connaissance de sites PHP touchés par ce problème. « Le bug ne devrait pas affecter les systèmes PHP de grande capacité puisqu'ils tournent en 64-bits, explique Andi Gutmans. C'est lié à une mauvaise conception du hardware ».

Un problème lié à des nombres subnormaux

C'est Rick Regan, un chercheur en informatique, qui a signalé le problème, déclarant qu'il était apparu au cours d'un travail de recherche. « J'étudiais la conversion décimal/binaire des nombres dits subnormaux, ces tout petits nombres situés entre zéro et le plus petit nombre défini par le système à virgule flottante », a t-il raconté sur le blog Exploring Binary. « Le nombre particulier qui a causé le problème, 2.2250738585072011e-308, a été converti dans le plus grand des nombres subnormaux à double précision à la limite des nombres à virgule flottante normalisés et non normalisés. En observant les 17 nombres décimaux significatifs, 5 d'entre eux ont été convertis dans le plus grand nombre subnormal à virgule flottante. Pour des raisons qui me sont inconnues - et de manière tout à fait inattendue - le nombre 2.2250738585072011e-308 a entrainé le PHP dans une boucle infinie. »

Selon Andi Gutmans, les développeurs pourront proposer très vite une solution de contournement propre à chaque version PHP, provisoirement appelées PHP 5.3.5 et PHP 5.2.17. Il pense que cette solution devrait intervenir dans quelques heures et indique par ailleurs que son entreprise livrera également un correctif pour son produit Zend Server afin de résoudre le problème.

Illustration : le problème signalé par Rick Regan (source : http://www.exploringbinary.com)