Cloudflare serverlərində kodun icrasına icazə verən cdnj-lərdə zəiflik

JavaScript kitabxanalarının çatdırılmasını sürətləndirmək üçün nəzərdə tutulmuş, CDN serverlərində ixtiyari kodun icrasına imkan verən Cloudflare-in cdnjs məzmun çatdırma şəbəkəsində kritik zəiflik aşkar edilib. Problemin təhlükəsi ondan ibarətdir ki, İnternetdəki bütün saytların təxminən 12.7%-i JavaScript kitabxanalarını yükləmək üçün xidmətdən istifadə edir və infrastrukturun kompromissi bu saytlardan hər hansı birinin təqdim etdiyi kitabxanaları əvəz etməyə imkan verir.

cdnjs xidməti paketləri Git və ya NPM repozitoriyasından endirir, bundan sonra JavaScript kitabxanalarının yüklənməsini sürətləndirmək üçün istənilən sayta Cloudflare məzmun çatdırma şəbəkəsindən pulsuz istifadə etməyə imkan verir. GitHub-da dərc edilən cdnjs komponentlərinin kodunu öyrənərkən məlum oldu ki, NPM paketlərini tgz arxivlərində açmaq üçün yol normallaşdırmadan faylların siyahısını olduğu kimi yaradan Go dilində standart arxiv/tar modulundan istifadə olunur. Skript verilmiş siyahıya əsasən məzmunu açdığı halda, arxivdə “../../../../../../../tmp/test” kimi faylların olması ola bilər. giriş hüquqlarının icazə verdiyi qədər sistemdə ixtiyari faylların üzərinə yazılmasına gətirib çıxarır.

Təcavüzkarın öz kitabxanasını cdnj-lərə əlavə etmək və NPM repozitoriyasına yolda “../” simvolları olan faylları ehtiva edən xüsusi hazırlanmış arxivi yükləmək üçün sorğu göndərə biləcəyi təklif olunurdu. cdnjs serverlərində vaxtaşırı "avtoupdate" əməliyyatı həyata keçirilir, bu müddət ərzində işləyici təklif olunan kitabxananın yeni versiyalarını yükləyir və məzmunu açır. “../” yolları olan fayllardan istifadə edərək təcavüzkar xidmət skriptləri olan faylların üzərinə yaza və onların kodunu paketdən çıxarmanın həyata keçirildiyi serverdə icra edə bilər.

Git-dən yeniləmələrin yüklənməsi vəziyyətində, yeniləmələri endirən işləyicinin Git-dən faylları köçürərkən simvolik bağlantıları nəzərə almadığı aşkar edilmişdir. Bu funksiya Git-ə simvolik keçidlər əlavə etməklə serverdən istənilən faylın oxunmasını təşkil etməyə imkan verdi.

Faylın oxunması ilə bağlı fərziyyəni sınaqdan keçirərək HackerOne-da mükafat almaq üçün cdnj-lərin sındırılmasının nümayişi ilə təcrübələrə başlamaq qərara alındı. /proc/self/maps faylına işarə edərək, CDN vasitəsilə xidmət edilən JavaScript kitabxanasının Git repozitoriyasına test.js simvolik keçid əlavə edilib. Kitabxananın yeni versiyasını dərc etdikdən sonra yeniləmə işləyicisi bu anbarı emal etdi və göstərilən faylı cdnjs-də dərc etdi (test.js simvolik keçid kimi yaradıldı və bu fayl tələb edildikdə, /proc/self/maps məzmunu qaytarıldı. ).

/proc/self/environ faylına simvolik keçidi əvəz edən tədqiqatın müəllifi qeyd etdi ki, verilən məlumatlarda GITHUB_REPO_API_KEY və WORKERS_KV_API_TOKEN mühit dəyişənlərinin dəyərləri var. Birinci dəyişən GitHub-da robocdnjs repozitoriyasına yazı girişi üçün API açarını saxladı. İkinci dəyişən nişanı cdnjs-də KV yaddaşında saxladı. Alınan məlumatlardan istifadə edərək, təcavüzkar cdnj-lərdə dəyişikliklər edə və infrastrukturu tamamilə poza bilər.

Mənbə: opennet.ru

Добавить комментарий