WhatsApp clickjacking açığıyla phishing saldırıları mümkün
(00xbyte.github.io)- WhatsApp mesajlarında normal bir site gibi görünen bağlantı ve önizleme gösterilirken, gerçek tıklama saldırganın sitesine yönlendiren bir phishing açığı keşfedildi
- Bunun nedeni, mesaj gövdesindeki bağlantı ile önizleme verisinin ayrı gönderilmesi ve
matchedTextkaldırılarak önizleme uyumsuzluğu oluşturulabilen bir yapının bulunması U+202ERight-To-Left Override karakteri, URL’nin görüntülenme yönünü ters çevirerek gerçek alan adını meşru bir alan adı gibi gösterebilir- Saldırgan, taklit edeceği hedefin bir ayna alan adını hazırladıktan sonra orijinal sitenin önizlemesini koruyup yalnızca
textdeğerini değiştirerek kurbanı kandırabilir - Meta, URL normalleştirme mantığını dinamik olarak ayarlayabildiğini söyledi; kullanıcıların ise bir bağlantıya tıklamadan önce onu kopyalayıp gerçek adresi kontrol etmesi gerekiyor
WhatsApp bağlantı önizlemesi ile gerçek bağlantının ayrıldığı nokta
- Araştırmacı, WhatsApp mesajı alıcısının bağlantı önizlemesini render ederken HTTP isteği gönderip göndermediğini doğrulamak için arkadaşına bir
webhook.sitebağlantısı gönderdi - HTTP isteği yalnızca gönderici tarafında bir kez oluştu ve alıcının bağlantıyı ayrıca render etmediği doğrulandı
- Bu davranış nedeniyle, WhatsApp mesajlarında bağlantı ve önizleme bilgisinin birlikte taşındığı sonucuna varıldı ve ikisinin birbirinden farklı hale getirilip getirilemeyeceği test edildi
Sorun #1: bağlantı önizlemesi uyumsuzluğu
- WhatsApp Web mesajlarını bir proxy üzerinden doğrudan değiştirmeye çalışıldı, ancak WhatsApp’ın E2EE yapısı nedeniyle Burp Suite gibi araçlarla basit müdahale zordu
- Bunun yerine, mesaj WebSocket üzerinden şifrelenmiş olarak gönderilmeden hemen önce JavaScript’te breakpoint konularak mesaj nesnesi incelendi
- Mesaj nesnesinde bağlantı gövdesi ile önizleme bilgisinin ayrı özellikler olarak bulunduğu görüldü
text: mesaj gövdesicanonicalURL: önizlemenin altında gösterilen alan adımatchedText:canonicalURLile karşılaştırılan bir değer gibi görünüyor; bu değerintextiçinde de yer alıp almadığı test edildi
instagram.comiçin oluşturulan mesaj nesnesindetext,google.comolarak değiştirildiğinde önizleme kayboldu ve yalnızca Google bağlantısı kaldımatchedTextözelliği silindiğinde, gerçek bağlantı ile önizlemenin farklı olduğu bir uyumsuz mesaj oluşturulabildi
Sorun #2: U+202E ile bağlantı gösterimini kamufle etme
- Gerçek bağlantı gövdesi açığa çıkmasın diye, Unicode karakterlerinin metin gösterimini değiştirip değiştirmediği fuzzing ile denendi
U+202E, bir Right-To-Left Override karakteridir ve metni kullanıcıya ters sırada gösterir- Yalnızca
U+202Ekullanıldığında bağlantı biçimi garip göründüğü için tıklanma olasılığının düşük olduğu düşünüldü; meşru bir URL gibi görünmesi için ters çevrilmiş bir dizge kurgulamak gerekiyordu
Ayna URL oluşturma yöntemi
- Amaç, ters çevrildiğinde
https://instagram.comgibi görünen bir URL üretmekti - Basit ters çevrilmiş dizge
moc.margatsni//:sttpholurdu, ancak.margatsnigibi bir TLD kaydedilemez - Çözüm, gerçekten kaydedilebilir bir TLD’yi alt alan adı gibi görünecek şekilde kullanmaktı
- Örneğin Hollanda TLD’si
.nlkullanılırsaln.instagram.comgibi görünen bir dizge oluşturulabiliyor
- Örneğin Hollanda TLD’si
- URL’nin
https://ile başlıyormuş gibi görünmesi gerektiğinden, sonuna geçerli bir yol olan//:spttheklendi - Sonuç olarak
https://moc.margatsni.nl//:sptth,U+202Eile birleştirildiğindehttps://ln.instagram.com//:sptthgibi görünebilir - Araştırmacı bu yöntemi 2K2E olarak adlandırdı
Saldırı akışı
- Saldırgan, taklit etmek istediği sitenin ayna alan adını satın alır
- Örnek:
ln.instagram.comgibi görünmesini istiyorsamoc.margatsni.nlalan adını satın alır
- Örnek:
- Önce orijinal alan adının bağlantısını içeren bir mesaj oluşturularak o sitenin önizlemesi elde edilir
- Örnek nesnede
text,matchedText,canonicalUrldeğerlerinin tümühttps://instagram.com/olarak yer alır description,title,jpegThumbnail,thumbnailDirectPathgibi önizlemeyle ilgili değerler de bulunur
- Örnek nesnede
- Ardından
matchedTextkaldırılır vetextdeğeri\u202ehttps://moc.margatsni.nl//:sptthbiçimine çevrilir - Nihai mesaj Instagram önizlemesini gösterir, ancak tıklandığında saldırganın hazırladığı alan adına gidebilir
Meta’nın yanıtı ve diğer platformlarla karşılaştırma
- Meta, birden fazla platform ve ortamı desteklediği için platforma özgü URL normalleştirme yöntemlerinin sunucu tarafı mantığından farklı olabileceğini söyledi
- Gerçek spam ve kötüye kullanım ortaya çıktığında URL normalleştirme mantığını dinamik olarak ayarlayabilen bir sistem bulunduğunu açıkladı
- Araştırmacı, Meta’nın bu güvenlik sorununu proaktif biçimde çözmekten çok, sistem bunu spam olarak algıladığında tepki vermeyi tercih ediyor gibi göründüğünü değerlendirdi
- X, TikTok ve Pinterest,
U+202Ekarakteri için temizleme işlemi uyguluyor; bu da onları WhatsApp’tan ayırıyor
Kullanıcıların uygulayabileceği azaltma yöntemi
- WhatsApp bağlantılarına yalnızca görünen şekline bakarak güvenmek zor
- 2K2E phishing’den kaçınmak için bağlantıya tıklamadan önce onu kopyalayıp panodaki önizlemeden gerçek adresi kontrol etmek gerekiyor
- Pano önizlemesi,
U+202Ekarakteri temizlenmiş durumdaki bağlantı adresini gösterebilir - Araştırmacı, daha sonra uygun temizleme işlemi olmadığı için 2K2E’ye açık başka servisler de buldu
1 yorum
Hacker News görüşleri
Oldukça zekice kötüye kullanılmış bir özellik kombinasyonu, ancak genel güvenlik etkisi muhtemelen düşük sayılır
En iyi ihtimalle bile alıcıyı bağlantıyı tarayıcıda açmaya yönlendiriyor; bu yüzden polis ya da istihbarat kurumu gibi bir saldırgan değilse, genelde cihazdaki yamalanmamış yazılımları istismar eden ek saldırılar gerekir
Teknik olarak buna tam olarak clickjacking demek de zor. Clickjacking genelde görünmez bir HTML çerçevesini başka içeriğin üstüne bindirmeyi ifade eden çok spesifik bir tekniktir
https://owasp.org/www-community/attacks/Clickjacking
https://portswigger.net/web-security/clickjacking
Herkes UTF sağdan sola karakterlere odaklanıyor ama Meta en azından önizleme URL’sinin mesajdaki URL’den farklı olabileceği sorununu kabul etmeliydi
Bunun kısaltılmış URL’leri açmak için yapıldığını anlıyorum, ama Meta ve WhatsApp’ın uygulayabileceği akıllıca geçici çözümler mutlaka vardır gibi geliyor
Clickjacking, bir öğeye tıkladığını sanarken aslında genelde üstte şeffaf biçimde duran başka bir öğenin tıklama olayını yakalaması demektir
Görünen alttaki katmana odak verip
onblurolayının oluştuğunu algılarsan, kullanıcı olayı almasa bile saldırgan tıklamayı anlayabilirOP’nin bulduğu şey havalı ama clickjacking değil. Ben de zamanında RTL karakterleri kullanarak ekran koruyucu dosyalarını, yani Windows’ta yalnızca uzantısı farklı olan sıradan çalıştırılabilir dosyaları, Word belgesi gibi göstermiştim. Sanırım arkadaşlara ya da öğretmenlere şaka yapmak içindi ama nedenini pek hatırlamıyorum
OP bir adım ileri gidip bunun başka sistemlerde nasıl farklı gösterilebildiğini bulmuş. Kullanıcı hangi öğeye tıkladığını sanmakta yanılmıyor; bağlantının nereye gideceğini sanmakta yanılıyor, dolayısıyla bu clickjacking değil ve yazının girişinde bağlantı verilen Wikipedia sayfası da bunu doğruluyor
Clickjacking’in gerçekten istismar edildiğini hiç görmedim ama OP’nin bulduğu yöntemin suistimal edilebileceğini düşünüyorum
Dürüst olmak gerekirse, kullanıcıların bir bağlantıya tıklarken son etki alanını ayırt edebileceği beklentisini çoktan bıraktım. Çoğu kişi bu kavramı zaten anlamıyor, kalanlar için de ayırt etmek zor
Ayırt edebildiğini düşünenler bile tüm bağlantılar
sendgrid.tld/j3ovi3bfogobbledypoop93jnri2ogibi yerlere gidince pes ediyor. İnsanları her gün takip amacıyla karmaşıklaştırılmış bu şüpheli çöp bağlantılara tıklamaları için eğitiyoruz ve kimse bunu umursamıyorGüzel bir hack. Asıl sorun WhatsApp ya da Unicode ters yön karakterleri değil, URL’lerin zor olması
visa.securesite.comgibi basit bir örnekle bile birçok insan kandırılabiliyor. Yakın gelecekte iyi bir çözüm de görünmüyorAna makine adı ve etki alanı etrafındaki genel karmaşa daha zor bir problem ama tarayıcılar etki alanı adı bölümünü vurgulayarak bunu bir ölçüde hafifletmeye çalıştı. Çoğu phishing tekniğinde olduğu gibi bunu da muhtemelen sonunda passkey bitirecek
RTL var olduğu sürece devasa güvenlik açıklarının kaynağı oldu. Bu dilleri bilmeyen insanların hiçbir kazançları olmadan riske maruz kalmaması için, işletim sisteminde tüm RTL’yi devre dışı bırakan bir ayarın neden olmadığını anlamıyorum
TextViewda dahilGeliştirici belirli bir metin aralığını açıkça inceleyip izin vermediği sürece varsayılan olarak tüm çift yönlü metin geçersiz kılmalarını devre dışı bırakmalı
Dünya nüfusunun %1’inden azını gözetme adına tüm metin işleme yığınını varsayılan olarak savunmasız hale getirmek mantıklı değil
Meta’nın bu sorunu düzeltmemesi ve bu araştırmacıya bug bounty de vermemesi hayal kırıklığı yaratıcı
Ayrıntıları burada anlatmayacağım ama Google Search’ün bazen URL’leri yeniden yazma biçimi nedeniyle saldırganlar gerçek URL’yi gizleyebiliyor
Web sitelerinde ve uygulamalarda gösterilen URL’lere asla güvenmemek en iyisi
“Tam beklendiği gibi, bağlantı ve önizleme ayrı gönderilmiş!” noktası daha büyük bir UI tasarım sorunu. Neden sıradan bir kullanıcı güvenlik için bağlantı ile önizlemeyi karşılaştırmak zorunda olsun ki?
Genel olarak bence en iyi seçenek 1. Gönderen zaten kendi tüm mesajlarını “sahteleyebilir”; önizlemeyi mesajın bir parçası olarak eklemesi de çok farklı değil
Buradaki sorun, bu içeriğin gönderenden geldiğinin açık olmaması. Ayrı bir konuşma balonu gibi gösterildiği için kullanıcıların %99’u bunun gönderen tarafından sağlandığını anlamaz gibi geliyor
Üstelik zaten asıl önemli olan URL. Saldırganın kontrol ettiği bir URL’ye tıklarsan, saldırgan önizlemede istediği her şeyi gösterebilir. Bu yüzden önizlemeyi “gerçek” olmaya zorlamanın getirisi çok küçük
Ama böyle bir altyapıyı kurup sürdürmenin getirisi nispeten düşük
Yazının en altında bunun tersine mühendislik olarak sınıflandırılmasını beğendim
Bu clickjacking değil. Clickjacking, saldırganın tıklamayı ele geçirip kullanıcının istemediği ya da fark etmediği başka bir hedefe gerçekten tıklamasını sağlamasıdır
Metni sağdan sola akıtan RTL kod noktaları bir uluslararasılaştırma özelliğidir ve bununla insanları şaşırtmak yeni bir açık değil