Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Actualité déjà publiée
 
Outils de la discussion
Publicité
'
Vieux 05/01/2011, 12h52   #1
Coordinateur publications
 
Avatar de Idelways
 
Développeur Ruby on Rails / iOS et journaliste
Inscription : juin 2010
Messages : 1 101
Détails du profil
Informations professionnelles :
Activité : Développeur Ruby on Rails / iOS et journaliste

Informations forums :
Inscription : juin 2010
Messages : 1 101
Points : 24 230
Points : 24 230
Par défaut Java : Oracle publie d’urgence des correctifs contre le bogue des nombres à virgule flottante

Java : Oracle publie d’urgence des correctifs
contre le bogue des nombres à virgule flottante

Mise à jour du 10/02/11, par Hinault Romaric

Oracle vient de publier en urgence des correctifs pour le bogue des nombres à virgule flottante dans Java.

Ce bogue entraine le blocage du Runtine Java lorsque celui-ci convertit le nombre 2.2250738585072012e-308 en binaire à virgule flottante.

Un bogue qui peut-être exploité à distance sans authentification. L’exploitation de cette faille peut entrainer le blocage ou le crash du Runtine Java et permettre les attaques par Déni de Service.

Les applications et serveurs Web Java sont particulièrement exposés à cette vulnérabilité selon l’alerte de sécurité publiée par Oracle.

Un certain nombre de produits sont touchés comme Java SE et Java for Business. La liste complète des technologies impactées ainsi que les liens vers les correctifs recommandés ont été publiée sur le site web d’Oracle.


Les correctifs Java SE et Java for Business sont disponibles sur cette page


Source : Alerte de sécurité Oracle



Le bogue des nombres à virgule flottante refait surface en Java
Et plonge le compilateur et les programmes dans des boucles infinies

Mise à jour du 08/02/2011



Quelque temps après sa correction sur PHP, le bogue étrange des nombres à virgule flottante refait surface sur un langage tout aussi populaire : Java.

Ce bogue provoquait sur PHP avant sa correction le crash du système par le passage d'un simple paramètre dans l'URL, pour peu que le script convertisse en nombres ou utilise ces variables dans des opérations arithmétiques (pour plus de détails, lire ci-devant)

Sur Java, un bogue similaire plongerait les programmes à l'exécution (ou leur compilateur) dans des boucles infinies d'après Exploring Binary, le site où ont été mis en lumière les deux bogues.

Le nombre en question, le désormais célèbre 2.2250738585072012e-308 et ses différentes représentations sont supposés être convertie en 0x1p-1022, qui correspond à la constante DBL_MIN.
Au lieu de cela, Java se retrouve coincé, oscillant sans arrêt entre les valeurs 0x1p-1022 et 0x0.fffffffffffffp-1022, le plus grand nombre dénormalisé à double précision et à virgule flottante.

Le bogue serait provoqué par la boucle de correction de la classe FloatingDecimal, chargée de trouver la meilleure approximation, qui la trouve mais la remplace et la retrouve infiniment...

Le bogue a été reporté à Oracle depuis plusieurs semaines, son rapport a récemment été assigné pour analyse interne non accessible sur Sun Developer Network (SDN).




Pour reproduire ce bogue à l'exécution des programmes, compilez et exécutez ce programme

Code :
1
2
3
4
5
6
7
class runhang {
public static void main(String[] args) {
  System.out.println("Test:");
  double d = Double.parseDouble("2.2250738585072012e-308");
  System.out.println("Value: " + d);
 }
}

Pour provoquer une boucle infinie au niveau du compilateur, il suffit de tenter de compiler cette classe :
Code :
1
2
3
4
5
6
class compilehang {
public static void main(String[] args) {
  double d = 2.2250738585072012e-308;
  System.out.println("Value: " + d);
 }
}


Source : Exploring Binary

Et vous ?

Arrivez-vous à reproduire ce bug ?
Sur quelle plateforme, architecture et version de JRE/JDK ?




PHP : deux correctifs pour le bogue des nombres à virgule flottante
L'équipe de PHP recommande de l'appliquer immédiatement

Mise à jour du 07/01/2011


L'équipe de développement de PHP vient de publier des patchs pour corriger le bogue étrange découvert cette semaine. Un bogue capable de provoquer le crash du système par le passage d'un simple paramètre dans l'URL des sites hébergés sur des systèmes x86 (pour plus de détails, lire ci-avant)

Après analyse, il s'agit vraisemblablement d'un bogue sur le code optimisé pour les x86 du GCC (le compilateur du projet GNU) à l'origine d'une incompatibilité avec x87, l'Unité de calcul en virgule flottante (ou FPU).

