IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Framework .NET Discussion :

Des ingénieurs découvrent une faille dans le compilateur RyuJIT embarqué dans .NET Framework 4.6


Sujet :

Framework .NET

  1. #1
    Chroniqueur Actualités

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    8 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2013
    Messages : 8 457
    Points : 197 848
    Points
    197 848
    Par défaut Des ingénieurs découvrent une faille dans le compilateur RyuJIT embarqué dans .NET Framework 4.6
    Des ingénieurs découvrent une faille dans le compilateur RyuJIT embarqué dans .NET Framework 4.6,
    qui peut générer du code de façon aléatoire

    Un peu plus tôt cette semaine, des ingénieurs ont découvert une faille dans le compilateur RyuJIT embarqué dans de l’environnement d’exécution .NET 4.6 qui affecte le modèle d’appel Tail Call Optimization. « Les méthodes que vous appelez peuvent prendre des paramètres avec des valeurs différentes de celles que vous avez passées », a expliqué Nick Craver, développeur logiciel sur Stack Overflow, l’un des sites web du réseau Stack Exchange qui propose des questions et réponses sur un large choix de thèmes concernant la programmation informatique. Il a travaillé en coordination avec un autre développeur logiciel de la même plateforme appelé Marc Gravell.

    Un bug qui a été difficile à repérer parce qu’il ne se produit que lorsque les optimisations sont activées. Cela signifie que vous pouvez développer votre application, l'exécuter dans Visual Studio et tout fonctionnera parfaitement bien. Ce n’est que lorsque vous compilerez une build de production que le problème va se produire. Craver explique qu’arrêter le débogueur change le comportement et cache souvent le problème. Ce dernier a été remarqué à Stack Overflow parce que son code de mise en cache HTTP ne fonctionnait pas avec le nouvel environnement d'exécution, conduisant à l’obtention de résultats imprévisibles. Jetez plutôt un œil sur le code ci-dessous qui met en exergue le problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    void Set<T>(string key, T val, int? durationSecs, bool sliding, bool broadcastRemoveFromCache = false)
    {
        SetWithPriority<T>(key, val, durationSecs, sliding, CacheItemPriority.Default);
    }
     
    void SetWithPriority<T>(string key, T val, int? durationSecs, bool isSliding, CacheItemPriority priority)
    {
        key = KeyInContext(key);
     
        RawSet(key, val, durationSecs, isSliding, priority);
    }
     
    void RawSet(string cacheKey, object val, int? durationSecs, bool isSliding, CacheItemPriority priority)
    {
        var absolute = !isSliding && durationSecs.HasValue 
                       ? DateTime.UtcNow.AddSeconds(durationSecs.Value) 
                       : Cache.NoAbsoluteExpiration;
        var sliding = isSliding && durationSecs.HasValue 
                      ? TimeSpan.FromSeconds(durationSecs.Value) 
                      : Cache.NoSlidingExpiration;
     
        HttpRuntime.Cache.Insert(cacheKey, val, null, absolute, sliding, priority, null);
    }
    Les ingénieurs expliquent que, dans la dernière chaîne et UNIQUEMENT QUAND L’OPTIMISATION EST ACTIVEE, RawSet() est incorrectement optimisée. Par exemple, ils ont appelé Set( T ) avec le paramètre durationSecs a qui était attribuée la valeur 3600, valeur qui a été modifiée de façon aléatoire une fois passée à la méthode RawSet. Elle pouvait par exemple devenir 50, 30, 47 ou même null.

    Ils ont exhorté la communauté à désactiver RyuJIT en production en attendant qu’un correctif soit disponible et ont contacté Microsoft pour lui faire part du problème.

    Par le biais de Rich Lander, un développeur faisant partie de l’une de ses équipes, Microsoft a reconnu le problème, avançant que l’équipe responsable de RyuJIT a résolu le problème et travaille déjà sur un correctif qui sera disponible en téléchargement. « Ce problème est de nature étriquée dans le sens où votre code doit utiliser des types de données spécifiques, les transmettre de manière spécifique puis exécuter des opérations spécifiques. Très peu de programmes sauront satisfaire l'ensemble de ces caractéristiques qui s’avèrent nécessaires pour déclencher ce bug de génération de code. Nous avons examiné ce problème pour déterminer s’il est exploitable. Nous n’avons pas identifié d’exploit, mais nous lançons les modifications dans notre processus au même rythme que nous l’aurions fait s’il s’agissait d’un exploit ».

    Il a expliqué que l’équipe .NET a fourni une analyse détaillée suite à des dizaines de milliers de tests dont les statistiques suggèrent que la majorité des développeurs .NET ne feront pas l’expérience de ce problème. « Nous avons de nombreux tests intensifs sur les bibliothèques de notre .NET Framework (par exemple System.Xml). Nous n’avons pas été en mesure de trouver un seul cas où s’est manifesté ce problème sur de grandes portions de code. Du point de vue de la production, less propriétés Web importantes de Microsoft ont été exécutés sur des préversions du .NET Framework 4.6 pendant des mois sans que ce problème ne soit déclenché ».

    Microsoft a tenu à remercier l’équipe des développeurs qui lui ont communiqué le problème.

    Source : blog Nick Craver, blog MSDN
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 262
    Points : 634
    Points
    634
    Par défaut
    En tout cas ces ingénieurs mérite bien plus que de simple remerciements !
    Encore bravo à eux pour cette découverte.
    Aujourd'hui apprenant, demain appreneur.
    N'accuse pas le puits d'être trop profond,
    c'est peut-être ta corde qui est trop courte

  3. #3
    Membre expert
    Profil pro
    undef
    Inscrit en
    Février 2013
    Messages
    959
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : Février 2013
    Messages : 959
    Points : 3 527
    Points
    3 527
    Par défaut
    Si les débogueurs ne font plus leur job, ça va devenir compliqué d'avoir un code secure.

  4. #4
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Pour le coup, il semblerait que c'est l'optimiseur le responsable et pas le débogueur. Ce n'est pas la première fois et probablement pas la dernière qu'un compilateur à ce genre de bug lié à une optimisation.

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    1 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 030
    Points : 4 203
    Points
    4 203
    Par défaut
    Bravo encore à ces ingénieurs pour cette découverte.

    Ce qui est appréciable aussi, c'est que Microsoft ait pris en compte et corrigé ce bug, malgré, apparemment, la très faible probabilité qu'il se produise.

    On a vraiment l'impression qu'avec Windows 10, c'est la révolution chez Microsoft.

  6. #6
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Encore heureux qu'ils le corrigent. J'imagine mal la réputation qu'ils se feraient s'ils refusaient de corriger un tel bug sur ce qui est censé être le fer de lance de leurs outils.

  7. #7
    Membre expert
    Profil pro
    undef
    Inscrit en
    Février 2013
    Messages
    959
    Détails du profil
    Informations personnelles :
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : undef

    Informations forums :
    Inscription : Février 2013
    Messages : 959
    Points : 3 527
    Points
    3 527
    Par défaut
    Citation Envoyé par Uther Voir le message
    Pour le coup, il semblerait que c'est l'optimiseur le responsable et pas le débogueur. Ce n'est pas la première fois et probablement pas la dernière qu'un compilateur à ce genre de bug lié à une optimisation.
    Ne peut-on plus rattacher un processus en cours d'exécution au débogueur de Microsoft ?

  8. #8
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 262
    Points : 634
    Points
    634
    Par défaut
    Citation Envoyé par 23JFK Voir le message
    Si les débogueurs ne font plus leur job, ça va devenir compliqué d'avoir un code secure.
    A ta place je ne dirai pas çà ! Je dirai plutôt que c'est la preuve qu'en informatique aucun travail ne peut être parfait.
    Quelqu'en soit ton professionnalisme, tes compétences ou ton expérience, tu auras toujours quelque chose à apprendre des autres
    Aujourd'hui apprenant, demain appreneur.
    N'accuse pas le puits d'être trop profond,
    c'est peut-être ta corde qui est trop courte

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 15
    Points : 22
    Points
    22
    Par défaut rattacher
    Hum pour rattacher un exécutable au debugger il vaut mieux qu'il soit compilé en debug sinon le debugger ne peut pas faire grand chose, et compiler en mode debug débraie la plupart des optimisations des compilateurs. Donc une erreur de l'optimiseur se voit rarement en debug, c'est tout le problème. Maintenant je restai sur de la méfiance envers les optimiseurs (en C en particulier) certains optimiseurs se basant sur une façon de programmer fixée et sinon le résultat pouvant être surprenant voire épouvantable.

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/10/2017, 19h40
  2. Des chercheurs trouvent une faille dans l’algorithme RSA
    Par Hinault Romaric dans le forum Sécurité
    Réponses: 12
    Dernier message: 09/12/2016, 09h32
  3. Des chercheurs découvrent une faille dans la mémoire cache
    Par Olivier Famien dans le forum Actualités
    Réponses: 35
    Dernier message: 02/05/2015, 19h34
  4. Réponses: 1
    Dernier message: 14/01/2014, 11h31
  5. Des chercheurs découvrent une faille de sécurité critique dans SSL
    Par Hinault Romaric dans le forum Sécurité
    Réponses: 26
    Dernier message: 04/10/2011, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo