Type confusion

Explication

  • Le programme peut dans certains cas interprété des données de type X comme étant de type Y
  • Mauvaise interprétation des données stockées en mémoire
    • Des valeurs contrôlées par l'utilisateur peuvent être inteprétées comme des pointeurs.
      • Pointeur de données
      • Pointeur de fonction

Explication

  • Confusion de type C++
    • Structure d'un objet
      • size_t* vtable (4 bytes ou 8 bytes)
      • ... variable local de l'objet
    • Structure d'une vtable
      • size_t* fct1
      • size_t* fct2
      • ...
    • La vtable est utilisée pour tous les appels dit "virtual" (polymorphisme).

Explication

  • Confusion de type C++
    • Si la confusion de type nous permet de contrôle le pointeur de vtable, on peut détourner les appels de fonction ailleurs. 
    • Pour ce faire on peut faire pointer la vtable sur
      • Une table existant d'un autre objet
      • Un espace mémoire qui contient des pointeur de fonction (GOT)
      • Une zone mémoire que l'on contrôle.
Made with Slides.com