
Tərtibatçılar CORS-u nə üçün hələ də anlamır: Zoom-un localhost zəifliyindən dərslər
Məsləhətçi Kris Fosterin 2019-cu il essesi Zoom-un localhost zəifliyi nümunəsində CORS-un anlaşılmamasının real təhlükəsizlik problemlərinə necə gətirdiyini və düzgün həllin necə görünməli olduğunu izah edir.
Full-stack məsləhətçisi Kris Fosterin 2019-cu ildə yazdığı və tərtibatçılar arasında hələ də dolaşan essesi göstərir ki, çox sayda veb tərtibatçı Cross-Origin Resource Sharing (CORS) mexanizmini anlamır və bu anlaşılmazlığın real təhlükəsizlik nəticələri var. Yazının əsas nümunəsi təhlükəsizlik tədqiqatçısı Jonathan Leitschuh-un 2019-cu ilin iyulunda açıqladığı Zoom masaüstü müştərisindəki localhost zəifliyidir.
Zoom-un localhost tələsi
Zoom müştərisi kompüterdə http://localhost:19421 ünvanını dinləyən veb server quraşdırırdı. İstifadəçi Zoom linkini açanda zoom.us saytı bu yerli serverə sorğu göndərib yerli tətbiqi açmağı tapşırırdı. Adi AJAX sorğusu yerinə səhifə yerli veb serverdən şəkil yükləyirdi və şəklin ölçüləri serverin status və ya xəta kodunu kodlaşdırırdı. Leitschuh yazısında bunun CORS-u yan keçmək üçün edildiyini irəli sürdü; onun sözlərinə görə brauzerlər localhost-da işləyən serverlər üçün CORS siyasətini tamamilə nəzərə almır.
Foster qeyd edir ki, bu iddia yanlışdır: Chrome yerli veb serverlər üçün də CORS başlıqlarına əməl edir və localhost-a edilən mənbələrarası sorğular bütün brauzerlərdə dəstəklənir — tərtibatçılar bunu Create React App interfeysi bir portda, API isə digərində işləyəndə daim edir. Onun fikrincə şəkil hiyləsi Zoom-un ya CORS-u anlamadığını, ya da onu qəsdən yan keçdiyini göstərir; bədəli ağır olub: yerli müştəridə əməliyyat başladıb cavabı oxuya bilən təkcə zoom.us deyildi, internetdəki hər hansı digər sayt da idi.
Təhlükəsiz tətbiq necə görünməli idi
Yerli veb server REST API təqdim etməli və Access-Control-Allow-Origin başlığını https://zoom.us dəyəri ilə göndərməli idi ki, onunla yalnız zoom.us domenində işləyən JavaScript danışa bilsin. Bundan başqa, zoom.us səhifələrin arxa planda səssizcə görüş açmasının qarşısını almaq üçün iframe daxilində göstərimi bloklayan Content Security Policy başlığı göndərməli idi. Yenə də bir məqam qalır: hər hansı səhifə brauzeri gözləmədiyiniz görüşün zoom.us linkinə yönləndirə bilər. Foster bunu proqram zəifliyi deyil, istifadəçi təcrübəsi qərarı kimi təsnif edir və qərarla razılaşmır: proqram təminatı proqnozlaşdırıla bilən olmalıdır və linkə klik kameranızı və mikrofonunuzu yad adamlara açmamalıdır. Daha yaxşı nümunə kimi Google Meet-in tətbiq daxili pəncərəsini göstərir.
Qarışıqlıq nə üçün davam edir
Problem Zoom ilə məhdudlaşmır: digər şirkətlər də eyni zəifliklə tutulub və Stack Overflow CORS sualları ilə doludur; onların yanında tez-tez təhlükəsiz olmayan defolt parametrlər tövsiyə olunur — məsələn, enable-cors.org-da dərc edilmiş Express nümunəsi olduğu kimi köçürülərsə tətbiqi müdafiəsiz edir. Texniki bəhanələr də əsassızdır: Firefox təhlükəsiz mənbədən qeyri-təhlükəsiz mənbəyə bəzi sorğuları bloklaya bilər, amma localhost-u dəstəkləyir, yerli tətbiqlər isə öz imzalı sertifikatını yarada və ya brauzer genişlənməsi ilə gələ bilər. Foster yekunlaşdırır ki, eyni mənbə siyasətini yan keçmək kodu işlədə bilər, lakin sonradan problemlər yaradır; CORS-un həddindən artıq mürəkkəb API olub-olmadığı, yoxsa sadəcə tərtibatçı təhsilinin çatmadığı isə hələ də aydın deyil.
SiTech — AI ilə gücləndirilmiş veb hazırlanması
Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.