2 puan yazan GN⁺ 2024-11-02 | 1 yorum | WhatsApp'ta paylaş
  • qBittorrent’in DownloadManager bileşeni, 6 Nisan 2010’dan 12 Ekim 2024’e kadar yaklaşık 14 yıl 6 ay boyunca SSL sertifika doğrulama hatalarını yok saydı; bu da ağ trafiğinin araya girilerek ele geçirildiği durumlarda birden çok indirme akışını saldırı yüzeyine dönüştürdü
  • Bu sorun CVE-2024-51774 olarak tanımlandı ve istismar için MITM erişimi veya DNS spoofing gerekiyor
  • Arama, .torrent indirme, RSS akışları ve favicon indirme gibi DownloadManager kullanan yollar etkilendi; süresi dolmuş veya kendinden imzalı sertifikalar da kabul edilebiliyordu
  • Windows’taki Python kurulum istemi ve güncelleme kontrolü RSS akışı, sabit kodlanmış URL yanıtları değiştirilirse çalıştırılabilir dosya indirilmesine veya güncelleme bağlantısının manipüle edilmesine yol açabiliyor
  • Kullanıcıların uygulama içi güncelleme istemi yerine v5.0.1 sürümünü tarayıcıdan doğrudan manuel olarak indirerek yükseltme yapması daha güvenli

14 yılı aşkın süren sertifika doğrulama atlatması

  • qBittorrent’in DownloadManager sınıfı, 6 Nisan 2010 tarihli 9824d86 commit’inden bu yana tüm SSL sertifika doğrulama hatalarını yok sayıyordu
  • Varsayılan davranış 12 Ekim 2024 tarihli 3d9e971 commit’i ile sertifikaları doğrulayacak şekilde değiştirildi
  • İlk yama sürümü, yazının kaleme alındığı tarihten 2 gün önce çıkan qBittorrent v5.0.1 oldu
  • Sorun CVE-2024-51774 olarak tanımlandı
  • İstismar koşulu MITM erişimi veya DNS spoofing

DownloadManager’ın oluşturduğu geniş saldırı yüzeyi

  • DownloadManager’ın kullanım alanı geniş olduğu için arama, .torrent indirme, RSS akışları ve favicon indirme gibi işlevler etkilendi
  • Bu yollar, süresi dolmuş sertifikaları, kendinden imzalı sertifikaları veya her ikisini birden taşıyan sertifikaları kabul edebiliyordu
  • Başlıca etki yolları Windows Python kurulumu, yazılım güncellemesi, RSS akışları ve arşiv açma kütüphanesi saldırı yüzeyi olarak ayrılıyor

Windows Python kurulum akışında çalıştırılabilir dosya indirme

  • Windows’ta yeterince güncel bir Python yüklü değilse qBittorrent, arama eklentilerini kullanmak için Python kurulumu veya güncellemesi isteyen bir pencere gösteriyor
  • Kullanıcı varsayılan olarak seçili Yes seçeneğine tıklar veya Enter’a basarsa, sabit kodlanmış python.org URL’sinden Python kurulum dosyasını indiriyor
  • İndirme sonrası qBittorrent bu dosyanın adını .exe olarak değiştirip çalıştırıyor, tamamlandıktan sonra da geçici dosyayı siliyor
  • Bu davranış Haziran 2015’ten bugüne kadar mevcut ve v3.2.1 ile v5.0.0 arasındaki sürümler etkileniyor
  • Diğer işletim sistemi varyantlarında Python yoksa veya yeterince güncel değilse arama bileşeni devre dışı bırakılıyor; aynı davranışın orada tekrarlanmadığı görülüyor
  • Çalıştırılabilir dosya örneğin C:\Users\_user_\AppData\Local\Temp\is-G61QK.tmp gibi bir yola kaydedilebiliyor
  • Bu durum QProcess davranışından kaynaklanıyor olabilir; ancak çalıştırılabilir dosya için iki iş parçacığı oluşup yalnızca biri sonlanırken diğeri sleeping durumunda kalabiliyor

