SlowMist: Udesk kötü amaçlı JS, verileri çalar ve transfer adreslerini değiştirir

iconMetaEra
Paylaş
AI summary iconÖzet
SlowMist, Udesk sisteminde mgbx.com ve bitxex.io gibi platformların ele geçirilmesiyle ilgili zincir üzerindeki haberlere bağlantılı bir zararlı JS betiği tespit etti. Bu betik, udeskApi.2026-10-16.cached.js ve deeps.js aracılığıyla yüklenerek oturum verilerini çalar ve yatırma adreslerini değiştirir. Saldırganlar, kod enjekte etmek için uzaktan bir yükleyici kullanır ve bu da fonların çalınma riskini artırır. Enflasyon verileri ve piyasa volatilitesi, etkilenen kullanıcılar için kayıpları artırabilir. Bu ihlal, birden fazla borsa boyunca acil güvenlik endişelerini vurgulamaktadır.
Bir betik zehirlenmesiyle kullanıcı verilerini ve transfer edilen fonları aynı anda hedeflemek nasıl mümkün olur?

Yazan: Slow Mist Teknolojisi

Arka plan

Son zamanlarda, SlowMist güvenlik ekibi, günlük tehdit istihbaratı araştırması sırasında Udesk müşteri hizmetleri sistemiyle ilgili bir betiğin zehirlendiği bir saldırı etkinliğini tespit etti. Takım, udeskApi.2026-10-16.cached.js ve deeps.js adlı iki JavaScript örneği elde ederek analiz gerçekleştirdi ve kötü amaçlı kodun müşteri hizmetleri betiği aracılığıyla sayfaya nasıl girdiğini ve kullanıcı verileri ile iş işlemlerine ne yaptığını takip etti.

Örneklerin incelenmesi, iki tür riski adım adım ortaya çıkardı: biri, web sayfasındaki oturum verilerini ve kullanıcıların gönderdiği hassas bilgileri toplayan, diğeri ise yüklenme kurallarına göre yatırım adreslerini değiştirip içeriği kopyalayan kötü amaçlı betikler. İlk tür, saldırganların oturumları kopyalayarak veya hesapları ele geçirmesine neden olabilir; ikinci tür ise kullanıcıların yatırımlarını değiştirilmiş ödeme adreslerine göndermesine yol açabilir. Müşteri hizmetleri betiklerinin yüklenme giriş noktasından başlayarak, veri okuma, ağ gönderimi ve sayfa değiştirme mantığını takip ederek, bu iki davranışın nasıl gerçekleştirildiğini ve hangi koşullarda tetiklendiğini yeniden oluşturduk.

MistEye yanıt veriyor

MistEye, SlowMist tarafından özgün olarak geliştirilen, güvenlik izleme ve tehdit bilgisi birleştirme yeteneklerini entegre eden bir Web3 tehdit istihbaratı ve dinamik güvenlik izleme sistemidir ve kullanıcılara gerçek zamanlı risk uyarıları ve varlık koruması sağlar.

MistEye, riskleri anında haberleştirme ve müşteri uyarı kanallarıyla eş zamanlı olarak paylaşmıştır.

Kötü amaçlı yükleyici ve uzaktan yüklemek mekanizması

udeskApi.2026-10-16.cached.js dosyasını açtıktan sonra, müşteri hizmetleri butonu, sohbet iframe'i, ziyaretçi izleme ve mesaj iletişim fonksiyonlarının kodlarını görebilirsiniz. Dosyanın sonuna doğru, ana yapıdan sonra ayrı bir fonksiyon daha bulunur: bu fonksiyon, _ud() ile iki dizeyi çözerek bir element oluşturur ve mevcut belgenin head bölümüne ekler.

Bu bölümde etiket adı ve uzak URL doğrudan yazılmamıştır. Sadece düz metin domain adı aranırsa, yüklenme girişi kaçırılabilir. _ud() fonksiyonunun uygulamasını inceledik ve her seferinde iki onaltılık karakter alıp bunları karaktere dönüştürdüğünü gördük; sabitler açıldığında, yüklenme hedefi netleşti.