Deux nouvelles versions de PHP viennent donc d'être packagées : la 5.3.5 et la 5.2.17.
Ces versions n'incluent aucune autre nouveauté que ce correctif.

L'équipe de PHP "recommande vivement" l'application immédiate de ce patch disponible sur php.net.


Pour vérifier si votre installation de serveur web est vulnérable à cet bug, exécutez ce script en ligne de commande
Les deux correctifs sont téléchargeables sur cette page


Source : l'annonce du lancement de la 5.2.17 et de la 5.3.5, le rapport de bug sur le tracker de GCC

Par Idelways



PHP : un bug étrange rendrait enfantines les attaques par Déni de Service
Il toucherait les versions 5.2 et 5.3 du langage sous Windows et Linux



Un bug critique vient d'être découvert dans les branches 5.2 et 5.3 de PHP, le langage de programmation Web parmi les plus populaires.

Ce bug est provoqué par certaines valeurs de nombres à virgule flottante ayant un nombre considérable de décimaux. Leurs calculs ou évaluations en PHP provoqueraient une boucle infinie occupant 100% des ressources du CPU.

L'exécution de la ligne de code suivante, ou même son équivalent sans la notation scientifique (avec 324 décimales), provoquerait donc le plantage de la machine, et ce sous Linux comme sous Windows.

Code :
1
2
 
<?php $d = 2.2250738585072011e-308; ?>
Ce bug ne se produit vraisemblablement pas sous MacOS selon les premiers tests.

Quoi qu'il en soit, cette découverte s'avère d'autant plus redoutable que ce bug peut être exploité en ajoutant simplement l'une des valeurs en question aux URL des sites, pour peu que les sites attaqués convertissent en nombres ou utilise ces variables dans des opérations arithmétiques.

Enfantin donc.

Comme PHP propulse un grand nombre de sites Web, à l'instar de Développez.com ou Wikipedia, les conséquences pourraient être désastreuses car les sites potentiellement vulnérables se comptent par millions.

Selon Rick Regan, le développeur qui a découvert le bug, cette valeur (2.2250738585072011e-308) est le "plus grand nombre dénormalisé à double précision et à virgule flottante".

Mais on ne sait toujours pas, pour l'instant, pourquoi une telle valeur provoque le crash des machines sur PHP.

Selon certains, il serait dû à la manière dont les processeurs type x86 (ou 32 bits) calculent les nombres à virgule flottante et à grand nombre de décimales. Il serait, selon d'autres, dû à la nature même de ces chiffres, qui ne sont que des représentations approximatives de nombres réels.

Le problème pourrait donc se situer au niveau de l'algorithme chargé de trouver la meilleure approximation.

Une solution temporaire pour ce prémunir contre ce bug est de recompiler PHP avec la variable CFLAGS -ffloat-store, qui désactive l'exécution des versions décimales des nombres passés en paramètre.


Source : Exploring Binary

Et vous ?

Arrivez-vous à reproduire ce bug ? Sur quel OS et version de PHP ?
Comment l'expliquez-vous ?

En collaboration avec Gordon Fowler
Idelways est déconnecté   Envoyer un message privé Réponse avec citation 81
Vieux 05/01/2011, 13h06   #2
Membre expérimenté
 
Développeur Java
Inscription : mars 2004
Messages : 616
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2004
Messages : 616
Points : 598
Points : 598
Effectivement, avec PHP 5.3.0 sous Win XP, le problème existe.

