Խոցելիություն Linux Netfilter միջուկի ենթահամակարգում

Հայտնաբերվել է խոցելիություն (CVE-2021-22555) Netfilter-ում՝ Linux միջուկի ենթահամակարգ, որն օգտագործվում է ցանցային փաթեթները զտելու և փոփոխելու համար, որը թույլ է տալիս տեղային օգտագործողին ստանալ արմատային արտոնություններ համակարգում, այդ թվում՝ մեկուսացված կոնտեյներով: Փորձարկման համար պատրաստվել է շահագործման նախատիպ, որը շրջանցում է KASLR, SMAP և SMEP պաշտպանության մեխանիզմները: Խոցելիությունը հայտնաբերած հետազոտողը Google-ից ստացել է $20 պարգև՝ kCTF կլաստերում Kubernetes բեռնարկղերի մեկուսացումը շրջանցելու մեթոդ հայտնաբերելու համար:

Խնդիրն առկա է 2.6.19 միջուկից, որը թողարկվել է 15 տարի առաջ, և առաջացել է IPT_SO_SET_REPLACE և IP6T_SO_SET_REPLACE մշակիչներում առկա սխալի պատճառով, որն առաջացնում է բուֆերային արտահոսք՝ հատուկ ձևաչափված պարամետրեր ուղարկելիս compat ռեժիմով setsockopt զանգի միջոցով: Սովորական պայմաններում միայն արմատային օգտատերը կարող է զանգահարել compat_setsockopt(-ին), սակայն հարձակումն իրականացնելու համար պահանջվող արտոնությունները կարող են ձեռք բերել նաև ոչ արտոնյալ օգտատերը համակարգերում, որոնց օգտատերերի անունների տարածքները միացված են:

Օգտագործողը կարող է ստեղծել կոնտեյներ առանձին արմատային օգտվողով և այնտեղից օգտագործել խոցելիությունը: Օրինակ, Ubuntu-ում և Fedora-ում «user namespaces»-ը լռելյայն միացված է, բայց Debian-ում և RHEL-ում միացված չէ: Խոցելիությունը շտկող կարկատումն ընդունվել է Linux միջուկում ապրիլի 13-ին: Փաթեթների թարմացումներն արդեն ստեղծվել են Debian, Arch Linux և Fedora նախագծերի կողմից: Ubuntu-ում, RHEL-ում և SUSE-ում թարմացումները պատրաստվում են:

Խնդիրն առաջանում է xt_compat_target_from_user() ֆունկցիայի մեջ՝ հիշողության չափի սխալ հաշվարկի պատճառով՝ միջուկի կառուցվածքները 32-բիթից 64-բիթանոց փոխարկումից հետո պահպանելիս: Սխալը թույլ է տալիս չորս զրոյական բայթ գրել ցանկացած դիրքում, որը դուրս է հատկացված բուֆերից, որը սահմանափակված է օֆսեթ 0x4C-ով: Պարզվեց, որ այս հատկանիշը բավական էր՝ ստեղծելու այնպիսի շահագործում, որը թույլ էր տալիս ձեռք բերել արմատային իրավունքներ. msg_msg կառուցվածքի m_list->next ցուցիչը մաքրելով, ստեղծվեցին պայմաններ հիշողությունը ազատելուց հետո տվյալների մուտք գործելու համար (օգտագործել-առանց): Այնուհետև օգտագործվել է հասցեների և այլ կառույցների փոփոխությունների մասին տեղեկատվություն ստանալու համար msgsnd() համակարգի կանչի միջոցով:

Source: opennet.ru

Добавить комментарий