CVE-2024-43414
Təsvir
Apollo Federation API-ləri deklarativ şəkildə vahid qrafa birləşdirən arxitekturadır. Hər komanda qrafın öz hissəsinə müstəqil sahib ola bilər və bununla da avtonom və mərhələli şəkildə çatdırılma imkanı əldə edir. @apollo/query-planner >=2.0.0 və <2.8.5 versiyalarının nüsxələri xidmətdən imtina zəifliyindən təsirlənir. @apollo/gateway >=2.0.0 və < 2.8.5 versiyaları və Apollo Router <1.52.1 də @apollo/query-panner istifadəsi səbəbindən təsirlənir. Əgər @apollo/query-planner-dən kifayət qədər mürəkkəb sorğunun planlaşdırılması tələb olunarsa, o, sonsuz dövrəyə girə və heç vaxt tamamlana bilməz. Bu, qeyri-məhdud yaddaş istehlakına və nəticədə ya çökməyə, ya da yaddaşın tükənməsi (OOM) səbəbindən dayandırılmaya gətirib çıxarır. Bu problem, ən azı bir @key olmayan sahənin birdən çox altqraf tərəfindən həll edilə bildiyi halda tetiklənə bilər. Bu paylaşılan sahələri müəyyən etmək üçün hər altqrafın sxemi nəzərdən keçirilməlidir. Paylaşılan sahələri müəyyən etmə mexanizmi altqraflarınızın istifadə etdiyi Federation versiyasından asılı olaraq dəyişir. Altqraflarınızın Federation 1 və ya Federation 2 istifadə etdiyini sxemlərinə baxaraq yoxlaya bilərsiniz. Federation 2 altqraf sxemlərində istifadə olunan Federation versiyasına istinad edən @link direktivi olacaq, Federation 1 altqraflarında isə olmayacaq. Məsələn, Federation 2 altqrafında @link(url: "https://specs.apollo.dev/federation/v2.0") kimi bir sətir tapa bilərsiniz. Əgər altqraf sxeminizdə oxşar @link direktivi yoxdursa, o, Federation 1 istifadə edir. Qeyd edək ki, superqraf Federation 1 və Federation 2 altqraflarının qarışığını ehtiva edə bilər. Bu problem, Apollo sorğu planlaşdırıcısının bəzi hallarda Javascript-in Number.MAX_VALUE dəyərini aşan bir Number istifadə etməyə cəhd etməsindən qaynaqlanır. Javascript-də Number.MAX_VALUE (2^1024 - 2^971)-dir. Sorğu planlaşdırıcısı daxil olan graphql sorğusunu qəbul etdikdə, sorğunu hissələrə bölür və hər hissə üçün həmin hissəni həll etmək üçün potensial icra addımlarının siyahısını yaradır. Bu namizədlər sorğu planlaşdırıcısının daha böyük sorğunun hissələrini təmin etmək üçün atacağı addımları təmsil edir. Normal əməliyyatların bir hissəsi olaraq, sorğu planlaşdırıcısı ümumi sorğu üçün mümkün sorğu planlarının sayını tələb edir və hesablayır. Yəni, sorğunun hər hissəsi üçün sorğu planı namizədlərinin sayının hasilinə ehtiyac duyur. Normal şəraitdə, bütün sorğu planı namizədlərini yaratdıqdan və bütün permutasiyaların sayını hesabladıqdan sonra sorğu planlaşdırıcısı namizədləri sıralamağa və optimal olmayan variantları budamağa keçir. Xüsusilə mürəkkəb sorğularda, xüsusən də sahələrin birdən çox altqraf vasitəsilə həll oluna bildiyi hallarda, bu, bütün sorğu planı permutasiyalarının sayının kəskin artmasına səbəb ola bilər. Ən pis ssenarilərdə bu, Number.MAX_VALUE-dən böyük bir rəqəm ola bilər. Javascript-də Number.MAX_VALUE aşıldıqda, Javascript dəyəri "infinity" kimi təqdim edir. Əgər namizədlərin sayı infinity kimi qiymətləndirilirsə, sorğu planlaşdırıcısının optimal olmayan sorğu planlarını budamaq üçün məsul olan komponenti əslində namizədləri budamır və bu, sorğu planlaşdırıcısının lazım olduğundan qat-qat çox sorğu planı namizədini qiymətləndirməsinə səbəb olur. Bu problem @apollo/query-planner v2.8.5, @apollo/gateway v2.8.5 və Apollo Router v1.52.1-də həll edilmişdir. İstifadəçilərə yeniləmə tövsiyə olunur. Bu problemdən birdən çox altqrafdan həll oluna bilən sahələrin olmamasını təmin etməklə qaçmaq olar. Əgər bütün altqraflar Federation 2 istifadə edirsə, altqraf sxemlərinizin heç birinin @shareable direktivindən istifadə etmədiyini təmin etməklə təsirlənmədiyinizi təsdiqləyə bilərsiniz. Əgər Federation 1 altqrafları istifadə edirsinizsə, birdən çox altqraf tərəfindən həll oluna bilən sahələrin olmadığını yoxlamalısınız.
Necə düzəltmək olar
- apollographql apollo_gateway2.8.5 və ya daha yeni versiya
- apollographql apollo-router1.52.1 və ya daha yeni versiya
- apollographql apollo_helms-charts_router1.52.1 və ya daha yeni versiya
- apollographql apollo_query-planner2.8.5 və ya daha yeni versiya
- apollographql apollo_router1.52.1 və ya daha yeni versiya
- apollo-router1.52.1 və ya daha yeni versiya
- @apollo/query-planner2.8.5 və ya daha yeni versiya
- @apollo/gateway2.8.5 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| apollographql apollo_gateway | 2.0.0 ≤ v < 2.8.5 | 2.8.5 |
| apollographql apollo-router | v < 1.52.1 | 1.52.1 |
| apollographql apollo_helms-charts_router | v < 1.52.1 | 1.52.1 |
| apollographql apollo_query-planner | 2.0.0 ≤ v < 2.8.5 | 2.8.5 |
| apollographql apollo_router | v < 1.52.1 | 1.52.1 |
| apollo-routercrates.io | v < 1.52.1 | 1.52.1 |
| @apollo/query-plannernpm | 2.0.0 ≤ v < 2.8.5 | 2.8.5 |
| @apollo/gatewaynpm | 2.0.0 ≤ v < 2.8.5 | 2.8.5 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.