Comment j'esplique se problème ? Disons, que je commence à me dire que PHP, à voir le nombre de bug qui sont corrigés régulièrement, n'a pas une phase de test (de conception aussi ?) assez complète. (même si j'adore ce langage)
__________________
Plus j'apprend et mieux j'évalue l'étendu de mon ignorance.
Mes programmes : http://www.bubulemaster.fr
bubulemaster est déconnecté   Envoyer un message privé Réponse avec citation 33
Vieux 05/01/2011, 13h30   #3
Membre expérimenté
 
Emmanuel Bourgerie
Inscription : mai 2009
Messages : 277
Détails du profil
Informations personnelles :
Nom : Emmanuel Bourgerie

Informations forums :
Inscription : mai 2009
Messages : 277
Points : 503
Points : 503
J'ai pas bien compris, c'est limité au 32bits ?
manudwarf est déconnecté   Envoyer un message privé Réponse avec citation 23
Vieux 05/01/2011, 13h45   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
aïe

Code :
1
2
$d = $_GET['d']; //'2.2250738585072011e-308';
$c = (float) $d;
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 31
Vieux 05/01/2011, 14h09   #5
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 22
Points : 14
Points : 14
Donc si je comrpend bien, il suffirai de passer ce nombre en entete URL d'une page web qui reçoit des paramètres de type float et ça marche ?

EDIT: c'est quand meme rare de trouver des sites qui prennent des float dans les formulaires ... j'aurais bien voulu tester pour voir ...
willard est déconnecté   Envoyer un message privé Réponse avec citation 13
Vieux 05/01/2011, 14h27   #6
Membre du Club
 
Homme
Étudiant
Inscription : octobre 2006
Messages : 101
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2006
Messages : 101
Points : 65
Points : 65
Citation:
Envoyé par willard Voir le message
EDIT: c'est quand meme rare de trouver des sites qui prennent des float dans les formulaires ... j'aurais bien voulu tester pour voir ...
Les sites qui font calculatrice en ligne

Sinon tu peux te faire une VM, la sur une ubuntu 10.10 avec 5.3.3-1ubuntu9.1 avec 30 process de lancé (php cli) j'ai un beau petit loadaverage : Load average: 31.98 23.44 11.34
Molos est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 05/01/2011, 14h30   #7
Modérateur
 
Avatar de Flaburgan
 
Homme
Développeur informatique
Inscription : avril 2010
Messages : 1 037
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : avril 2010
Messages : 1 037
Points : 2 480
Points : 2 480
Je pense que ça marche aussi avec les sites qui récupère des int, vu le typage faible de php. Il suffit qu'il fasse après une addition ou quelque chose dans ce genre. Du coup des formulaires qui demande un âge ou une année yen a nettement plus, avec un peu de chance...
__________________
"Historiquement, techniquement, économiquement et moralement, Internet ne peut pas être contrôlé. Autant s’y faire." Laurent Chemla

Je soutiens Diaspora*, le réseau social libre.

Veillez à porter une attention toute particulière à l'orthographe...

Blog collaboratif avec des amis : http://geexxx.fr
Flaburgan est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 05/01/2011, 14h30   #8
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 22
Points : 14
Points : 14
Des calculatrices, c'est plus du JS non ?
willard est déconnecté   Envoyer un message privé Réponse avec citation 14
Vieux 05/01/2011, 14h37   #9
Membre du Club
 
Inscription : août 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 35
Points : 48
Points : 48
Par défaut Bah non :(

Pas réussi à planter une VM Debian avec PHP 5.2.6...
Guildem est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 05/01/2011, 14h46   #10
Membre Expert
 
Avatar de ctxnop
 
Homme
Développeur informatique
Inscription : juillet 2007
Messages : 710
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juillet 2007
Messages : 710
Points : 1 256
Points : 1 256
Envoyer un message via MSN à ctxnop
Citation:
Envoyé par manudwarf Voir le message
J'ai pas bien compris, c'est limité au 32bits ?
En tout cas je n'ai pas reproduit le problème sur ma Gentoo 64bit (php 5.3.4).
Je n'ai pas trouvé de trace du CFLAGS en question dans l'ebuild pour autant.
ctxnop est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 05/01/2011, 14h48   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par Flaburgan Voir le message
Je pense que ça marche aussi avec les sites qui récupère des int, vu le typage faible de php. Il suffit qu'il fasse après une addition ou quelque chose dans ce genre. Du coup des formulaires qui demande un âge ou une année yen a nettement plus, avec un peu de chance...
et oui, re aïe

Code :
echo 2 + $_GET['d']; //d = '2.2250738585072011e-308';
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 21
Vieux 05/01/2011, 14h49   #12
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 291
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 291
Points : 2 737
Points : 2 737
Pas de problème sur :

Ubuntu 8 Kernel 2.6.24-24-generic (AMD 64)
PHP 5.2.4-2ubuntu5.6 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 17 2009 14:29:38)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
with the ionCube PHP Loader v3.1.33, Copyright (c) 2002-2007, by ionCube Ltd.

Mac OS X Server 10.5 (Core2 i386)
PHP 5.2.14 (cli) (built: Oct 6 2010 16:57:10)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

Mac OS X 10.6 (Xeon x86_64)
PHP 5.3.3 (cli) (built: Aug 22 2010 19:41:55)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

SUSE 11.3 SP1 (VM 64 bits in IBM EHN DataCenter)
PHP 5.2.14 with Suhosin-Patch 0.9.7 (cli) (built: Aug 5 2010 10:04:36)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH

Ubuntu 8 Kernel 2.6.27.10 (Intel x86-64)
PHP 5.2.6-2ubuntu4.3 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug 21 2009 22:54:45)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

Mac OS X 10.4 (Core2 i386)
PHP 4.4.9 (cli) (built: Sep 17 2008 14:54:01)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

Mac OS X 10.5 (Xeon x86_64)
PHP 5.2.12 (cli) (built: Feb 9 2010 00:34:23)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

