Երկու շաբաթ անց նախորդ գլոբալ սխալից, երեկ Cloudflare-ի բովանդակության մատակարարման ցանցը, որը աշխատում է մեկ ինքնակամ 20% ամբողջական համաշխարհային web-թրաֆիկի վրա, 25 րոպե կանոնավոր չէր հասանելի: Պատահարի ընթացքում Cloudflare-ի շուրջ մեկ երրորդ հարցումները ավարտվել են դատարկ էջ վերադարձնելով 500 սխալի կոդով: Այս անգամ պատճառը եղել է Lua լեզվով կոդում մնացած տարվա ընթացքում անտեսված խնդիր:

Տեղեկ clients համակարգերը պաշտպանելու համար React ֆրազի մշակման սերվերի բաղադրիչներում առկա Կրիտիկական բացթողմամբ (CVE-2025-55182), ղեկավար Cloudflare-ի ինժեներները կարողացան իրականացնել պաշտպանություն WAF-ի մակարդակում: Պաշտպանության ներդրման ընթացքում ամեն ինչ ավելի հեշտ չանցավ։ Հիմնականի ներկա լինելը մի մեծ հաշիվ փաստաթղթերի այդպիսի ճյուղը շարունակվում էր:սերվերների, սակայն պարզվեց, որ WAF-ի համար փորձարկման գործիքների համար նվազեցված պրակտիկայի խորհուրդը չունի սահմանված փաստեր: Այդ գործիքը չի ազդում թրաֆիկի վրա, ուստի որոշում կայացվեց դադարեցնել այն:
Դադարեցնելու համար ինժեներները օգտագործեցին «killswitch» ենթակառուցվածքը կոնֆիգուրացիան արագ փոխելու և Lua-հղումները կանգնեցնելու համար պրաքսի սերվերներում, առանց որևէ կանոնների փոխարինման: Խնդիրների արագ լուծման համար նման կանոնների դադարեցման մեթոդը ժամանակ առ ժամանակ օգտագործվում է, և դա հանգեցնում է Lua-կոդի որոշ մասերի անտեսմանը: Սակայն ինժեներները հաշվի չեն առել, որ Lua-կանոններում դրան ընդունելու համար օգտագործվող մեթոդը «execute» էր, որը նախանշում է լրացուցիչ կանոնների հավաքակիր: Նախկինում «killswitch» ռեժիմը ոչ մի անգամ չի կիրառվել կանոններից, որոնք ունեն «execute» կանոնները, և այս համադրությունը փորձարկվել չէ:
«killswitch» կիրառումը հանգեցրեց նրան, որ լրացուցիչ փորձարկման հավաքակիր կանոնի կոդը դադարեցվեց, սակայն այդ հավաքակիրի կանոնները «execute»-ի միջոցով մնում էին: Մետանելի տեքստում լրացուցիչ օբյեկտի գոյության ստուգումներ չկային, և ենթադրվում էր, որ «execute» գործողության հավաքակում առկայություն ունենալու դեպքում, «rule_result.execute» օբյեկտը անպայման գոյություն ունի: Վերջում փորձարկման համար կատարվել էր մեթոդի «execute» կոչում չգրանցված օբյեկտի նպատակով, որը հանգեցրեց որ «attempt to index field ‘execute’ (a nil value)» սխալով խափանմանը: if rule_result.action == «execute» then rule_result.execute.results = ruleset_results[tonumber(rule_result.execute.results_index)] end
Ընտանիք: opennet.ru