Güncelleme kontrolü RSS’i üzerinden URL manipülasyonu

  • Kurulu Windows veya Linux sürümündeki qBittorrent, dosya appImage değilse çalıştırıldığında varsayılan olarak güncelleme kontrolü yapıyor
  • Güncelleme kontrolü, sabit kodlanmış bir Fosshub RSS URL’sinden XML belgesi indirip program sürüm bilgilerini ayrıştırma şeklinde çalışıyor
  • XML içinde o anda çalışan sürümden daha yüksek bir sürüm bulunursa update URL çıkarılıyor ve ek filtreleme ya da doğrulama olmadan kullanıcıya bu URL’yi ziyaret etmesi soruluyor
  • Kullanıcı istemi kabul ederse ilgili URL varsayılan tarayıcıda açılıyor
  • Kullanıcı, yazılımın sunduğu bağlantı olduğu için güven bağlamında bir .exe dosyası bekliyor
  • Saldırgan mediafire gibi bir dosya paylaşım sitesine yönlendirirse kullanıcı, saldırganın kontrol ettiği bir çalıştırılabilir dosyayı yükseltme sanarak indirebilir
  • qBittorrent açık kaynaklı olduğu için en güncel sürüme arka kapı işlevi ekleyip yeniden derlemek kolay
  • Geliştiriciler ikili dosya imza doğrulaması için anahtar sağlıyor, ancak koruma ancak kullanıcı gerçekten doğrulama yapar ve doğrulama hatasını ciddiye alırsa etkili oluyor

RSS akışları ve bağlantı enjeksiyonu

  • Uygulamanın ayrıştırdığı tüm RSS akışları DownloadManager üzerinden geçtiği için ele geçirilebiliyor
  • Kurbanın ziyaret ettiği URL’ler gözlemlenip listelenebiliyor; RSS URL’leri doğaları gereği statik ve uzun ömürlü
  • Her öğedeki link ögesi doğrudan ayrıştırılıyor ve kullanıcı çift tıklarsa indirilebiliyor
  • MITM manipülasyonu olmasa bile, kullanıcının abone olduğu RSS akışına yazarın veya akış kirliliği yaratan bir saldırganın eklediği keyfi URL’ler tek bir çift tıklamayla açılabiliyor
  • CVE-2019-13640, torrent adı veya mevcut tracker parametresindeki shell metakarakterleri üzerinden uzaktan komut çalıştırmaya izin veren bir açıktı; MITM saldırganı RSS içine kötü amaçlı veri ekleyebildiği için birleşik risk büyüyor

GeoIP veritabanı indirme ve arşiv açma saldırı yüzeyi

  • qBittorrent çalıştırıldığında varsayılan olarak sabit kodlanmış bir URL’den .gz uzantılı ikili MaxMind GeoIP veritabanı otomatik indiriliyor ve açılıyor
  • zlib açma işleminde bir açık olsaydı saldırgan bu saldırı yüzeyini en fazla 64MB’lık keyfi bir dosyayla hedefleyebilirdi
  • Örnek olarak verilen CVE-2022-37434, 2022 tarihli CVSS 9.8 Critical bir buffer overflow açığı; ancak burada inflateGetHeader() fonksiyonu çağrılmadığı için uygulanmıyor
  • Açma işleminden sonra ikili MaxMind veritabanını ayrıştıran kod, 2024 itibarıyla iyi korunuyor; ancak geçmişte durum farklıydı ve ek saldırı yüzeyleri bulunmuş olabilir
  • gzip::decompress() fonksiyonundaki bir commit’te hedef buffer, stack üzerindeki statik tahsisten heap üzerindeki dinamik tahsise geçirilmiş; yazmadan önce kontrol olduğu için istismar edilebilir değildi

Otomatikleştirilebilen saldırı senaryoları

  • Python kurulum dosyası URL’si ile güncelleme RSS akışı URL’si de sabit kodlanmış olduğundan, MITM ortamındaki kötü amaçlı bir betik savunmasız sürümleri tarayıp saldırabiliyor
  • RSS akışı URL’sinin qBittorrent çalışmıyorken ziyaret edilmesi için bir neden olmadığından, bu adres yazılım parmak izi olarak kullanılabiliyor
  • Sertifika doğrulaması olmadığı için saldırgan, QUANTUM benzeri karmaşık bir Man-On-The-Side dağıtımı olmadan hedef sunucunun kimliğine bürünebiliyor
  • Sabit kodlanmış URL yapısı nedeniyle tarayıcı veya diğer uygulamalardaki güvenli bağlantı hataları kullanıcıyı uyarmadan, yalnızca qBittorrent’in doğrulama yapmayan istekleri seçici biçimde ele geçirilebiliyor
  • mitmproxy’nin -s seçeneği ve bir Python betiği birlikte kullanılırsa şu otomasyonlar mümkün
    • Python .exe dosyasını keyfi bir çalıştırılabilir dosyayla değiştirme: tek tıklamayla RCE
    • qBittorrent güncelleme RSS’indeki URL’yi otomatik değiştirme: tarayıcı ele geçirme/RCE, orta düzeyde kullanıcı etkileşimi gerekir
    • qBittorrent RSS görüntüleyicisindeki tüm veya belirli bağlantıları değiştirme: 2019’a kadar RCE, indirme ele geçirme

