Ихэнх Linux түгээлтүүд дээр root хандалтыг зөвшөөрдөг PolKit-ийн ноцтой эмзэг байдал

Qualys нь Polkit (хуучнаар PolicyKit) системийн бүрэлдэхүүн хэсэг дэх эмзэг байдлыг (CVE-2021-4034) илрүүлсэн бөгөөд ингэснээр эрхгүй хэрэглэгчдэд нэвтрэх эрхийг нэмэгдүүлэх шаардлагатай үйлдлүүдийг хийх боломжийг олгодог. Энэ эмзэг байдал нь орон нутгийн давуу эрхгүй хэрэглэгчдэд root эрхээ нэмэгдүүлэх, системийг бүрэн хянах боломжийг олгодог. Асуудал нь PwnKit гэсэн кодтой байсан бөгөөд ихэнх Линукс түгээлтүүд дээр анхдагч тохиргоонд ажилладаг ажиллаж байгаа эксплойт бүтээдгээрээ онцлог юм.

Асуудал нь SUID үндсэн тугтай ирдэг PolKit-ийн pkexec хэрэгсэлд байгаа бөгөөд PolKit-ийн заасан дүрмийн дагуу өөр хэрэглэгчийн эрх бүхий тушаалуудыг ажиллуулах зориулалттай. Pkexec-д дамжуулсан командын мөрийн аргументуудыг буруу зохицуулсны улмаас эрхгүй хэрэглэгч нэвтрэлт танилтыг алгасаж, тохируулсан хандалтын дүрмээс үл хамааран өөрийн кодыг root болгон ажиллуулж болно. Довтолгооны хувьд PolKit-д ямар тохиргоо, хязгаарлалт заасан байх нь хамаагүй, pkexec хэрэглүүрийг ажиллуулж болох файлд SUID root атрибутыг тохируулахад хангалттай.

Pkexec нь процессыг эхлүүлэх үед дамжуулсан командын мөрийн аргументын тоо (argc) хүчинтэй эсэхийг шалгадаггүй. Pkexec-ийн хөгжүүлэгчид argv массивын эхний оруулга нь үргэлж процессын нэрийг (pkexec), хоёр дахь нь NULL утга эсвэл pkexec-ээр эхлүүлсэн командын нэрийг агуулна гэж үзсэн. Аргументын тоог массивын бодит агуулгатай харьцуулж шалгаагүй бөгөөд үргэлж 1-ээс их байхаар тооцдог байсан тул Linux execve функцийн зөвшөөрсний дагуу процессыг хоосон argv массиваар дамжуулсан бол pkexec нь NULL-г эхний аргумент болгон авч үзэх болно ( процессын нэр) ба дараагийнх нь массивын дараагийн контентууд шиг буфер санах ойн гаднах байдлаар байна. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| ВВВВВ "програм" "-сонголт" NULL "утга" "PATH=нэр" NULL

Асуудал нь argv массивын дараа орчны хувьсагчдыг агуулсан envp массив санах ойд байгаа явдал юм. Тиймээс, хэрэв argv массив хоосон байвал pkexec нь орчны хувьсагчтай массивын эхний элементээс (argv[1] нь envp[0]-тай ижил болсон), агуулгыг нь хянах боломжтой өндөр эрх бүхий тушаалын тухай өгөгдлийг гаргаж авдаг. халдагчаар.

argv[1]-ийн утгыг хүлээн авсны дараа pkexec PATH дахь файлын замыг харгалзан гүйцэтгэгдэх файлын бүрэн замыг тодорхойлохыг оролдож, argv[1] руу буцах бүрэн зам бүхий мөр рүү заагч бичнэ. argv[ 1] нь envp[0]-тэй ижил тул эхний орчны хувьсагчийн утгыг дарж бичихэд хүргэдэг. Эхний орчны хувьсагчийн нэрийг өөрчилснөөр халдагчид pkexec-д өөр орчны хувьсагчийг орлуулж болно, жишээлбэл, suid программуудад зөвшөөрөгдөөгүй "LD_PRELOAD" орчны хувьсагчийг орлуулж, хуваалцсан номын сангаа файлд ачаалах ажлыг зохион байгуулж болно. үйл явц.

Ажиллаж буй эксплойт нь g_printerr() функцийг дуудах үед динамикаар ачаалагдах тэмдэгтийн кодчилолын номын санд хүрэх замыг тодорхойлоход хэрэглэгддэг GCONV_PATH хувьсагчийг орлуулахад ордог бөгөөд код нь iconv_open()-г ашигладаг. GCONV_PATH доторх замыг дахин тодорхойлсноор халдагчид энэ нь стандарт iconv номын сан биш, харин pkexec ажиллаж байх үед алдааны мессеж гарч ирэх үед ажиллах өөрийн номын сан байх болно гэдгийг баталгаажуулж чадна. root эрх болон эхлүүлэх зөвшөөрлийг шалгахаас өмнө.

Асуудал нь санах ойн эвдрэлээс үүдэлтэй хэдий ч ашигласан техник хангамжийн архитектураас үл хамааран үүнийг найдвартай, дахин дахин ашиглах боломжтой гэдгийг тэмдэглэв. Бэлтгэсэн мөлжлөгийг Ubuntu, Debian, Fedora болон CentOS дээр амжилттай туршсан боловч бусад түгээлтэд ашиглах боломжтой. Анхны мөлжлөг нь хараахан нийтэд нээлттэй болоогүй байгаа бөгөөд энэ нь өчүүхэн бөгөөд бусад судлаачид амархан сэргээж болох тул олон хэрэглэгчийн системд засвар шинэчлэлтийг аль болох хурдан суулгах нь чухал юм. Polkit нь BSD систем болон Solaris-д зориулагдсан боловч тэдгээрийг ашиглах талаар судлаагүй байна. Мэдэгдэж байгаа зүйл бол OpenBSD цөм нь execve()-г дуудах үед null argc утгыг дамжуулахыг зөвшөөрдөггүй тул OpenBSD дээр халдлага хийх боломжгүй юм.

pkexec командыг нэмснээс хойш 2009 оны тавдугаар сараас хойш асуудал үүссэн. PolKit-ийн эмзэг байдлын засварыг одоогоор засвар хэлбэрээр ашиглах боломжтой (ямар ч засвар гаргаагүй), гэхдээ түгээлтийн хөгжүүлэгчдэд асуудлын талаар урьдчилан мэдэгдсэн тул ихэнх түгээлтүүд эмзэг байдлын талаарх мэдээллийг задруулахтай зэрэгцэн шинэчлэлтийг нийтэлдэг. Асуудлыг RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux болон Manjaro дээр зассан. Эмзэг байдлыг хаахын тулд түр зуурын арга хэмжээ болгон та /usr/bin/pkexec програмаас SUID үндсэн тугийг устгаж болно ("chmod 0755 /usr/bin/pkexec").



Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх