Тусгаарлагдсан скриптүүдээс системийн командуудыг дуудах боломжийг олгодог Python-ийн эмзэг байдал

Python 2.7 дээр гарч ирсэн, 2012 онд тогтоогдсон бөгөөд Python 3 дээр хараахан засч залруулж амжаагүй байгаа удаан хугацааны туршид мэдэгдэж байсан алдааны хэрэглээнд суурилсан Python-д тусгаарлагдсан код гүйцэтгэх системийг тойрч гарах аргыг нийтэлсэн. Python дээр аль хэдийн суллагдсан санах ойд (Use-After-Free) хандалтыг эхлүүлэх Python код. Эхэндээ алдаа нь аюулгүй байдалд заналхийлээгүй бөгөөд зөвхөн маш ховор тохиолдолд ихэвчлэн зохиомлоор үүсгэгдсэн тохиолдолд скриптийг хэвийн бус дуусгавар болгоход хүргэдэг гэж таамаглаж байсан.

kn32 нууц нэртэй аюулгүй байдлын судлаач энэ асуудлыг сонирхож, os.system гэх мэт аргуудад шууд хандахгүйгээр системийн дурын командыг дуудах боломжтой ажиллах эксплойт бэлтгэж чаджээ. Ашиглалт нь цэвэр Python дээр хэрэгжсэн бөгөөд гадаад номын санг импортлохгүйгээр, “code.__new__” зохицуулагчийг суулгахгүйгээр ажилладаг. Дэгээнээс зөвхөн "builtin.__id__" ашигладаг бөгөөд үүнийг ихэвчлэн хориглодоггүй. Практик талаас нь авч үзвэл, санал болгож буй кодыг янз бүрийн үйлчилгээ, орчинд (жишээлбэл, сургалтын орчин, онлайн бүрхүүл, суурилуулсан зохицуулагч гэх мэт) тусгаарлах механизмыг тойрч гарахад ашиглаж болох бөгөөд энэ нь Python кодыг гүйцэтгэх боломжийг олгодог боловч үүнийг хязгаарладаг. боломжтой дуудлагууд болон os.system гэх мэт дуудлагын аргуудыг зөвшөөрөхгүй.

Санал болгож буй код нь CPython-ийн эмзэг байдлыг ашиглан ажилладаг os.system дуудлагын аналог юм. Энэхүү эксплойт нь x3-86 архитектуртай систем дээрх Python 64-ын бүх хувилбартай ажилладаг бөгөөд PIE, RELRO болон CET хамгаалалтын горимуудыг идэвхжүүлсэн ч Ubuntu 22.04 дээр тогтвортой ажиллаж байгааг харуулж байна. Ажил нь гүйцэтгэгдэх CPython кодын аль нэг функцын хаягийн талаарх мэдээллийг Python кодоос олж авах явдал юм. Энэ хаяг дээр үндэслэн санах ой дахь CPython-ийн үндсэн хаяг болон санах ойд ачаалагдсан libc инстанс дахь system() функцын хаягийг тооцоолно. Төгсгөлд нь эхний аргументийн заагчийг “/bin/sh” мөрөнд орлуулснаар тодорхой системийн хаяг руу шууд шилжинэ.

Тусгаарлагдсан скриптүүдээс системийн командуудыг дуудах боломжийг олгодог Python-ийн эмзэг байдал


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

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