Linksys EA7500 yönlendiricilerinde, özellikle en son Sürüm 3.0.1.207964 de dahil olmak üzere tüm sürümlerdeki modelin donanım yazılımını etkileyen ciddi bir güvenlik açığı tespit edildi.
Bu kusurdan yararlanılması durumunda, ağ bitişikliği olan saldırganların kimlik doğrulama gerektirmeden cihazda rastgele kod yürütmesine olanak tanır ve kullanıcıların ağ güvenliği için önemli bir risk oluşturur.
CVE-2023-46012: Uzaktan Kod Yürütme Güvenlik Açığı
Linksys tarafından bildirildiği üzere güvenlik açığı, HTTP istek verilerinin yönlendiricilerin İnternet Ağ Geçidi Cihazı (IGD) Evrensel Tak ve Çalıştır (UPnP) hizmeti tarafından işlenmesinden kaynaklanıyor.
Free Webinar on Live API Attack Simulation: Book Your Seat | Start protecting your APIs from hackers
Kusur, SOAP UPnP Eylem İsteğinin işlenmesi sırasında tetikleniyor; burada yönlendirici, kullanıcı tarafından sağlanan verilerin uzunluğunu sabit uzunluklu bir yığın arabelleğine kopyalamadan önce yeterince doğrulayamıyor.
Savunmasız İşlev: SetDefaultConnectionService
Bu güvenlik açığının temelindeki kritik işlev, dahili olarak _set_connection_type olarak tanımlanır.
Bu işlev 184 baytlık bir arabelleği başlatır ve kullanıcı tarafından sağlanan bir dize değişkenini işlemeye çalışır. Bunu PAL_xml_node_GetFirstbyName’i ve ardından PAL_xml_node_get_value’yu çağırarak yapar.
Aşağıdaki koda bakın:
int _set_connection_type(int **param_1)
{
int iVar1;
char *var_value;
size_t var_value_length;
undefined uVar2;
undefined1 *puVar3;
char **ppcVar4;
undefined4 *puVar5;
char *pcVar6;
int *piVar7;
char acStack_d4 [184]; -----> /* Initializing 184-byte buffer */
memset(acStack_d4,0,0xb4);
iVar1 = PAL_xml_node_GetFirstbyName((*param_1)[0xf0],"NewConnectionType",0); -----> /* iVar1 now points to the user-supplied value */
if ((iVar1 != 0) && (var_value = (char *)PAL_xml_node_get_value(), var_value != (char *)0x0)) { -----> /* Ensures the user-supplied value is not empty and obtains a pointer to it */
...
Ancak aşırı uzun bir dize, hatalı doğrulama nedeniyle arabellek taşmasına neden olabilir.
Bu durum kullanımıyla daha da kötüleşir. strncpy
Boş sonlandırma sağlamayan veya hedef arabelleğin boyutunu kontrol etmeyen bu işlev, bir saldırganın kritik bellek alanlarının üzerine yazmasına ve potansiyel olarak programın kontrol akışını ele geçirmesine olanak tanır.
Aşağıdaki koda bakın:
int _set_connection_type(int **param_1)
{
...
var_value_length = strlen((char *)(iVar1 + 0x174)); ----> /* iVar1 is a pointer to the user supplied string */
strncpy(acStack_d4,(char *)(iVar1 + 0x174),var_value_length + 1); ----> /* Vulnerable strncpy call */
...
Saldırgan, büyük boyutlu bir dize değişkeniyle kötü amaçlı bir HTTP isteği oluşturarak arabellek taşmasını tetikleyebilir.
Belirli bir güvenlik açığı, yığındaki bir işlevin dönüş adresinin üzerine yazılmasına olanak tanıyarak yürütmenin saldırgan tarafından kontrol edilen rastgele adreslere yeniden yönlendirilmesine olanak tanır.
Bu, kök ayrıcalıklarıyla yetkisiz kod yürütülmesine yol açarak cihazın tamamını tehlikeye atabilir.
Linksys EA7500 yönlendirici kullanıcılarının, bu güvenlik açığını gideren ürün yazılımı güncellemeleri için Linksys destek sayfasını izlemeleri tavsiye edilir.
Kusurun ciddiyeti göz önüne alındığında, olası istismarları önlemek için güvenlik yamalarını hazır olur olmaz uygulamak kritik öneme sahiptir.
On-Demand Webinar to Secure the Top 3 SME Attack Vectors: Watch for Free