736372697074, script olarak çözülür; başka bir sabit, https[:]//udeskqlobal[.]com/deeps.js olarak çözülür. Domaindeki qlobal, q harfiyle başlar ve arama sırasında bu yazım korunmalıdır. Yükleyici, betiği eşzamansız olarak ayarlar ve sayfaya ekler; bu konuma ulaşıldığında ve tarayıcı politikaları ile ağ koşulları izin verdiğinde, uzak kod mevcut belgeye girebilir.

Bu URL'ye ait yük deeps.js'tir. Araştırmanın odak noktası müşteri hizmetleri SDK'sından yüke kaymıştır. Üçüncü taraf klasik betikleri, gömüldüğü belgenin bağlamında çalışır ve erişebileceği veriler, gerçek olarak çalışan sayfa veya iframe'e bağlıdır. Müşteri hizmetleri sohbet penceresi iframe kullanır ve ana sayfada yüklenen betikleri otomatik olarak yalıtmaz.

Web veri toplama mekanizması ve etki alanı

deeps.js, başlangıçta window.location.hostname'ı okur ve üç site kuralına göre C yapılandırmasını oluşturur. Hangi sayfaların toplanacağına karar vermek için yalnızca bu yapılandırma yeterli değildir: Bu yapılandırma, tüm betiği mi yoksa belirli bir modülünü mi sınırlıyor, çıkış kontrolünün nerede yapıldığını izlemeye devam etmek gerekir.

Kontrol akışını aşağı doğru incelediğimizde, Cookie ve web depolama okuma, başlatma anı görüntüsü gönderimi ile form ve kimlik doğrulama istek kancalarının hepsi if (!C) return; ifadesinden önce yer alıyor. Aşağıda, kaynak kodu sırasına göre anı görüntüsü gönderimi ifadesi ve son XHR kancası alınmıştır; aradaki kodlar, biçimlendirilmiş görünüm D:L100, D:L151–L166’ya karşılık gelen yorumlarla atlanmıştır.

Çıkış kararı konumunun etki alanı netleştirildi: Hostname üç site kuralına uymasasa bile, betik önce veri toplama yoluna girer ve kancaları kurar, ardından adres modülünden çıkar. Maruz kalan sayfaları araştırırken, yalnızca bu üç site yapılandırmasına odaklanmak yeterli değildir.

Başladığında, yük, şu anki web sayfasına erişilebilir olan Cookie'leri, localStorage'ı ve sessionStorage'ı okur. Bu konumlar oturum durumunu, kullanıcı profillerini ve iş verilerini saklayabilir; bunların içinde hala geçerli ve yeniden kullanılabilir oturum belirteçleri varsa, saldırganlar bunları ele geçirerek kullanıcı oturumunu kopyalayabilir. Betik, üst düzey sayfa URL'sini ve geçerli belgenin origin'ini de içerir, böylece bu veriler kaynak sayfa ile birlikte gönderilir.

Toplu veri toplama süreci hatalara karşı dayanıklıdır. Kaynaklardan üst düzey URL okunamazsa, betik x ile değiştirir ve diğer alanları işlemeye devam eder; iki tür web sayfası verisi JSON olarak serileştirilir. Çerezlerin kapsamı, document.cookie ile okunabilir olan içerikle sınırlıdır; HttpOnly çerezler bu kapsam dışındadır.

Betik, sonraki gönderilen veriler için giriş noktalarını da korur. Kullanıcı formu gönderdiğinde, input, select ve textarea öğelerini dolaşır, boş olmayan içerikleri kopyalar ve orijinal gönderim sürecini sürdürür. Sayfada gerçek olarak doldurulan alanlar, örneğin hesap adı, şifre, CAPTCHA gibi bilgiler, ek veri gönderim yollarına girebilir ve bu bilgilerin sızması, hesaba giriş veya hesap ele geçirme amacıyla kullanılabilir.

Bu yol, HTMLFormElement.prototype.submit'i sarmalayarak ve submit olayını yakalama aşamasında dinleyerek gerçekleştirilir. Doğrudan arayüz üzerinden veri gönderen sayfalar için, betik fetch ve XHR'yi de sarmalar: Gövdesi olan ve URL'sinde login|signin|auth|register|signup|password gibi anahtar kelimeleri içeren isteklerde, ilgili içerik kopyalanır ve orijinal istek çağrısı korunur. Fetch dalı ayrıca URL'nin bir dize olduğunu ve gövdenin istek seçeneklerinden geldiğini gerektirir; FormData gibi nesneler doğrudan JSON serileştirildiğinde, toplanan içerik gerçek alanları içermeyebilir.