Yükseltme ve geçici önlemler

  • qBittorrent v5.0.1 sürümüne yükseltilmeli
  • Yükseltmenin uygulama içi güncelleme istemiyle değil, tarayıcı üzerinden doğrudan manuel indirme ile yapılması öneriliyor
  • Alternatif olarak, bu açıktan etkilenmeyen Deluge, Transmission gibi istemciler kullanılabilir
  • MITM gerektiren saldırıları yalnızca teorik risk saymak zor; yakın dönem geçmişi ve bazı ülkelerdeki pratik örnekler dikkate alınmalı
  • Depo bakımcısıyla iletişim kurulmuş olsa da, GitHub güvenlik tavsiyesi yayımlama niyeti olup olmadığına dair yanıt alınmamış

1 yorum

 
GN⁺ 2024-11-02
Hacker News yorumları
  • qBittorrent’in DownloadManager sınıfı, 6 Nisan 2010 tarihli 9824d86 commit’inden bu yana 14 yıl 6 ay boyunca tüm platformlarda gerçekleşen tüm SSL sertifikası doğrulama hatalarını yok sayıyormuş.
    Oldukça ciddi görünüyor.

  • Bu açığı hafife almak istemiyorum ama uzaktan kod çalıştırma mümkün olan bir yolda tek savunma hattı olarak geçerli bir TLS sertifikası ile alan adı eşleşmesine güvenmek bana felakete yakın geliyor.
    En azından uygulama internetten bir çıktı indirip çalıştırıyorsa, belirli bir sürüme sabitlemeli ve çalıştırmadan önce indirilen dosyanın hash değerini doğrulamalı.

    • O zaman otomatik güncelleme imkânsız mı demek oluyor?

    • Bence asgari standart imza doğrulaması olmalı.
      Yazılımı yeterince sık güncelliyorsanız anahtar rotasyonu için de yeterince fırsatınız olur.

    • Windows’ta derleme araçlarında kod imzalama sertifikası kullanıp, indirilen ikili dosyayı işletim sistemine doğrulatabilirsiniz.
      Ancak kod imzalamada mutlaka zaman damgası sunucusu kullanılmalı; aksi halde sertifika süresi dolduktan sonra bozulur.

    • Burada potansiyel ortadaki adam saldırısı niteliği nedeniyle hash kontrolünün zor olduğunu düşünüyorum.
      Saldırgan isteğin içeriğini görüp değiştirebiliyorsa hash kontrolü de bütünlük denetimi dışında işe yaramaz hale gelir.

      Masaüstü uygulamalarının belirli bir alan adına otomatik güncelleme veya kontrol isteği göndermesi genel olarak güvenlik açısından yeterince ilgi görmüyor gibi.
      Asıl yazarın alan adını yenilemeyi bırakması ve alan adının kötü niyetli şekilde ele geçirilmesi gibi senaryolar da var; buna hâlâ iyi bir çözüm bulamadım.

  • Son yaklaşık 15 yılda bu sorundan gerçekte kaç kişinin etkilendiğini bilmek şaşırtıcı olurdu.
    İnternetin biraz şüpheli taraflarında bile kalabalığa karışabilen bir saldırgan için SSL doğrulaması ne kadar önemliydi, merak ediyorum.
    Çok fazla şeyin “öylece çalışmasının” nedeni kimsenin umursamaması; artık bu sorun gündeme geldiğine göre otomatik güncelleme yapmayanlar için durum ancak kötüleşebilir.

    • Muhtemelen 0’a yakındır.
      Bu kod python.org’dan Python indirmekle görevliydi; istismar edilebilir olsa da oldukça hedefli olması ve hedefe karşı zaten bir ölçüde erişim gerektirmesi gerekirdi.
      Başka şekilde istismar etmek için python.org alan adının ele geçirilmesi gibi bir şey gerekirdi ki bunu da muhtemelen herkes fark ederdi.
    • Son yaklaşık 15 yılda gerçekte kaç kişinin etkilendiğini bilmek ilginç olurdu ama kişisel olarak bunun neredeyse 0’a yakın olduğunu düşünüyorum.
      Etkilenen olduysa da büyük olasılıkla hedefli saldırıydı.
    • Ben de 0 olduğunu düşünüyorum.
      Yazının önemli bir kısmı abartılmış gibi; evet, bir sorun olduğu kesin ama “qBittorrent uzaktan kod çalıştırma” ifadesi teknik olarak doğru olsa da aşırı alarm verici.
    • Web tarayıcısıyla yapılacak işleri web tarayıcısıyla yapıyorum; torrent uygulamasını ise yalnızca doğrudan aldığım .torrent dosyasını indirmek istediğimde açıyorum.
    • Ben de aynı şeyi düşündüm.
      Gerçek verileri elde etmek neredeyse imkânsız görünüyor ama görebilseydik ilginç olurdu.
  • qBittorrent koduna baktıysanız bilirsiniz, gerçekten berbat bir koddu.
    Yorumsuz fonksiyonlar sayfalarca uzuyor, satır aralıkları da tıkış tıkış; haksız yere hapsedilmiş psikotik bir hastanın hapishane notları gibi görünüyordu.
    Gördüğüm küçük kısımda, sıkıştırılmış birkaç sayfa kadarlık yerde bile dönüş değeri kontrolü hiç yoktu.

    Bir alana olağan doğru 2 karakterli değer yerine doğru 3 karakterli bir değer girildiğinde, yaklaşık 1 dakika sonra programın çöktüğünü falan hatırlıyorum.
    Yaklaşık 20 yıl önce C++ ile ücret karşılığı iki kez programlama yapmıştım; bakımcının “o zaman bir de siz bakın” mesajını alınca debugger’da çalıştırdım.
    GUI’de yanlış değer ile doğru değerin okunduğu noktaya kadar geldim; değeri izlemeye başlayınca bir noktada -1’in oradan oraya aktarıldığını gördüm ve program bir süre hiçbir şey olmamış gibi devam etti.

    Sonunda yanlış değerle çalıştırılan taraf, epey uzak bir fonksiyonda, haksız yere hapsedilmiş psikotik bir hastayı andıran bir hata mesajıyla çöktü.
    Daha sonra gerçek qBittorrent geliştiricilerinden biri bunu sonraki sürümde düzeltti ama sonuçta kod böyleydi.

  • Yalnızca “BUGFIX: Don't ignore SSL errors (sledgehammer999)” yazıyor.
    https://www.qbittorrent.org/news
    Bence bir güvenlik duyurusu olmalı.

  • Doğru sertifika kontrolü yapılsa bile, uzaktaki bir çalıştırılabilir dosyayı indirip çalıştırmak tanımı gereği uzaktan kod çalıştırma açığıdır diye düşünüyorum.
    Syncthing de bu yöntemi kullanıyor; muhtemelen sertifika kontrolü yapıyordur ama gözetimsiz otomatik güncellemeyi mantıksal olarak RAT/Truva atından ayırmak zor.

    • Kelimenin tam anlamıyla öyle değil.
    • Buna katılmak zor.
      “Açık” kısmı, üçüncü bir taraf tarafından istismar edilebildiğinde ortaya çıkar.
      Yazılım sağlayıcısına zaten güvenmek zorunda olduğunuz için, otomatik güncellemenin kendisi doğrudan uzaktan kod çalıştırma açığı değildir.
    • “En son sürüme yükseltmek ister misiniz?” sorusunda Evete basmaktan temelde farklı değil.
    • Programı ilk başta indiren aynı kişiler gözetimsiz otomatik güncellemeyi de yapıyorsa, ya da yapmıyorsa, bunu nasıl değerlendirmeli?
  • Bu açığın doğrudan nedeni olmasa da, potansiyel olarak kötü niyetli birçok düğümle iletişim kuran bu tür uygulamalar bellek güvenliğinden büyük fayda görebilir gibi.
    Ancak mevcut implementasyonların tamamı C++ ile yazılmış görünüyor.
    Yazıda da 4. maddede bu türden açık olasılıkları ele alınıyor.

