CVE-2023-50730
Açıklama
Grackle, Typelevel yığını üzerine inşa edilmiş, fonksiyonel Scala ile yazılmış bir GraphQL sunucusudur. GraphQL spesifikasyonu, GraphQL fragment'larının doğrudan veya dolaylı olarak döngüler oluşturmamasını gerektirir. Grackle sürüm 0.18.0 öncesinde bu gereksinim kontrol edilmiyordu ve döngüsel fragment'lar içeren sorgular tip kontrolü ve derleme için kabul ediliyordu. Bu tür fragment'ların derlenme girişimi, bir JVM `StackOverflowError` hatasının fırlatılmasıyla sonuçlanıyordu. Böyle bir sorgu oluşturmak için uygulamanın GraphQL şeması hakkında belirli bir bilgi gerekse de, uygulamaya özgü performans veya diğer davranışsal özellikler hakkında herhangi bir bilgiye ihtiyaç duyulmuyordu. Grackle, GraphQL sorgularını ayrıştırmak için cats-parse kütüphanesini kullanır. Sürüm 0.18.0 öncesinde Grackle, cats-parse `recursive` operatörünü kullanmaktaydı. Ancak `recursive` şu anda yığın güvenli (stack safe) değildir. `recursive`, ayrıştırıcıda üç yerde kullanılıyordu: iç içe geçmiş seçim kümeleri (selection sets), iç içe geçmiş girdi değerleri (listeler ve nesneler) ve iç içe geçmiş liste tipi tanımlamaları. Sonuç olarak, bunu istismar eden derinlemesine iç içe geçmiş seçim kümelerine, girdi değerlerine veya liste tiplerine sahip sorgular oluşturulabiliyor ve bu durum ayrıştırma sırasında bir JVM `StackOverflowException` hatasının fırlatılmasına neden oluyordu. Bu işlem sorgu işlemenin çok erken aşamasında gerçekleştiği için, böyle bir sorgu oluşturmak için uygulamanın GraphQL şeması hakkında özel bir bilgiye gerek duyulmuyordu. Küçük sorguların yığın taşmasına yol açma olasılığı, potansiyel bir hizmet reddi (DoS) zafiyetidir. Bu durum, güvenilmeyen kullanıcıları olan ve Grackle kullanan tüm uygulamaları potansiyel olarak etkilemektedir. Her iki yığın taşması sorunu da Grackle'ın v0.18.0 sürümünde çözülmüştür. Geçici bir çözüm olarak kullanıcılar, güvenilmeyen girdiler ile Grackle sorgu işlemi arasına temizleyici bir katman yerleştirebilirler.
Nasıl düzeltilir
- typelevel grackle0.18.0 ya da sonraki bir sürüm
- org.typelevel:grackle-core_2.130.18.0 ya da sonraki bir sürüm
- org.typelevel:grackle-core_30.18.0 ya da sonraki bir sürüm
- org.typelevel:grackle-core_sjs1_2.130.18.0 ya da sonraki bir sürüm
- org.typelevel:grackle-core_sjs1_30.18.0 ya da sonraki bir sürüm
- org.typelevel:grackle-core_native0.4_2.130.18.0 ya da sonraki bir sürüm
- org.typelevel:grackle-core_native0.4_30.18.0 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| typelevel grackle | v < 0.18.0 | 0.18.0 |
| org.typelevel:grackle-core_2.13Maven | v < 0.18.0 | 0.18.0 |
| org.typelevel:grackle-core_3Maven | v < 0.18.0 | 0.18.0 |
| org.typelevel:grackle-core_sjs1_2.13Maven | v < 0.18.0 | 0.18.0 |
| org.typelevel:grackle-core_sjs1_3Maven | v < 0.18.0 | 0.18.0 |
| org.typelevel:grackle-core_native0.4_2.13Maven | v < 0.18.0 | 0.18.0 |
| org.typelevel:grackle-core_native0.4_3Maven | v < 0.18.0 | 0.18.0 |
| edu.gemini:gsp-graphql-core_2.13Maven | v ≤ 0.14.0 | — |
| edu.gemini:gsp-graphql-core_3Maven | v ≤ 0.14.0 | — |
| edu.gemini:gsp-graphql-core_sjs1_2.13Maven | v ≤ 0.14.0 | — |
| edu.gemini:gsp-graphql-core_sjs1_3Maven | v ≤ 0.14.0 | — |
| edu.gemini:gsp-graphql-core_native0.4_2.13Maven | v ≤ 0.14.0 | — |
| edu.gemini:gsp-graphql-core_native0.4_3Maven | v ≤ 0.14.0 | — |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.