Veri sızıntısı mekanizması ve yedek kanal

Yukarıdaki toplama girişi nihayetinde aynı _send() fonksiyonunu çağırır. Bu fonksiyonu takip ederseniz, sabit alıcı adresinin https[:]//udeskqlobal[.]com/c.php olduğunu görebilirsiniz. Hızlı görüntüleme, s, o, c, l, ss alanları ile sayfa adresini, mevcut kaynağı, okunabilir çerezleri ve iki tür web deposunu taşır; daha sonra formlar ve kimlik doğrulama istekleri ilgili tetiklendiğinde gönderilir.

URL'nin soru işareti sonrası parametrelerini ayrıştırıp, asenkron POST gövdesine ekleyin ve Content-Type: application/x-www-form-urlencoded olarak ayarlayın. Aşağıda gönderim fonksiyonunu (D:L45–L60) tamamen koruyun:

Gönderim yolu, resim isteği yedeklemesini de içerir: XHR hatası oluşursa veya gönderim sırasında senkron bir hata meydana gelirse, betik bir Image nesnesi oluşturur, parametreli URL’yi src’ye atar ve verileri tekrar GET ile taşımaya çalışır. URL, ilk 8.000 JavaScript karakterine kadar kesilir; daha uzun içerikler eksik kalabilir.

Bu yolu anlarken, "istem gönderimi" ile "yanıt okuma" arasındaki farkı ayırt etmek gerekir. Betik, c.php yanıtını okumaz; basit istek koşullarını karşılayan çapraz kaynaklı POST istekleri, tarayıcı tarafından yanıt okumanın kısıtlanmasına kadar gönderilebilir, bu nedenle CORS hatası, istek gönderimiyle aynı anda ortaya çıkabilir. Hata ayıklama kayıtları, POST gövdesini ve resim GET parametrelerini aynı anda kontrol etmelidir; çıkış politikaları ise connect-src ve img-src'yi ayrı ayrı doğrulamalıdır. Belge yönlendirmesine neden olan normal formlar, asenkron isteklerin tamamlanabilmesini de etkileyebilir.

Bu noktada, web sayfası oturumu verilerinin ve sonraki gönderim içeriklerinin nereye gittiği açık. Ancak yük, site çıkışının belirlenmesinden sonra adres formatını tanımlama, sayfa metnini değiştirme ve kopyalama yolunu ele geçirme gibi bir başka dizi işlemi de içeriyor. Bu kodlar araştırmayı yatırım işlemlerine doğru daha da ileri sürüyor.

Yükleme adresi değiştirme ve klipboard soygun mekanizması

if (!C) return; sonrası, betik adres modülüne girer. İlk üç hostname kuralı artık açık bir amaç kazanır: mgbx[.]com, bikingex[.] ve bitxex[.]io eşleşmesi yaparak farklı sayfalar için adres ve kopyalama düğmesi eleman seçicilerini seçer.

Bu düzenli ifadelerde başlangıç ve bitiş bağlantıları yoktur ve tam domain adı karşılaştırmasına göre daha geniş bir kapsamda eşleşme yapar. Sayfa kuralı, location.href'in tamamını, sorgu parametrelerini veya fragmentleri de kontrol eder; deposit, recharge, assets gibi anahtar kelimeler de bu değerlendirme sürecine dahildir. Sayfa, öğe ve adres formatı eşleştiğinde, betik her 200 milisaniyede bir tarar ve tanımlanan yatırma adreslerini yapılandırma değerine değiştirir. Kullanıcı, değiştirilen adresi kullanarak geçerli bir transfer gerçekleştirirse, alıcı hedefi bu adrese dönüşür.

Üç site dalı, BTC, EVM, TRON, Solana, LTC ve DOGE olarak işaretlenmiş altı yapılandırma değeri paylaşır. Adres tanımlama, kullanıcı tarafından seçilen ağı veya adres doğrulama kodunu kontrol etmeden yalnızca karakter şekli ve eşleşme sırasına dayanır; bu da normal iş işaretlerini yanlış tanımlayabilir.

