Selam, bugün biraz eski ama hâlâ birçok yerde işe yarayan bir kernel açığını masaya yatırıyoruz. Dirty Pipe, 2022'de ortaya çıkmasına rağmen hâlâ test ortamlarında ve eski kernel'lı sistemlerde karşımıza çıkabiliyor. Temelde pipe buffer'larının nasıl overwrite edilebildiğini ve bununla root yetkisi nasıl alındığını teknik olarak inceleyeceğiz.
Öncelikle zafiyetin kökenine bakalım. Linux kernel'da pipe'lar için kullanılan "pipe_buffer" yapısı, veriyi kopyalamadan önce bazı kontroller yapmıyor. Özellikle "pipe_resize_ring" fonksiyonunda eksik bir kontrol yüzünden, saldırgan mevcut bir pipe'ın buffer'ını manipüle edip, sayfa cache'ine yazma izni alabiliyor. Bu da normalde salt okunur olan dosyaları (örneğin /etc/passwd) overwrite etmemizi sağlıyor.
Gerçek exploit'te işin en kritik kısmı, "struct pipe_buffer" içindeki "flags" alanını 0x10 (PIPE_BUF_FLAG_CAN_MERGE) olarak ayarlamak. Böylece write syscall'ları doğrudan page cache'e merge oluyor ve dosya içeriği değiştirilebiliyor. Bu sayede /etc/passwd içindeki root satırını kendi hash'imizle değiştirip suid shell alabiliyoruz.
Test ortamında denemek istersen kernel versiyonunu 5.8 - 5.16 arası tutmanı öneririm. Daha yeni kernel'larda patch'ler devreye girdiği için exploit çalışmıyor. Ayrıca SELinux veya AppArmor açıksa işler biraz karışabiliyor, bu yüzden PoC'leri genellikle minimum güvenlik profilli makinelerde deniyorum.
Eğer elinde benzer bir kernel sürümü olan bir makine varsa, exploit'i derleyip çalıştırdıktan sonra "id" komutuyla yetki yükselişini görebilirsin. Tabii production ortamında denemeden önce her zamanki gibi yedek al.
Öncelikle zafiyetin kökenine bakalım. Linux kernel'da pipe'lar için kullanılan "pipe_buffer" yapısı, veriyi kopyalamadan önce bazı kontroller yapmıyor. Özellikle "pipe_resize_ring" fonksiyonunda eksik bir kontrol yüzünden, saldırgan mevcut bir pipe'ın buffer'ını manipüle edip, sayfa cache'ine yazma izni alabiliyor. Bu da normalde salt okunur olan dosyaları (örneğin /etc/passwd) overwrite etmemizi sağlıyor.
Hidden content - for more
Konuyu Görebilmeniz için "Beğenmeniz ve Yorum yapmaniz" Gerekir.
Test ortamında denemek istersen kernel versiyonunu 5.8 - 5.16 arası tutmanı öneririm. Daha yeni kernel'larda patch'ler devreye girdiği için exploit çalışmıyor. Ayrıca SELinux veya AppArmor açıksa işler biraz karışabiliyor, bu yüzden PoC'leri genellikle minimum güvenlik profilli makinelerde deniyorum.
Eğer elinde benzer bir kernel sürümü olan bir makine varsa, exploit'i derleyip çalıştırdıktan sonra "id" komutuyla yetki yükselişini görebilirsin. Tabii production ortamında denemeden önce her zamanki gibi yedek al.
Bu içeriği görmek için giriş yapın.