Bregusrwydd yn Python sy'n caniatáu i orchmynion system gael eu galw o sgriptiau ynysig

Mae dull wedi'i gyhoeddi i osgoi systemau gweithredu cod ynysig yn Python, yn seiliedig ar y defnydd o nam adnabyddus a ymddangosodd yn Python 2.7, a nodwyd yn 2012 ac nid yw wedi'i gywiro eto yn Python 3. Mae'r nam yn caniatáu defnyddio wedi'i gysylltu'n arbennig Cod Python i gychwyn mynediad i gof sydd eisoes wedi'i ryddhau (Defnyddio Ar ôl Am Ddim) yn Python. I ddechrau, rhagdybiwyd nad oedd y gwall yn fygythiad diogelwch a dim ond mewn achosion prin iawn, a grëwyd yn artiffisial fel arfer, a allai arwain at derfyniad annormal o'r sgript.

Dechreuodd ymchwilydd diogelwch o dan y ffugenw kn32 ddiddordeb yn y broblem a llwyddodd i baratoi ecsbloetio gweithredol sy'n ei gwneud hi'n bosibl galw unrhyw orchymyn system heb gael mynediad uniongyrchol at ddulliau fel os.system. Gweithredir y camfanteisio mewn Python pur ac mae'n gweithio heb fewnforio llyfrgelloedd allanol a heb osod y triniwr “code.__new__”. O'r bachau, dim ond “builtin.__id__” a ddefnyddir, nad yw fel arfer yn cael ei wahardd. Ar yr ochr ymarferol, gellir defnyddio'r cod arfaethedig i osgoi mecanweithiau ynysu mewn gwasanaethau ac amgylcheddau amrywiol (er enghraifft, mewn amgylcheddau dysgu, cregyn ar-lein, trinwyr adeiledig, ac ati), sy'n caniatáu gweithredu cod Python, ond yn cyfyngu ar y galwadau sydd ar gael ac nid ydynt yn caniatáu dulliau galw fel os.system.

Mae'r cod arfaethedig yn analog o'r alwad os.system, sy'n gweithio trwy fanteisio ar fregusrwydd yn CPython. Mae'r camfanteisio yn gweithio gyda phob fersiwn o Python 3 ar systemau gyda phensaernïaeth x86-64 ac yn dangos gweithrediad sefydlog ar Ubuntu 22.04, hyd yn oed pan fydd moddau amddiffyn PIE, RELRO a CET wedi'u galluogi. Daw'r gwaith i lawr i gael gwybodaeth o god Python am gyfeiriad un o'r swyddogaethau yn y cod CPython gweithredadwy. Yn seiliedig ar y cyfeiriad hwn, cyfrifir cyfeiriad sylfaenol CPython yn y cof a chyfeiriad y swyddogaeth system() yn yr enghraifft libc wedi'i lwytho yn y cof. Ar y diwedd, mae trosglwyddiad uniongyrchol i gyfeiriad system benodol yn cael ei gychwyn trwy amnewid pwyntydd y ddadl gyntaf i'r llinell “/bin/sh”.

Bregusrwydd yn Python sy'n caniatáu i orchmynion system gael eu galw o sgriptiau ynysig


Ffynhonnell: opennet.ru

Ychwanegu sylw