POC详情: 45051f5285ab206d7652e80682463c3c54a1ca6b

来源
关联漏洞
标题: 7-Zip 缓冲区错误漏洞 (CVE-2022-29072)
描述:7-Zip是一个压缩软件。 7-Zip 21.07存在安全漏洞,该漏洞允许在扩展名为 .7z 的文件被拖到帮助>内容区域时进行权限升级和命令执行。这是由 7z.dll 配置错误和堆溢出引起的。该命令在7zFM.exe进程下的子进程中运行。
描述
7-Zip through 21.07 on Windows allows privilege escalation and command execution when a file with the .7z extension is dragged to the Help>Contents area.
介绍
# INFORMATION

I haven't posted any poc code anywhere for privilege escalation attack. The poc codes found have nothing to do with privilege escalation. For your information.

# 7-zip hakkında

7-Zip, özgür ve ücretsiz bir dosya arşivleyicisidir. 7-Zip’in Komut İstemi sürümü Unix benzeri sistemler içinde düşünülmüş hatta AmigaOS bu saydıklarımıza dahil. Aynı zamanda DOS için de uyumlu Dost Portu için veya HX-DOS genişletişicisi ile Windows komut İstemcisi'nde çalıştırılabilir.

# CVE-2022-29072

Türkçe yazacağım biraz da siz Türkçe öğrenin. 

Öncelikle zafiyeti bulma hikayeme değinmek istiyorum. WinRAR üzerinde XXE zafiyetini gerçekleştiren bir payload gördüm. Aynı zamanda HTML Helper dosyasının kullanarak javascript üzerinden ActiveXObject ve WScript.Shell sayesinde komut çalıştırmaya imkan sağlıyordu. Bunun lolbinlerde kullanılan HTA'dan hiç bir farkı yoktu olayı nasıl lehime döüştürebileceğimi düşündüm.

(https://www.exploit-db.com/exploits/47526) 

Aslında amacım 7z, zip, rar vb sıkıştırma teknolojilerinin uzantılarına çift tıkladıktan sonra hedef bilgisayar üzerinden reverse-shell alabilmekti bunun içinde HTML Helper dosyasını kullanabilir miyim diye düşünüyordum. WinAFL ile uzun fuzzing işlemleri sonrası FzGM.exe üzerinde heap-overflow olduğunu keşfettim fakat heap overflow sonrası yetkim yine aynı kullanıcı üzerinden olacağından bir anlamı da yoktu. Bu yüzden CreateRemoteThread kullanmadım çünkü API'i çağırmam gerekiyordu ve bu API'i tetikleyebilmek için bir chm dosyasına ihtiyacım vardı. Kaynak kodu incelediğimde özellikle iki yerde Windows API'ını çağırırken hatalı işlemler olduğunu farkettim ve bu direk yetkilendirme problemi yaratıyordu. Bu keşfetme noktam aşağıdaki resim de görüldüğü üzere FzGM.exe altında bir child process oluşturuyor. Normalde bu işlemin hh.exe üzerinde olmasını bekleriz.

![7-zip-1](https://user-images.githubusercontent.com/33525376/163989986-8f222b00-0080-49fc-b65c-ac93e5877525.png)

![api](https://user-images.githubusercontent.com/33525376/163990001-5af6890a-78c0-402a-8f35-23622e798893.png)


Eğer API'ı include etmeyip fonksiyon üzerinden doğru yapılandırma işlemi olsaydı hh.exe altında child process oluşturmasını beklerdim fakat 7-zip.chm dosyası bunu kendi üzerinden çağırmaktadır tipik bir örneği 7-zip.chm dosyasını editleyip komut çalıştırma işlemi uygularsanız o zamanda görebilirsiniz. Heap overflow sonrası çağırılan API'nin yetkilendirme sorunu sonra 7z.dll dosyası içerisinde bulunan hatalı yapılandırmadan faydalandım ki bunun için uzun bir süredir uğraşıyorum. CreateRemoteThread() yapmanın bir anlamı yok. Benim payload'ın içerisinde çalıştırmam ve çağırmam gereken şey HTML Helper API'ın bizzat kendisi değil 7-zip üzerinden bu API'ın hook edildiği nokta ve o noktayı execute edebilmem fakat bu payload sadece hh.exe entegrasyonu ile çalıştığı için bu yüzden sürükle bırak gibi fonksiyon ile çalışmaktadır. 7-zip.chm dosyasının, 7-zip üzerinden HELP butonu ile çağırılması ve buraya çağırılan adresin payload içerisinde yetkilendirme sorunu görülen "base pointer" yönlendirmem bizi bir üst kullanıcıya taşımaktadır. Buradan sonraki işlem ise payload'ın içerisinde psexec'in bulunması ve psexec -s cmd.exe komutuyla nt authority/system olarak system yetkisine yükselmesidir.

![7-zip-2](https://user-images.githubusercontent.com/33525376/163995536-b16db2f8-9493-4962-b4af-c4dfd4ca3f96.png)

poc video:

https://user-images.githubusercontent.com/33525376/163654035-d40ca72a-7dbc-425f-ade2-3820cfababb2.mp4

# ActiveXObject bypass hakkında

Soruların bir çoğu da ActiveX uyarısı üzerineydi bu problemin en temel şöyle giderebilirsiniz. Payload çalışmadan önce;

<'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0' -Name '1201' -Value '0' -PropertyType "DWord"> kontrol sağlamaktadır eğer bu değeri 1 ise popup ekrana gelmektedir şayet 0 olarak yeni bir değer atandıysa bypass edilmektedir. Fakat belirtmek gerekirse ki o an hangi user payload'ı çalıştırıyorsa onu etkilemektedir. 

# Önemli not

Ben gereken noktaları geliştiriciye söyledim ve CVE tarafından da bu kabul edildi. İnsanların kendini otorite zannetmesi ve onlara exploit'i vermem gerektiği gibi bir algı oluşmasına anlam veremiyorum. Ben zaten güncelleme sonrası yayınlayacağımı belirttiğim halde henüz update olmadan yapılan bu saygısızlık sanıyorum kendini otorite görmekten geçmektedir. Ben yetki yükseltme saldırısının poc kodunu hiçbir zaman yayınlamak istemeyebilirim bu benim hür irademdir ve bunun doğruluğu sorgulamak noktasında kimin ne düşündüğü ile zerre ilgilenmiyorum.

# Alınabilecek önlem

Birinci yöntem: Eğer 7-zip güncelleme geçmezse 7-zip.chm dosyasının silinmesi gerçekleştirilebilir.
İkinci yöntem: Program içerisinde yer alan tüm kullanıcılar read ve execute yetkisi ile erişim sağlamalıdır.

 # Sigma kuralı
 
 İlgili sigma kuralı https://github.com/kagancapar/CVE-2022-29072/blob/main/7z_CVE-2022-29072.yml
文件快照

[4.0K] /data/pocs/45051f5285ab206d7652e80682463c3c54a1ca6b ├── [1.0K] 7z_CVE-2022-29072.yml ├── [4.0K] command-exec-basic-7zip │   └── [ 173] 7zip.html ├── [ 34K] LICENSE ├── [4.0K] privilege-escalation-7zip │   └── [ 130] 7zip.txt ├── [5.1K] README.md └── [4.0K] xxe-basic-7zip ├── [ 149] 7zip.dtd └── [ 253] 7zip.html 3 directories, 7 files
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。