CVE-2022-49647
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: cgroup: Migration için css_sets ön yüklemesi yapılırken ayrı src/dst düğümleri kullanın Her bir cset (css_set), görevleri tarafından sabitlenir. Bir migration işlemi için görevleri cset'ler arasında taşıdığımızda, görevleri taşırken yok olmadıklarından emin olmak için kaynak ve hedef cset'leri tutmamız gerekir. Bu işlem, cset->mg_preload_node'un ya mgctx->preloaded_src_csets ya da mgctx->preloaded_dst_csets listesine bağlanmasıyla gerçekleştirilir. Bir cset aynı anda hem kaynak hem de hedef olamayacağı için, hem src hem de dst listeleri için aynı cset->mg_preload_node'un kullanılması uygun görülmüştü. Ne yazık ki bu aşırı yükleme, bir migration işlemine birden fazla görevin dahil olduğu ve bunlardan bazılarının kimlik noop migration'ları iken diğerlerinin gerçekten cgroup'lar arasında taşındığı durumlarda sorunlu hale gelmektedir. Örneğin, cgroup1 üzerinde şu sıra ile gerçekleşebilir: #1> mkdir -p /sys/fs/cgroup/misc/a/b #2> echo $$ > /sys/fs/cgroup/misc/a/cgroup.procs #3> RUN_A_COMMAND_WHICH_CREATES_MULTIPLE_THREADS & #4> PID=$! #5> echo $PID > /sys/fs/cgroup/misc/a/b/tasks #6> echo $PID > /sys/fs/cgroup/misc/a/cgroup.procs grup liderini içeren süreç tekrar a'ya döner. Bu son migration işleminde, lider olmayan thread'ler kimlik migration'ı yaparken grup lideri gerçek bir migration yapar. #3 adımından sonra tüm sürecin cset A'da olduğunu ve #4 adımından sonra liderin cset B'ye geçtiğini varsayalım. Ardından, #6 sırasında şunlar gerçekleşir: 1. Lider için B üzerinde cgroup_migrate_add_src() çağrılır. 2. Diğer thread'ler için A üzerinde cgroup_migrate_add_src() çağrılır. 3. cgroup_migrate_prepare_dst() çağrılır. Src listesini tarar. 4. B'nin A'ya migrate olmak istediğini fark eder, bu nedenle A'yı dst listesine eklemeye çalışır ancak ->mg_preload_node'un zaten meşgul olduğunu görür. 5. Daha sonra A'nın bir kimlik migration'ı olduğu için A'ya migrate olmak istediğini fark eder; bunun üzerine ->mg_preload_node'unu list_del_init() yaparak onu ayıklar ve referansları buna göre yerleştirir. 6. Migration işleminin geri kalanı, src listesinde B varken dst listesinde hiçbir şey olmadan gerçekleşir. Bu durum, migration devam ederken A'nın tutulmadığı anlamına gelir. Eğer tüm görevler migration bitmeden önce A'dan ayrılırsa ve gelen görev onu sabitlerse, cset imha edilecek ve bu da serbest bırakıldıktan sonra kullanım (use-after-free) hatasına yol açacaktır. Buna, cset->mg_preload_node'un hem src hem de dst ön yükleme listeleri için aşırı yüklenmiş olması neden olmaktadır. Cset'i src listesinden hariç tutmak isterken yanlışlıkla dst listesinden de hariç tutmuş olduk. Bu yama, cset->mg_preload_node'u ->mg_src_preload_node ve ->mg_dst_preload_node olarak ayırarak sorunu düzeltmekte, böylece src ve dst ön yüklemelerinin birbirini etkilememesi sağlanmaktadır.
Nasıl düzeltilir
- linux linux_kernel4.14.289, 4.19.253, 5.4.207, 5.10.132, 5.15.56, 5.18.13 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 3.16 ≤ v < 4.14.289, 4.15 ≤ v < 4.19.253, 4.20 ≤ v < 5.4.207, 5.5 ≤ v < 5.10.132, 5.11 ≤ v < 5.15.56, 5.16 ≤ v < 5.18.13, 5.19 | 4.14.289, 4.19.253, 5.4.207, 5.10.132, 5.15.56, 5.18.13 |
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.