İki həftə əvvəlki qlobal uğursuzluqdan sonra dünən Cloudflare məzmun çatdırma şəbəkəsi, dünyanın təxminən 20% veb trafikini idarə edən, 25 dəqiqə müddətində qismən əlçatmaz oldu. Hadisə zamanı Cloudflare vasitəsilə edilən sorğuların təxminən üçdə bir hissəsi 500 kodlu xəta ilə boş səhifə ilə nəticələndi. Bu dəfə, problem, uzun illər gözardı edilmiş bir Lua kodu problemi idi ki, bu da WAF (Web Tətbiq Firewall) sistemində zərərli sorğuların bloklanması üçün istifadə olunur.

Müştəri sistemlərini React framework'ünün server komponentlərindəki kritik zəiflikdən (CVE-2025-55182) qorumaq üçün, publikaya buraxılmış exploit sonrası Cloudflare mühəndisləri WAF səviyyəsində qoruma tətbiq etdilər. Qorumanın tətbiqi zamanı hər şey yaxşı getmədi: prosesin gedişatında proxy-yükləmə üçün trafik yoxlamaqda istifadə olunan tamponun ölçüsü artırıldı,serverlər, lakin tətbiq edilən WAF test alətinin müəyyən edilmiş tampon ölçüsünü dəstəkləmədiyi aşkar oldu. Bu alətin trafikə təsir etmədiyi üçün onun istifadəsini dayandırmaq qərarına gəldilər.
Dayandırma üçün mühəndislər, konfiqurasiyanı sürətlə dəyişdirmək və proxy serverlərdə ayrı Lua işleyiciləri aktarmadan fidar etdikləri «killswitch» alt sistemindən istifadə etdilər. Belə bir qayda dayandırma üsulu, səhvləri tez aradan qaldırmaq üçün müntəzəm olaraq tətbiq edilir və Lua kodunun müəyyən hissələrinin icrasını qaçırır. Bu zaman mühəndislər, Lua qaydalarında deaktiv edilən test alətinin çağırılmasında «execute» metodunun istifadə edildiyini nəzərə almadılar, bu da əlavə qaydalar toplusunu tetikleyir. Daha əvvəl «killswitch» rejimi «execute» çağıran qaydalarla heç vaxt tətbiq olunmamışdı və bu kombinasiya test edilməmişdi.
«Killswitch» istifadəsi, əlavə test qaydaları toplusunu təyin edən kodun deaktiv olmasına səbəb oldu, lakin bu qayda toplusuna olan çağırış «execute» vasitəsilə qaldı. Koddakı obyektin mövcudluğunu yoxlayan əlavə yoxlamalar yox idi və «execute» işinin olduğu qaydalar toplusunda olduğu müddətcə «rule_result.execute» obyektinin mütləq mövcud olduğu gözlənilirdi. Nəticədə, qeyri-şkaladan olan bir obyektin «execute» metodunun icrasının cəhdinə səbəb olan bir xəta baş verdi: «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
Mənbə: opennet.ru
