Chromium Chronicle n°9: ClusterFuzz

Épisode 9:Adrian Taylor à Mountain View (décembre 2019)
Épisodes précédents

Vous serez peut-être invité à corriger les bugs de sécurité à priorité élevée détectés par ClusterFuzz. De quoi est-il question ? Devriez-vous prendre ces bugs au sérieux ? Comment pouvez-vous nous aider ?

Organigramme de type "données aléatoires"

ClusterFuzz transmet les entrées à Chrome et surveille les plantages. Des vérifications supplémentaires sont activées sur certains de ces builds Chrome, comme AddressSanitizer, qui recherche les erreurs de sécurité liées à la mémoire.

ClusterFuzz attribue les composants en fonction de l'emplacement du plantage et attribue le niveau de gravité en fonction du type de plantage et de son éventuelle survenue dans un processus en bac à sable. Par exemple, l'utilisation après libération (use-after-free) de tas de mémoire a un niveau de gravité élevé, sauf s'il se trouve dans le processus du navigateur. Dans ce cas, c'est essentiel (aucun bac à sable pour limiter l'impact):

class Foo {
  Widget* widget;
};

void Foo::Bar() {
  delete widget;
  ...
  widget->Activate();  // Bad in the renderer process, worse in the
                       // browser process. Obviously, real bugs are
                       // more subtle. Usually.

ClusterFuzz génère des données à partir de fuzzers ou de bugs transmis en externe. Certains fuzzers sont basés sur libFuzzer, qui fait évoluer l'entrée pour augmenter la couverture du code. Certains comprennent la grammaire de la langue d'entrée convertie en protobufs. Lorsque ClusterFuzz détecte un plantage, il essaie de minimiser le scénario de test d'entrée, voire de le diviser en deux pour trouver le commit mis en cause. On y trouve beaucoup...

Vous pouvez nous aider à:

  • Être parano sur les durées de vie des objets et les dépassements d'entiers.
  • Ajoutez des fuzzers, en particulier lorsque vous traitez des données ou IPC non fiables (voir les liens ci-dessous, souvent inférieurs à 20 lignes de code).
  • Correction des bugs signalés par ClusterFuzz: ses heuristiques de gravité sont fiables, car elles sont basées sur l'exploitabilité réelle: même un débordement d'un octet a entraîné l'exécution de code arbitraire par un pirate informatique.

Ressources