JavaScript kodundaki eylemleri gizlemek için görünmez unicode karakterler kullanma

Çift yönlü metnin görüntülenme sırasını değiştiren Unicode karakterlerin kullanımına dayanan Truva Atı Kaynağı saldırı yönteminin ardından, JavaScript koduna uygulanabilen gizli eylemleri tanıtmaya yönelik başka bir teknik yayınlandı. Yeni yöntem, harfler kategorisine ait olan ancak görünür içeriği olmayan “ㅤ” (kod 0x3164, “HANGUL FILLER”) unicode karakterinin kullanımına dayanıyor. Bu karakterin ait olduğu Unicode kategorisine, ECMAScript 2015 spesifikasyonundan bu yana JavaScript değişken adlarında kullanılmasına izin verilmiştir; bu, Notepad++ ve VS Code gibi popüler kod düzenleyicilerinde görünmez değişkenler veya diğer değişkenlerden ayırt edilemeyen yeni değişkenler oluşturmayı mümkün kılar.

Örnek olarak, tek bir "ㅤ" karakterinden oluşan bir değişken kullanılarak, saldırgan tarafından belirtilen kodun çalıştırılmasına izin veren bir arka kapının gizlendiği Node.js platformunun kodu verilmiştir: app.get('/ network_health', async (req, res) = > { const { timeout,ㅤ} = req.query; // aslında “const { timeout,ㅤ \u3164}” diyor const checkCommands = [ 'ping -c 1 google. com', 'curl -s http:// example.com/',ㅤ // virgülün ardından \u3164 karakteri gelir ];

İlk bakışta harici parametre üzerinden sadece timeout değeri geçmektedir ve yürütülecek komutların bulunduğu dizi zararsız bir sabit liste içermektedir. Ancak aslında, zaman aşımı değişkeninden sonra, \u3164 karakter koduna sahip başka bir görünmez değişkenin değeri atanır ve bu da yürütülebilir komutlar dizisinin yerine geçer. Yani eğer böyle bir tasarım varsa saldırgan “https://host:8080/network_health?%E3%85%A4=command” gibi bir istek göndererek arka kapıyı aktif hale getirip kodunu çalıştırabilir.

Başka bir örnek, bir ünlem işaretini belirten görünümü vermek için kullanılabilen "ǃ" (ALVEOLAR TIKLAMA) karakteridir. Örneğin, "if(environmentǃ=ENV_PROD){" ifadesi Node.js 14'te çalıştırıldığında her zaman doğru olacaktır çünkü farkı kontrol etmez ancak ENV_PROD değerini "environmentǃ" değişkenine atar. Diğer yanıltıcı unicode karakterler arasında "/", "−", "+", "⩵", "❨", "⫽", "꓿" ve "∗" yer alır.

Kaynak: opennet.ru

Yorum ekle