Vundebleco en cgroups v1 kiu permesas fuĝon de izolita ujo

Detaloj pri vundebleco (CVE-2022-0492) en la efektivigo de la limigo de rimedoj cgroups v1 en la Linukso-kerno, kiu povas esti uzata por eviti izolitajn ujojn, estis malkaŝitaj. La problemo ĉeestas ekde Linukso-kerno 2.6.24 kaj estis riparita en kernaj eldonoj 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266, kaj 4.9.301. Vi povas sekvi la publikaĵojn de pakaj ĝisdatigoj en distribuoj sur ĉi tiuj paĝoj: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

La vundebleco ŝuldiĝas al logika eraro en la dosiertraktilo release_agent, kiu malsukcesas plenumi taŭgajn kontrolojn dum funkciado de la prizorganto kun plenaj privilegioj. La dosiero release_agent estas uzata por difini la programon ekzekutan de la kerno kiam procezo en cgroup estas finita. Ĉi tiu programo funkcias kiel radiko kaj kun ĉiuj "kapabloj" en la radika nomspaco. Oni supozis, ke nur la administranto havis aliron al la agordo release_agent, sed fakte la kontroloj estis limigitaj al doni aliron al la radika uzanto, kio ne ekskludis la agordon ŝanĝitan de la ujo aŭ de radika uzanto sen administranto-rajtoj (CAP_SYS_ADMIN). ).

Antaŭe, tia trajto ne estus perceptita kiel vundebleco, sed la situacio ŝanĝiĝis kun la apero de uzantnomspacoj (uzantnomspacoj), kiuj ebligas al vi krei apartajn radikajn uzantojn en ujoj kiuj ne interkovras kun la radika uzanto de la. ĉefa medio. Sekve, por atako, sufiĉas konekti vian release_agent-traktilon en ujo, kiu havas sian propran radikan uzanton en aparta uzanta ID-spaco, kiu, post la kompletiĝo de la procezo, estos ekzekutita kun plenaj privilegioj de la ĉefa medio.

Defaŭlte, cgroupfs estas muntita en ujo en nurlegebla reĝimo, sed ne estas problemo remunti ĉi tiun pseŭdofs en skribreĝimo se vi havas CAP_SYS_ADMIN-rajtojn aŭ kreante nestitan ujon kun aparta uzantnomspaco uzante la nekondividi sistemvokon, en kiu CAP_SYS_ADMIN-rajtoj disponeblas por la kreita ujo.

Vundebleco en cgroups v1 kiu permesas fuĝon de izolita ujo

La atako povas esti farita se vi havas radikajn privilegiojn en izolita ujo aŭ kiam vi ruliĝas ujo sen la flago no_new_privs, kiu malpermesas akiri pliajn privilegiojn. La sistemo devas havi subtenon por uzantnomspacoj ebligita (ebligita defaŭlte en Ubuntu kaj Fedora, sed ne aktivigita en Debian kaj RHEL) kaj havi aliron al la radika cgroup v1 (ekzemple, Docker rulas ujojn en la radika RDMA cgroup). La atako ankaŭ eblas se vi havas CAP_SYS_ADMIN-privilegiojn, tiukaze subteno por uzantnomspacoj kaj aliro al la radika hierarkio cgroup v1 ne estas bezonata.

Krom eskapi el izolita ujo, la vundebleco ankaŭ permesas procezojn lanĉitajn de radika uzanto sen "kapabloj" aŭ ajna uzanto kun CAP_DAC_OVERRIDE-rajtoj (la atako postulas aliron al la dosiero /sys/fs/cgroup/*/release_agent, kiu estas posedata de radiko) por akiri aliron al ĉiuj ĉieaj "kapabloj".

Oni rimarkas, ke la vundebleco ne povas esti ekspluatata kiam oni uzas la Seccomp, AppArmor aŭ SELinux-protektajn mekanismojn por plia izolado de ujoj, ĉar Seccomp blokas aliron al la unshare() sistemvoko, kaj AppArmor kaj SELinux ne permesas munti cgroupfs en skribreĝimo.

fonto: opennet.ru

Aldoni komenton