Kopyalama ile ilgili kodu kontrol etmeye devam edin, örneğin sayfa gösterimi ile klipboard içeriğini aynı anda müdahale ettiğini görebilirsiniz. Böylece kullanıcı, sayfa adresini ve kopyalanan sonucu birbirleriyle karşılaştırsalar bile, tutarlı bir şekilde değiştirilmiş değerler elde edebilir. Üç yol şunlardır:

  • Kopyalama panosu API'sini paketleyin. navigator.clipboard.writeText, önce parametreleri değiştirmek için R() çağırır, ardından orijinal yönteme iletir. Bu yol yalnızca hostname yapılandırmasıyla sınırlıdır, yeniden yüklemek için sayfa koşullarını kontrol etmez ve DOM taramasıyla eşleşen öğelere bağlı değildir.
  • Kopyala düğmesini değiştirin. Betik, eşleşen düğmeyi klonlar, yeni bir tıklama dinleyicisi kurar ve orijinal düğmeyi değiştirir. Yeni dinleyici, varsayılan eylemi ve olay yayılımını engeller ve _cur ortak değişkeninde saklanan adresi kopyalamaya çalışır.
  • Copy olayını engelle. _cur boş değilse ve sayfa kuralı sağlanıyorsa, document üzerindeki dinleyici, kullanıcı tarafından seçilen metnin adres olup olmadığını kontrol etmeden içeriği _cur olarak değiştirir.

Bu arada, klipbord API sarmalayıcısı ve kopya dinleyicisi kaynak kodunda yan yana yer alır (D:L260–L275), ancak tetikleme koşulları farklıdır:

_cur, son gerçek yer değiştirme adresini kaydeder. Aynı ekranda birden fazla adres varsa, son yer değiştirme öncekini geçersiz kılar; birden fazla düğme aynı değeri kopyalayabilir. Sayfa başlangıçta yapılandırma adresini zaten gösteriyorsa, tarama _cur'u başlatmaz ve yeni düğme dinleyicileri içerik yazmaz; klonlanan saklı HTML içsel olay öznitelikleri hâlâ olay işlemede yer alabilir.

Analiz sırasında, davranışın değerlendirilmesini etkileyen bir uygulama hatası tespit edildi: betik, Element.prototype'dan textContent'in kendi özellik tanımlayıcısını okumaya çalışıyor, ancak standart özellik Node.prototype'da tanımlanmıştır. Standart prototype ilişkisi altında, .set'e erişim bir istisna atar. Bu dalın başarısızlığından sonra catch, istisnayı gizler; ardından kodun öncesini ve sonrasını incelediğinizde, zamanlayıcı zaten kaydedilmiş ve sonraki kopyalama kancaları kendi koşullarına göre kurulacaktır. Tek bir dalın hatası, adres hırsızlığı modülünü durdurmayacaktır.

Özet

Takip eden客服 script sonunda yükleyiciyi inceledikten sonra, örneğin hedefinin oturum veya hesap sahteciliği için kullanılabilir verileri toplamak ve yatırma sayfalarında ve kopyalama işlemlerindeki alıcı adreslerini yapılandırma değerlerine değiştirmek olduğu ortaya çıktı. İlk hedef üç sitesel yapılandırmadan bağımsızdır, ikincisi ise siteye ve özel kopyalama yollarına göre etkinleştirilir; sorun giderme sırasında farklı maruz kalma senaryolarının kapsanması gerekir.

İlgili betikleri hâlâ yükleyen işlemler dağıtımını durdurmalı, maruz kalan kimlik bilgileri处置 edilmeli ve yüklemelerin hedefleri güvenilir arka uç ve işlem kayıtlarıyla kontrol edilmelidir.

