CVE-2025-71066

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: net/sched: ets: ets_qdisc_change funksiyasında silməmişdən əvvəl sinfi həmişə aktiv siyahıdan çıxarın [email protected] bildirir ki: Zəiflik `ets_qdisc_dequeue` və `ets_qdisc_change` arasında yaranan yarış vəziyyətidir (race condition). Bu, `struct Qdisc` obyekti üzərində UAF (use-after-free) xətasına səbəb olur. Hücumçunun bu xətanı tetikləmək üçün yeni istifadəçi və şəbəkə ad sahələri (namespace) yaratmaq imkanına malik olması tələb olunur. Analizin sonundakı əlavə şərhlərə baxın. Analiz: static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt, struct netlink_ext_ack *extack) { ... // (1) bu kilid .change idarəedicisinin (`ets_qdisc_change`) // .dequeue idarəedicisi ilə (`ets_qdisc_dequeue`) yarışmasının qarşısını alır 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) sinif q->active siyahısına əlavə edilir 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, indi dequeue .change idarəedicisinin // qalan hissəsi ilə paralel çağırıla bilər sch_tree_unlock(sch); ets_offload_change(sch); for (i = q->nbands; i < oldbands; i++) { // (4) sinfin qdisc-i üçün istinad sayını azaldırıq və onu azad edirik qdisc_put(q->classes[i].qdisc); // (5) Əgər (4) və (5) arasında .dequeue çağırsaq, ciddi bir UAF yaranacaq və RIP-i idarə edə bilərik 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; } Şərh: Bu, bəzi siniflərin qdisc-ləri NULL-a təyin edilsə də, aktiv siyahıda qalması səbəbindən baş verir. Bu commit, əlaqəli qdisc-i silməzdən və azad etməzdən əvvəl sinfi həmişə aktiv siyahıdan çıxarmaqla problemi həll edir. Yenidən istehsal etmə addımları ([email protected] tərəfindən göndərilən versiyanın qısaldılmış forması) ``` 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 ---kəsilmişdir---

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux
Dərc13 yan 2026
İlk görülmə13 yan 2026

Necə düzəltmək olar

Yeniləyin
  • Linux Linux062d5d544e564473450d72e6af83077c2b2ff7c3, c7f6e7cc14df72b997258216e99d897d2df0dbbd, a75d617a4ef08682f5cfaadc01d5141c87e019c9, 9987cda315c08f63a02423fa2f9a1f6602c861a0, 06bfb66a7c8b45e3fed01351a4b087410ae5ef39, 45466141da3c98a0c5fa88be0bc14b4b6a4bd75c, ce052b9402e461a9aded599f5b47e76bc727f7de, 5.10.248, 5.15.198 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
Linux Linuxae2659d2c670252759ee9c823c4e039c0e05a6f2 ≤ 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.16062d5d544e564473450d72e6af83077c2b2ff7c3, c7f6e7cc14df72b997258216e99d897d2df0dbbd, a75d617a4ef08682f5cfaadc01d5141c87e019c9, 9987cda315c08f63a02423fa2f9a1f6602c861a0, 06bfb66a7c8b45e3fed01351a4b087410ae5ef39, 45466141da3c98a0c5fa88be0bc14b4b6a4bd75c, ce052b9402e461a9aded599f5b47e76bc727f7de, 5.10.248, 5.15.198

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.

Intelligence 360 paketində

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.

CVE-2025-71066 · Linux · Dark Radar