Lokaj radikaj vundeblecoj en ilaro pri administrado de pakaĵoj de Snap

Qualys identigis du vundeblecojn (CVE-2021-44731, CVE-2021-44730) en la snap-confine ilo, provizita per la SUID-radika flago kaj vokita de la snapd-procezo por krei plenumeblan medion por aplikoj liveritaj en memstaraj pakaĵoj. en la klakformato. La vundeblecoj permesas al loka senprivilegia uzanto ekzekuti kodon kun radikaj privilegioj en la sistemo. La problemoj estas solvitaj en la hodiaŭa ĝisdatigo de Snapd-pakaĵo por Ubuntu 21.10, 20.04 kaj 18.04.

La unua vundebleco (CVE-2021-44730) permesas atakon per manipulado de malmola ligo, sed postulas malŝalti sistemon de malmola ligo-protekto (agordante sysctl fs.protected_hardlinks al 0). La problemo estas kaŭzita de malĝusta konfirmo de la loko de la plenumeblaj dosieroj de la helpprogramoj snap-update-ns kaj snap-discard-ns funkcias kiel radiko. La vojo al ĉi tiuj dosieroj estis kalkulita en la funkcio sc_open_snapd_tool() surbaze de sia propra vojo de /proc/self/exe, kiu ebligas al vi krei malmolan ligilon por snap-limigi en via dosierujo kaj meti viajn proprajn versiojn de la snap-. update-ns kaj snap- iloj en ĉi tiu dosierujo diskard-ns. Post funkciado per malmola ligo, snap-confine kun radikrajtoj lanĉos la snap-update-ns kaj snap-discard-ns dosierojn de la nuna dosierujo, anstataŭigita de la atakanto.

La dua vundebleco estas kaŭzita de raskondiĉo kaj povas esti ekspluatata en la defaŭlta Ubuntu Desktop-agordo. Por ke la ekspluato funkciu sukcese en Ubuntu-Servilo, vi devas elekti unu el la pakaĵoj el la sekcio "Elstaraj Servilaj Snaps" dum la instalado. La raskondiĉo estas evidenta en la funkcio setup_private_mount() nomita dum la preparado de la muntpunkta nomspaco por la klaka pako. Ĉi tiu funkcio kreas provizoran dosierujon “/tmp/snap.$SNAP_NAME/tmp” aŭ uzas ekzistantan por ligi-munti dosierujojn por klakpako en ĝin.

Ĉar la nomo de la provizora dosierujo estas antaŭvidebla, atakanto povas anstataŭigi ĝian enhavon per simbola ligo post kontrolado de la posedanto, sed antaŭ vokado de la monto-sistemvoko. Ekzemple, vi povas krei simbolligon "/tmp/snap.lxd/tmp" en la dosierujo /tmp/snap.lxd montranta al arbitra dosierujo, kaj voko al mount() sekvos la simbolligon kaj montos la dosierujon en la dosierujo. klaki nomspacon. Simile, vi povas munti vian enhavon en /var/lib kaj, anstataŭigante /var/lib/snapd/mount/snap.snap-store.user-fstab, organizi la muntadon de via /etc dosierujo en la nomspaco de la klakpako por organizi ŝarĝon de via biblioteko kun radikrajtoj anstataŭigante /etc/ld.so.preload.

Oni rimarkas, ke krei ekspluatadon montriĝis ne-triviala tasko, ĉar la klak-limiga ilo estas skribita en Go uzante sekurajn programajn teknikojn, havas protekton bazitan sur AppArmor-profiloj, filtras sistemajn vokojn bazitajn sur la sekcomp-mekanismo, kaj uzas la monto-nomspaco por izolado. Tamen, la esploristoj povis prepari funkciantan ekspluatadon por akiri radikrajtojn sur la sistemo. La ekspluata kodo estos publikigita post kelkaj semajnoj post kiam uzantoj instalos la provizitajn ĝisdatigojn.

fonto: opennet.ru

Aldoni komenton