Redos Nedir
Karakter kombinasyonlarını eşleştirmek için kullanılan (regex) kusurlarını istismar eden bir DOS (Hizmet dışı bırakma) saldırısı türüdür.Kötü yazılmış regex ler sistemde ciddi bir yavaşlamaya neden olacak şekilde istismar edilebilir. Bu zafiyeti anlamak için regex motorlarını anlamamız gerekir.
Regex Motoru Nasıl Çalışır
Regex Motorları 2 ye ayrılır Deterministik ve Non-deterministik. Burda kafanızı çok karıştırmayacagım şunu bilmeniz yeterlidir

eterministik -> tek yol -> hızlı ve güvenliNon-deterministik -> birçok yol -> güçlü ama suistimale açıkyani Deterministik olan motor yapısı geregi redos a karşı korumalıdır bizde bugun Non-deterministik olan motorda redosun nasıl olustugunu inceleyecegiz.burdaki en onemli fikir motor karar veremiyor. Bir karakteri nasıl yorumlayacağına emin olamıyor ,Motor bir karakteri kabul etmek için ilk olası yolu dener ve ilerler eğer bir sonraki karakterde eşleşme başarısız olursa "
backtrack" (geriye dönme) yapar ve önceki karakteri işlemenin başka bir yolu olup olmadıığına bakar.Burda ki anahtar kelime
backtrack butun olay burda kopuyor hadi bir onrek ustunden inceliyelim
ReDoS Güvenlik Açığı Örnekler
Evil regex , ReDoS saldırılarına karşı hassas olan regex patternlerine kullanılan bir terimdir.Bunlar tipik olarak yoğun
backtracking e neden olabilen patternlerdir.Örneğin ^(a+)+$ desenini ele alalım bu desen tamamen 'a' harflerinden oluşan inputları eşleşmeyi hedefler , ancak aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! boyle bir input verdigimizde motor asla bulamayacağı bir eşleşme için
backtracking yapmaya başlar ve buda ReDoS a sebep olucaktırOWASP tarafından paylaşılan ve aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! gibi girdilere karşı savunmasız olan diğer örnekler:
- (a+)+
- ([a-zA-Z]+)*
- (a|aa)+
- (a|a?)+
videolu kısa bir örneklendirme:
https://streamable.com/jjuj8k
video da gordugunuz uzere ilk olarak a! veriyorum burdaki ! herhangibi birşey olabilir olay eşleşmemesini saglamak ve sadece 8 adım da regex ile inputun uyuşmadıgını gosteriyor fakat a harfini arttırdıgımda katastrofik bir şekilde adım sayısının arttıgını goruyoruz bu gordugumuz şey
backtracking olarak adlandırılıyor ve bunun bir sunucuya ne kadar zarar verebilecegini duşunuyor musunuz.Bazı regex pattern leri ReDoS a karşı savunmasızdır. genellikle nested repetitions içerirler:
- * (zero or more)
- + (one or more)
- {n,} (n or more)
işte redosa karşı savunmasız olan dil ve kütüphane listesi:
Python: re
PHP: PCRE
JavaScript: RegExp
Java: java.util.regex
Perl: Standart Regex Motoru
Ruby: Onigmo / Oniguruma
C# / .NET: System.Text.RegularExpressions
C++: std::regex
Swift: NSRegularExpression
R: base::grep (PCRE seçeneğiyle)
Kapanış
Minik bir bilgi
Stack Overflow Kesintisi2016 yılında Stack Overflow 34 dakika boyunca erişilemez oldu. bunun tek sebebi şu regex ti:^[\s\u200c]+|[\s\u200c]+$Bu regex, hatalı biçimlendirilmiş bir gönderi üzerinde çalıştırıldı ve web sunucularında yüksek CPU kullanımına neden oldu. neyse ki kesinti uzun sürmedi.
Guvenlik araştırmacıları
Online Repository lerde zafiyetli Regex lerÇevrimiçi kod depoları, ReDoS zafiyeti arayan hackerlar için adeta bir hazine niteliğindedir. birçok açık kaynak proje çeşitli amaçlarla regex kullanır ve bunların hepsi regex yazımında en iyi pratikleri takip etmez.gitHub üzerindeki binlerce popüler projeyi inceleyen yakın tarihli bir çalışma projelerin %10 undan fazlasının ReDoS saldırılarına karşı savunmasız olduğunu ortaya koymuştur. saldırganlar da benzer araştırmalar yaparak zafiyetli repository leri bulabilir ve bu kütüphaneleri kullanan sistemlere saldırabilir.