Selamlar,
GitLab'ın bu ay üst üste iki CVSS 10 regex derleyici açığı yayınlaması (CVE-2026-97229 ve CVE-2026-110264) birçok ekibi aynı soruya getirdi: düzenli ifadeler neden bu kadar tehlikeli olabiliyor? GitLab açıkları bellek taşması sınıfındaydı; ama aynı ailede daha yaygın görülen bir kardeş var: ReDoS (Regular Expression Denial of Service). Bu yazıda OWASP'ın ReDoS sayfasına dayanarak evil regex kavramını ve kendi kodunuzda nasıl tarayacağınızı anlatıyorum.
Konuda anlatılacaklar
- Naif regex motoru ve backtracking
- Evil regex nedir?
- Saldırı senaryoları
- Lab ve savunma
Naif algoritma
OWASP'a göre birçok regex motoru NFA (Nondeterministic Finite Automaton) kurar ve eşleşme bulunana kadar olası yolları tek tek dener. Girdi eşleşmezse motor önceki konumlara dönüp (backtracking) başka yolları dener. Kötü yazılmış bir desende yol sayısı girdi uzunluğuyla üstel büyür; örneğin ^(a+)+$ deseni için aaaaX 16 yol, on altı a içeren girdi 65536 yol üretebilir.
Evil regex
OWASP, şu özelliklere sahip desenleri "evil" sayar:
- Tekrar içeren gruplama
- Tekrarlanan grubun içinde: tekrar veya örtüşen alternasyon
Bu desenler aaaaaaaaaaaaaaaaaaaaaaaa! gibi bir girdide motoru uzun süre meşgul edebilir.
Saldırı senaryoları
- Web uygulamasında kullanıcı girdisinin evil bir regex ile doğrulanması (e-posta, sınıf adı vb.)
- Regex'in kendisinin kullanıcı girdisinden etkilenmesi (regex injection) - OWASP örneğinde kullanıcı adı regex olarak derleniyor
- WAF / tarayıcı / veritabanı katmanındaki regex'lerin hedef alınması
Lab
# Python - kendi labiniz (kisa timeout ile)
import re, time
pat = re.compile(r"(a+)+$")
s = "a" * 28 + "!"
t0 = time.time()
try:
pat.search(s)
finally:
print("sure_s:", round(time.time() - t0, 3))Savunma
- Kullanıcı girdisini regex'e gömmeyin; sabit bir desen kullanın.
- Mümkünse doğrulamayı regex yerine parser / allow-list ile yapın.
- Backtracking'siz motorlar veya atomic grouping / possessive quantifier kullanın (dile göre).
- Regex çalıştırırken zaman ve bellek limiti koyun.
- Bağımlılıklarınızda ve WAF kurallarınızda evil regex tarayıcıları (ör. rxxr2, regexploit) çalıştırın.
Kod tabanınızda kullanıcı girdisinden derlenen regex var mı? Son denetimde ne buldunuz?
Yasal uyarı
Bu yazı bilgilendirme ve savunma amaçlıdır. Anlatılan kontrolleri yalnızca kendi sistemlerinizde veya yazılı izinle yapın. İzinsiz erişim, tarama ve sömürü girişimleri TCK 243-245 kapsamında suçtur. TurkTeam white-hat bir topluluktur; çalıntı veri, hesap, combo/log paylaşımı ve hack hizmeti talepleri forum kurallarına aykırıdır.
Kaynaklar