Python ile yazılmış Deluge bile C++ ile yazılmış libtorrent'e bağımlı
Eski Java tabanlı Azureus istemcisinin modern bir fork'u var mı bilmiyorum
Bugünlerde birçok BitTorrent istemcisi GUI ile asıl torrent işlemeyi yapan daemon sürecini ayırıyor; bu yüzden daemon'u Java ile yapıp yerel GUI'ye bağlamak güvenlik, performans ve kullanıcı deneyimi arasında fena olmayan bir denge sağlayabilir

  • Kabaca arayınca bile birkaç saf Go BitTorrent kütüphanesi var

  • Rust ile yazılmış ve libtorrent'e bağımlı olmayan rqbit var: https://github.com/ikatson/rqbit

  • Tartışma için kendim araştırmak yerine tembel bir soru soracak olursam, libtorrent'e bir alternatif yapmak için nereden başlamak gerekir?
    Denemeler ya da başarı örnekleri oldu mu, farklı bir implementasyon kullanan gerçekten çalışan istemciler var mı merak ediyorum

  • Özellikle arka taraftaki maddelere doğru gittikçe biraz abartılı görünüyor
    1 numaralı “gizleme işlevi olan kötü amaçlı çalıştırılabilir dosya yükleyicisi”, istemcinin HTTPS üzerinden python.org'dan Python indirmesiyle ilgili
    İyi değil; özellikle 3.12.4'e sabit kodlanmış olması da sorun, ama hem ortadaki adam saldırısı hem de kullanıcı etkileşimi gerektirmeyen net bir istismar yolu görünmüyor

    2 numaralı “tarayıcı ele geçirme + çalıştırılabilir dosya indirme”, istemcinin HTTPS ile bir RSS dosyası indirmesi ve koşullu olarak kullanıcıya o dosyanın içindeki URL'yi açmak isteyip istemediğini sormasıyla ilgili
    Riski 1 numaradan daha düşük; kullanıcıyı ortadaki adam saldırısına uğratıp “update”e tıklatsanız bile sonuçta gösterebileceğiniz şey yalnızca bir web sayfası

    3 numaralı “RSS feed'ine keyfi URL enjeksiyonu” konusunda araştırmacı RSS istemcisinden beklenen davranışı karıştırmış gibi
    4 numaralı “sıkıştırma açma kütüphanesi saldırı yüzeyi” ise zlib açığı bulabiliyorsanız torrent istemcisine saldırmaktan çok daha kötü şeyler yapabilirsiniz
    Girdi sıkıştırmasını açma, temelde güvenli olduğu varsayılan bir işlem

    • Akış sıkıştırması destekleyen HTTP sunucuları gibi şeyler hemen akla geliyor

    • Doğru
      Fazla olumsuz konuşmak istemem ama güvenlik “araştırmacıları” biraz ün için çok zayıf ihtimallere bile tutunuyor gibi
      Dürüstçe belgelendirmiş olsalardı daha çok saygı duyardım; burada yaptıkları ise sadece yüz ekşitiyor

    • Sertifika hatalarını yok saymasaydı bu maddeler önemsiz olurdu
      Asıl sorun SSL hatalarını yok sayması olduğundan, pratikte tüm HTTPS indirmeleri HTTP indirmesine düşürülmüş sayılır ve ortadaki adam saldırısı olmasa bile saldırı yapılabilir

      Başka bir deyişle, SSL doğrulamasının olmaması yüzünden HTTPS URL'leri, inceleyen kişiye güvenlik varmış gibi yanlış bir rahatlama hissi verdi

    • Katılıyorum
      Buna “uzaktan kod yürütme açığı” demek saçma derecede abartılı

      Sırada, web tarayıcıları güvenli de olabilecek olmayabilecek rastgele sitelerden program indirip çalıştırmaya izin veriyor diye “uzaktan kod yürütme açığı” mı diyeceğiz?
      Ya da otoriter bir ülkede yaşıyorsanız devletin kötü şeyler yapabileceğini de yeniden mi duyuracağız?

  • Makalede geçen diğer seçeneklere göre qBittorrent 1000 kat daha performanslı bir istemci; bu sorunların kalitesinin bu kadar düşük olması şoke edici

    • Deluge da qBittorrent kadar performanslı
      Performansı sağlayan libtorrent-rasterbar(libtorrent.org)
  • En yeni sürümü derleyip çalıştırmak için https://github.com/userdocs/qbittorrent-nox-static, Docker ile statik binary derleyen gayet iyi bir yardımcı script
    libtorrent 1.2 kullanarak 5.0.0 çalıştırmak istiyordum; bu script açık ara en kolayıydı