PHP’s Extract () işlevindeki kritik kusur, keyfi kod yürütme sağlar


PHP’nin Extract () işlevindeki kritik bir güvenlik açığı ortaya çıkarıldı ve saldırganların bellek bozulması kusurlarından yararlanarak keyfi kod yürütmesini sağladı.

Sorun, PHP sürümlerini 5.x, 7.x ve 8.x’i etkiler, kötü amaçlı aktörlerin çiftsiz (PHP 5.x) veya kullanımdan sonra (PHP 7.x/8.x) koşulları tetiklemesine izin verir ve sonuçta uzaktan kod yürütülmesine (RCE) yol açar.

Teknik döküm

SSD raporuna göre, kusur, değişkenleri referans olarak sembol tablosuna aktaran Extract () ‘de Extr_Refs bayrağının uygunsuz kullanımı kaynaklanıyor.

– Reklamcılık –
Google HaberleriGoogle Haberleri

Mevcut değişkenlerin üzerine yazılırken, işlev orijinal değeri yok etmek için zval_ptr_dtor olarak adlandırılır. Orijinal değişken bir nesne ise, __Destrruct yöntemi ortada çağrılır ve saldırganların yığını hazırlanmış giriş yoluyla manipüle etmesini sağlar:

// Example triggering the vulnerability

$malicious_array = ['var' => new ExploitableClass()];

extract($malicious_array, EXTR_REFS);

Bu işlem sırasında, bir nesnenin yıkıcısı aynı değişkeni çözer ve yığınları bozarsa, PHP’nin dahili zval_ptr_dtor işlevi belleğe birden çok kez serbest bırakır.

PHP 5.X’te bu, çiftsiz bir şekilde neden olurken, yeni sürümler bellek yönetimindeki değişiklikler nedeniyle kullanılmayan kullanımdan muzdariptir.

AlanDetaylar
Güvenlik açığıPHP’s Extract () işlevindeki kritik kusur, keyfi kod yürütülmesine izin verir
Etkilenen sürümlerPHP 5.x (çift serbest), PHP 7.x & 8.x (bundan sonra kullanım)
Ana nedenExtr_refs bayrağı ile Extract () kullanırken, özellikle nesne tahribatı sırasında uygunsuz bellek yönetimi
Tetik koşuluBir nesnenin __Destruct yöntemi, devam eden bir zval_ptr_dtor çağrısı sırasında bir değişkeni çıkarır ()
Güvenlik Açığı TürüÇift ücretsiz (PHP 5.x), bundan sonra kullanım (PHP 7.x, 8.x)
DarbeYığın yolsuzluğu, keyfi okuma/yazma ve uzak/yerel kod yürütme

Sömürü etkisi

Saldırganlar bunu şu şekilde kullanabilir:

  1. Kritik bellek yapılarının üzerine yazın (Örneğin, PHP’nin hashtable veya zval nesneleri).
  2. Rasgeler Yerel Kodu yürütmek Okuma/yazma ilkelleri kazanmak için yığın tahsislerini manipüle ederek.
  3. Güvenlik mekanizmalarını atladı PHP’nin dahili işlev işleyicilerini ele geçirerek disable_functions gibi.

Kavram kanıtı istismarları, RCE elde etmek için bu ilkellerin nasıl zincirleneceğini gösterir. Örneğin, meşru bir adresle System () gibi engelli bir işlevin işleyicisinin üzerine yazmak, yürütme yeteneğini geri yükler1.

PHP ekibi, Github Danışma GHSA-4PWQ-3FV3-GM94’teki sorunu yamaladı. Yöneticiler:

  1. PHP’yi güncelle Hemen en son sürüme.
  2. Denetim Kodu Güvensiz Extract () kullanımı için, özellikle kullanıcı tarafından kontrol edilen verilerle (örneğin, Extract ($ _ post)).
  3. Extract () değiştirin Değişkenleri izole etmek için açık değişken atamalarla veya ekstra_prefix_all gibi bayraklar kullanın.

Bu güvenlik açığı, onlarca yıldır kötüye kullanıma eğilimli olarak işaretlenen PHP’nin Extract () ‘deki uzun süreli risklerin altını çiziyor. Geçmiş olaylar şunları içerir:

@extract($_REQUEST);

@die($ctime($atime)); // Allows $_REQUEST['ctime']('command') execution [4]

Geliştiriciler, kullanıcı girişi için tamamen çıkarmayı () önlemeleri ve güvenli kodlama uygulamalarını benimsemeleri istenir.

Ekstrakt () güvenlik açığı, modern ekosistemlerde eski işlevlerin tehlikelerini vurgular.

Yamalar mevcut olsa da, proaktif kod incelemeleri ve bağımlılık güncellemeleri bu tür riskleri azaltmak için kritik öneme sahiptir.

PHP kullanan kuruluşlar, sömürü önlemek için güvenli olmayan kalıpların yükseltilmesine ve ortadan kaldırılmasına öncelik vermelidir.

Find this News Interesting! Follow us on Google News, LinkedIn, & X to Get Instant Updates!



Source link