CentOS 5.5 Kernel 2.6.27.10 (Xeon x86-64)
PHP 5.2.8 (cli) (built: Sep 5 2009 19:13:55)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 43
Vieux 05/01/2011, 14h55   #13
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
hello,

y'à aussi les limites dans les paginations qui peuvent bugger avec ce truc.
Et c'est encore plus commun que l'age ou la date de naissance.

J'imagine un
ou
Code :
$page=2.2250738585072011e-308
a plus
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 05/01/2011, 15h18   #14
Membre chevronné
 
Inscription : avril 2009
Messages : 559
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 559
Points : 710
Points : 710
Envoyer un message via MSN à sinople
Citation:
Selon Rick Regan, le développeur qui a découvert le bug, cette valeur (2.2250738585072011e-308) est le "plus grand nombre dénormalisé à double précision et à virgule flottante".
J'ai eu peur pendant un moment que le gaillard s'était amusé a tester toutes les combinaisons de nombre possible^^
sinople est déconnecté   Envoyer un message privé Réponse avec citation 33
Vieux 05/01/2011, 15h26   #15
Invité de passage
 
Inscription : décembre 2003
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 5
Points : 4
Points : 4
Aucune incidence sur PHP 5.3.4 sous Mac OSX (64bits), ni sous PHP 5.2.6 & 5.3.4 sous Debian Lenny (64bits). Les deux versions de PHP sont patchés avec SUHOSIN.
FLY_LM est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 05/01/2011, 15h33   #16
Membre émérite
 
Étudiant
Inscription : septembre 2006
Messages : 498
Détails du profil
Informations personnelles :
Âge : 18

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2006
Messages : 498
Points : 808
Points : 808
À ceux qui disent « pas de problème sur plateforme X » : pensez à indiquer votre plateforme matérielle et pas seulement logicielle.
spidermario est déconnecté   Envoyer un message privé Réponse avec citation 22
Vieux 05/01/2011, 15h42   #17
Membre confirmé
 
Patrick Barroca
Inscription : mai 2008
Messages : 178
Détails du profil
Informations personnelles :
Nom : Patrick Barroca

Informations forums :
Inscription : mai 2008
Messages : 178
Points : 204
Points : 204
Pas de soucis sur mon Ubuntu Jaunty :
2.6.28-19-generic #66-Ubuntu SMP Sat Oct 16 17:39:04 UTC 2010 i686 GNU/Linux
PHP 5.2.6-3ubuntu4.6 with Suhosin-Patch 0.9.6.2 (cli) (built: Sep 16 2010 19:52:51)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans

Code :
1
2
3
4
5
6
7
8
9
$ php -a
Interactive shell
 
php > $d = 2.2250738585072011e-308;
php > echo $d;
2.22507385851E-308
php > echo PHP_VERSION;
5.2.6-3ubuntu4.6
php >
Ne génère aucune charge particulière.
patbator est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 05/01/2011, 15h44   #18
Membre du Club
 
Inscription : août 2004
Messages : 35
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 35
Points : 48
Points : 48
Ha oui en effet, donc aucun problème sur PHP 5.2.6 sous Debian Lenny 32bits avec les derniers correctifs sur VirtualBox
Guildem est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 05/01/2011, 15h48   #19
Membre émérite
 
Avatar de 10_GOTO_10
 
Inscription : juillet 2004
Messages : 710
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 710
Points : 838
Points : 838
Citation:
Envoyé par willard Voir le message
EDIT: c'est quand meme rare de trouver des sites qui prennent des float dans les formulaires ... j'aurais bien voulu tester pour voir ...
Les convertisseurs (de monnaie, de longueur, ...), les devis en ligne, etc...

En tous cas ça plante super bien avec EasyPHP
10_GOTO_10 est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 05/01/2011, 15h54   #20
Membre habitué
 
Inscription : juin 2007
Messages : 352
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 352
Points : 110
Points : 110
Par défaut nada

Bah, testé sur mon ubuntu avec php 5.2.10, et pas de prblm en ligne de commande,...

Citation:
php -a
Interactive shell

php > $d = 2.2250738585072011e-308;
php > $d = 2.2250738585072011e-308;echo $d;
2.22507385851E-308
php -v
PHP 5.2.10-2ubuntu6.5 with Suhosin-Patch 0.9.7 (cli) (built: Sep 16 2010 19:48:40)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with Xdebug v2.0.4, Copyright (c) 2002-2008, by Derick Rethans
Hurin est déconnecté   Envoyer un message privé Réponse avec citation 12
Réponse Actualité déjà publiée
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h31.


 
 
 
 
Partenaires

Hébergement Web