Rêbazek ji bo derbaskirina pergalên înfazkirina kodê ya veqetandî ya li Python hate weşandin, li ser bingeha karanîna xeletiyek naskirî ya ku di Python 2.7 de xuya bû, di sala 2012-an de hate nas kirin û hêj di Python 3 de nehatiye rast kirin. Ev xeletî dihêle ku bi taybetî ve girêdayî were bikar anîn. Koda Python ji bo destpêkirina gihîştina bîranîna jixwe azadkirî (Bikaranîna-Piştî-Azad) di Python de. Di destpêkê de, hate texmîn kirin ku xeletî xetereyek ewlehiyê nekiriye û tenê di rewşên pir kêm de, ku bi gelemperî bi sûnî hatine afirandin, dikare bibe sedema bidawîbûna anormal a senaryoyê.
Lêkolînerek ewlehiyê bi navê nasnavê kn32 bi pirsgirêkê re eleqedar bû û kar kir ku kargehek xebitandinê amade bike ku dihêle hûn bêyî ku rasterast bi rêbazên mîna os.system gazî her fermanek pergalê bikin. Kêmasî di Pythona safî de tê bicihanîn û bêyî îtxalkirina pirtûkxaneyên derveyî û bêyî sazkirina rêvekera "code.__new__" dixebite. Ji çengan, tenê "avakirin.__id__" tê bikaranîn, ku bi gelemperî ne qedexe ye. Ji aliyê pratîkî ve, koda pêşniyarkirî dikare were bikar anîn da ku mekanîzmayên veqetandinê di karûbar û hawîrdorên cihêreng de derbas bike (mînakî, di hawîrdorên fêrbûnê, şêlên serhêl, rêwerzên çêkirî, hwd.), ku destûrê dide darvekirina koda Python, lê sînordar dike. bangên heyî hene û rê nadin rêbazên bangê yên wekî os.system.
Koda pêşniyarkirî analogek banga os.system e, ku bi rêya bikaranîna lawaziyek di CPython de dixebite. Ev îstîsna bi hemî guhertoyên Python 3 li ser pergalên x86-64 re dixebite û xebatek stabîl di ... de nîşan dide. Ubuntu 22.04, tewra bi modên parastinê yên PIE, RELRO, û CET-ê yên çalak jî. Kar ji wergirtina agahdariya li ser navnîşana fonksiyonekê di pelê bicîhkirî yê CPython de ji koda Python pêk tê. Li gorî vê navnîşanê, navnîşana bingehîn a CPython di bîrê de û navnîşana fonksiyona system() di mînaka libc-ê ya di bîrê de hatî barkirin de têne hesibandin. Di dawiyê de, bazdanek rasterast berbi navnîşana pergalê ya diyarkirî tê destpêkirin, ku nîşana argumana yekem bi rêza "/bin/sh" tê guheztin.

Source: opennet.ru
