Zakaj je internet minuli teden klecnil

Matej Huš

13. jul 2019 ob 22:45:46

V začetku meseca so imele številne popularne spletne strani težave z dosegljivostjo. Nevšečnosti je zakuhal Cloudflare, ki ponuja gostovanje številnim stranem in skrbi za njihovo zaščito pred napadi DDoS. Toda če se zalomi Cloudflaru, so posledice globalne. Ko je 2. julija Cloudflare napravil napako, smo to občutili po vsem svetu. John Graham-Cumming iz Cloudflara v odkritem opisu pojasnjuje, kaj je šlo napak in kako so se odzvali. To je bil prvi globalni Cloudflarov izpad v zadnjih šestih letih.

Težave so se začele, ko so 2. julija ob 13.42 v svoj WAF (Web Application Firewall) dodali novo pravilo, ki ni bilo pravilno zapisano. Zaradi nepravilno zapisanega pravila v obliki regex (regular expression)

(?:(?:\"|'|\]|\}|\\|\d|(?:nan|infinity|true|false|null|undefined|symbol|math)|\`|\-|\+)+[)]*;?((?:\s|-|~|!|{}|\|\||\+)*.*(?:.*=.*)))
so preobremenili procesorje, ki so dosegli 100-odstotno obremenjenost. Šlo je za napako backtrack. To pomeni, da je Cloudflare izgubil sposobnost streči strani prek HTTP/HTTPS, kar od njega pričakujejo stranke. Ob obisku spletnih strani so zato obiskovalci dobili le obvestilo o napaki 502 Bad Gateway. Toda čeprav je bil to sprožilec, je celotna zgodba bistveno kompleksnejša.

Tri minute pozneje je prva stran PagerDuty, ki predstavlja sintetični test za WAF, že klecnila. Kasneje je klecnila še vrsta drugih strani, ki so povezani z ostalimi testi. Kmalu so začele padati tudi strani strank in ob 14.00 je bilo jasno, da ima WAF težavo. Ob 14.07 so globalno ugasnili WAF (global WAF kill). Ob 14.52 so imeli pripravljen in distribuiran popravek.

Izpad je povzročilo zaporedje več dogodkov. Napačni izraz regex, ki se mu je pridružil po naključju izključen sistem za preprečevanje preobremenitve procesorjev, test, ki ni meril preobremenitev CPU, globalna sprovedba spremembe namesto stopenjske ipd. Več podrobnosti pa je v izčrpnem opisu, ki ga je pripravil Cloudflare.