Öneri

  1. Kirlenmiş kaynakların dağıtımını güvenlikle durdurun. Üretim hâlâ ilgili betikleri yüklemeye devam ediyorsa, gerçek yanıt, istek başlatma zinciri, önbellek bilgileri ve toplama zamanını kaydedin ve hemen engelleyin; bağımsız olarak doğrulanmış güvenilir bir sürümle geri dönün ve site barındırma, CDN, derleme ve etiket yönetimi yapılandırmalarını kontrol edin.
  2. Yüklenen ve dışa aktarılan kayıtlar aranıyor. Zararlı domainler, iki yol ve dosya karma değerleri birleştirilmiş sorgu ile inceleniyor; dışa aktarma kayıtları aynı zamanda POST gövdesi ve GET parametreleri kontrol ediliyor. Sıkıştırılmış betikler incelenirken, yükleyicideki onaltılık URL'ler de aranıyor, düz metin sadece bulunarak kaçırılma önleniyor.
  3. Kirlenmiş belgeyi sonlandırın ve maruz kalan kimlik bilgilerini处置 edin. İlgili sayfaları veya WebView belgelerini tamamen kapatın, eski kaynakların yeniden yüklenmesini önleyin. Maruziyet kapsamına göre, temiz bir ortamdan oturumu iptal edin, belirteçleri ve şifreleri değiştirin; script etiketlerini kaldırmak, zaten yüklenmiş olan kancaları ve zamanlayıcıları iptal etmez.
  4. Yüklemeyi gerçekleştiren sayfada, orijinal yatırma adresini, ilgili işlemleri ve gerçek transfer hedefini güvenilir bir kanal üzerinden doğrulayın ve işlem kayıtlarına dayanarak etkiyi değerlendirin.
  5. Betik doğrulaması ve veri dışa aktarma kısıtlamaları. İş kurallarına göre betik kaynaklarını ve bütünlük kontrollerini birleştirerek connect-src, img-src gibi ilkeleri doğrulayın; udeskqlobal[.]com için betik yüklemeyi ve veri dışa aktarmayı kısıtlayın.

IOC

Alan adı

udeskqlobal[.]com

URL

https[:]//udeskqlobal[.]com/deeps[.]js

https[:]//udeskqlobal[.]com/c[.]php

Cüzdan adresi

BTC: bc1qhzppfj69ywp22swj50jwcfxdamg3ym245srng9

EVM: 0x9B6EcD0023a28E1391c5124eCe578A9751A337b2

TRON: TH4L5YAhhxtC8qALbZKbPZZgausbGi25nF

Solana: AFmCUe3nNbjTaC585CcdA3vvC9iWVR8YunooFKpaQx2Z

LTC: ltc1qwz0zp39ywl34kahvn9lyk7j5x63wsy9tcxhm3w

DOGE: DAoy2w8uvFtZ92q87s9qKEoHbWgV7mVThj

Kötü niyetli dosya

udeskApi.2026-10-16.cached.js

SHA256: 45b4e8f160d8d5177819f6c1dc67acc7abbdc65eeaffc909e668799dc778bcf6

deeps.js

SHA256: 57c1441c4f5bb3260981a2df64f9ff35f117abde0d8667c8c66a047880074c59

MistEye Hakkında

MistEye, SlowMist tarafından özgün olarak geliştirilen bir Web3 tehdit istihbaratı ve dinamik güvenlik izleme platformudur ve API aracılığıyla açık kaynak paket ekosistemindeki kötü amaçlı faaliyetlerin tespiti ile tedarik zinciri riski uyarıları sağlar.

Bu kampanyada yer alan tüm zararlı paketler ve IOC, MistEye tehdit tespit motoruna entegre edilmiştir. Geliştiriciler, API aracılığıyla projelerinin bağımlılıklarını otomatik olarak tarayarak bilinen zararlı paketlere uyup uymadığını hızlıca belirleyebilir ve işlem önerileri alabilir.

Yasal Uyarı: Bu sayfadaki bilgiler üçüncü şahıslardan alınmış olabilir ve KuCoin'in görüşlerini veya fikirlerini yansıtmayabilir. Bu içerik, herhangi bir beyan veya garanti olmaksızın yalnızca genel bilgilendirme amacıyla sağlanmıştır ve finansal veya yatırım tavsiyesi olarak yorumlanamaz. KuCoin, herhangi bir hata veya eksiklikten veya bu bilgilerin kullanımından kaynaklanan sonuçtan sorumlu değildir. Dijital varlıklara yapılan yatırımlar riskli olabilir. Lütfen bir ürünün risklerini ve risk toleransınızı kendi finansal koşullarınıza göre dikkatlice değerlendirin. Daha fazla bilgi için lütfen Kullanım Koşullarımıza ve Risk Açıklamamıza bakınız.