Խոցելիություն cgroups v1-ում, որը թույլ է տալիս փախչել մեկուսացված կոնտեյներից

Բացահայտվել են Linux միջուկում cgroups v2022 ռեսուրսների սահմանափակման մեխանիզմի ներդրման խոցելիության (CVE-0492-1) մանրամասները, որոնք կարող են օգտագործվել մեկուսացված կոնտեյներներից խուսափելու համար: Խնդիրն առկա է Linux kernel 2.6.24-ից ի վեր և շտկվել է միջուկի թողարկումներում 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 և 4.9.301: Դուք կարող եք հետևել փաթեթների թարմացումների հրապարակումներին բաշխումներում այս էջերում՝ Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux:

Խոցելիությունը պայմանավորված է release_agent ֆայլերի մշակման տրամաբանական սխալով, որը չի կարողանում պատշաճ ստուգումներ կատարել, երբ կարգավորիչը գործարկում է լիարժեք արտոնություններով: Release_agent ֆայլն օգտագործվում է միջուկի կողմից գործարկվող ծրագիրը սահմանելու համար, երբ cgroup-ում գործընթացն ավարտվում է: Այս ծրագիրն աշխատում է որպես արմատ և բոլոր «կարողություններով» արմատային անվանումների տարածքում: Ենթադրվում էր, որ միայն ադմինիստրատորն ուներ մուտք դեպի release_agent կարգավորումը, բայց իրականում ստուգումները սահմանափակվում էին արմատային օգտվողին մուտքի թույլտվությամբ, ինչը չէր բացառում կարգավորումների փոփոխությունը կոնտեյներից կամ առանց ադմինիստրատորի իրավունքների արմատային օգտատիրոջ կողմից (CAP_SYS_ADMIN): )

Նախկինում նման հատկանիշը չէր ընկալվի որպես խոցելիություն, սակայն իրավիճակը փոխվել է օգտվողների անունների տարածքների (user namespace) հայտնվելով, որոնք թույլ են տալիս ստեղծել առանձին արմատային օգտվողներ բեռնարկղերում, որոնք չեն համընկնում հիմնական օգտագործողի հետ: հիմնական միջավայրը. Համապատասխանաբար, հարձակման համար բավական է միացնել ձեր release_agent handler-ը մի կոնտեյներով, որն ունի իր արմատային օգտվողը առանձին օգտվողի ID տարածքում, որը գործընթացն ավարտելուց հետո կկատարվի հիմնական միջավայրի լիարժեք արտոնություններով։

Լռելյայնորեն, cgroupfs-ը տեղադրվում է կոնտեյների մեջ՝ միայն կարդալու ռեժիմով, բայց այս կեղծ ֆայլերը գրելու ռեժիմում վերամիավորելու խնդիր չկա, եթե ունեք CAP_SYS_ADMIN իրավունքներ կամ ստեղծելով ներդիր կոնտեյներ առանձին օգտվողի անվանատարածքով՝ օգտագործելով unshare համակարգի կանչը, որում Ստեղծված կոնտեյների համար հասանելի են CAP_SYS_ADMIN իրավունքները:

Խոցելիություն cgroups v1-ում, որը թույլ է տալիս փախչել մեկուսացված կոնտեյներից

Հարձակումը կարող է իրականացվել, եթե դուք ունեք արմատային արտոնություններ մեկուսացված կոնտեյներով կամ առանց no_new_privs դրոշի կոնտեյներ վարելիս, որն արգելում է լրացուցիչ արտոնություններ ստանալ: Համակարգը պետք է միացված ունենա օգտվողների անունների տարածքների աջակցությունը (միացված է լռելյայնորեն Ubuntu-ում և Fedora-ում, բայց ակտիվացված չէ Debian-ում և RHEL-ում) և մուտք ունենա root cgroup v1 (օրինակ, Docker-ը գործարկում է կոնտեյներներ արմատային RDMA cgroup-ում): Հարձակումը հնարավոր է նաև, եթե ունեք CAP_SYS_ADMIN արտոնություններ, որոնց դեպքում օգտվողների անունների տարածքների աջակցությունը և cgroup v1 արմատային հիերարխիայի հասանելիությունը չեն պահանջվում:

Բացի մեկուսացված կոնտեյներից փախչելուց, խոցելիությունը նաև թույլ է տալիս առանց «կարողությունների» արմատային օգտատիրոջ կամ CAP_DAC_OVERRIDE իրավունք ունեցող ցանկացած օգտվողի կողմից գործարկվող գործընթացները (հարձակումը պահանջում է մուտք գործել ֆայլ /sys/fs/cgroup/*/release_agent, որը Root-ին պատկանող) բոլոր համակարգային «կարողություններին» հասանելիություն ձեռք բերելու համար:

Նշվում է, որ խոցելիությունը չի կարող շահագործվել Seccomp, AppArmor կամ SELinux պաշտպանության մեխանիզմներն օգտագործելիս կոնտեյներների լրացուցիչ մեկուսացման համար, քանի որ Seccomp-ն արգելափակում է մուտքը unshare() համակարգի զանգին, իսկ AppArmor-ը և SELinux-ը թույլ չեն տալիս cgroupf-ների տեղադրումը գրելու ռեժիմում:

Source: opennet.ru

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