name: inverse layout: true class: center, middle, inverse --- # CloudFlare ## ou *'Ce qui se passa le 23 février #cloudbleed'* .cloudbleed-img[] #### https://tikiki.github.io/forma-cloudflare --- ## Mais qu'est-ce que c'est quoi dis-donc # CloudFlare ? --- layout: false .left-column[ ## CloudFlare .cloudflare-logo-img[] ] .right-column[ CloudFlare est une entreprise américaine, créée en 2009. Ils proposent des services satellites à un hébergement : - CDN (Content Delivery Network) - DNS distribué et réseau anycast - Reverse proxy - Proxy cache - Optimisation de sites Web (cache, minification et concaténation de JS, GZIP...) - Protection des adresses mail - Réécriture des liens en HTTPS - Protection DDoS - Chiffrement SSL ] --- template: inverse # Comment ça marche ? --- .left-column[ ## Comment ça marche ? ] .right-column[ Cloudflare est *entre* votre site et les visiteurs  Navigateur : `nymous.io` ➡ Serveur Cloudflare ➡ Serveur de `nymous.io` ➡ Modification du contenu sur leurs serveurs ] --- template: inverse # Les faits ## *Que faisiez-vous le vendredi à 17h54 M. Smith ?* --- layout: false .left-column[ ## Timelapse ] --- count: false .left-column[ ## Timelapse ### Découverte du problème ] .right-column[ - 18/02/2017 0:11 : Tavis Ormandy (chercheur en sécurité chez Google) envoie un tweet à CloudFlare .taviso-img[] ] --- count: false .left-column[ ## Timelapse ### Découverte du problème ] .right-column[ - 18/02/2017 0:11 : Tavis Ormandy (chercheur en sécurité chez Google) envoie un tweet à CloudFlare ] .right-column-no-padding[ - 18/02/2017 0:32 : Cloudflare reçoit plus d'infos de la part de Google ] --- count: false .left-column[ ## Timelapse ### Découverte du problème ### Recherche de l'origine ] .right-column[ - 18/02/2017 0:11 : Tavis Ormandy (chercheur en sécurité chez Google) envoie un tweet à CloudFlare ] .right-column-no-padding[ - 18/02/2017 0:32 : Cloudflare reçoit plus d'infos de la part de Google ] .right-column-no-padding[ - 18/02/2017 0:40 : Une équipe s'assemble à San Francisco pour rechercher d'où vient le bug ] -- count: false .right-column-no-padding[ - 18/02/2017 01:19 : Cloudflare découvre que le problème est causé par leur service d'obfuscation d'email ; désactivation mondiale ] -- count: false .right-column-no-padding[ - 18/02/2017 01:22 : Une équipe se forme à Londres, pour pouvoir travailler en continu ] -- count: false .right-column-no-padding[ - 18/02/2017 04:24 : Cloudflare découvre que le problème apparait aussi à cause de la réécriture automatique des liens en HTTPS ; désactivation mondiale ] --- count: false .left-column[ ## Timelapse ### Découverte du problème ### Recherche de l'origine ### Déploiement du fix ] .right-column[ - 18/02/2017 7:22 : Cloudflare découvre la vraie origine du problème (le cf-parser) ; rédaction d'un patch pour le désactiver mondialement ] -- count: false .right-column-no-padding[ - 20/02/2017 21:59 : Cloudflare déploie le bugfix pour leur cf-parser ] -- count: false .right-column-no-padding[ - 21/02/2017 18:03 : Tous les services qui avaient été désactivés sont relancés ] -- count: false .right-column[] .right-column[] .right-column[] .right-column[] .right-column[] .right-column[ - Réaction et fix rapide de Cloudflare, déployé sur toute leur infrastructure instantanément - Travail en collaboration avec les moteurs de recherche (Google, Bing, DuckDuckGo) pour retirer des caches les résultats dangereux ] --- template: inverse # D'où venait le problème ? --- .left-column[ ## Comment ? ] .right-column[ Pour la plupart de leurs services, Cloudflare doit parser la page ➡ Développement de leur propre parseur avec Ragel ```c /* generated code */ *if ( ++p == pe ) goto _test_eof; ``` ➡ Le pointeur `p` peut sauter après la fin du fichier ! ➡ buffer overrun Ça arrive si une page finit avec un tag cassé (e.g. `