Pengantar
Dalam dunia keamanan aplikasi, tidak semua serangan membutuhkan eksploitasi celah teknis yang rumit. Salah satu ancaman yang sering luput dari perhatian adalah Complexity Attack, serangan yang memanfaatkan kerumitan algoritma dan struktur data untuk melumpuhkan sistem. Salah satu bentuk paling populer dari serangan ini adalah Regular Expression Denial of Service (ReDoS).
ReDoS bekerja dengan cara sederhana namun mematikan: penyerang mengirimkan input tertentu yang menyebabkan engine regex bekerja sangat lambat, menghabiskan CPU, dan akhirnya membuat aplikasi tidak responsif. Ironisnya, celah ini sering muncul bukan karena bug keamanan, melainkan karena desain struktur data dan pola regex yang buruk.
Apa Itu Complexity Attack?
Eksploitasi Kompleksitas Algoritma
Complexity Attack adalah serangan yang mengeksploitasi perbedaan antara:
-
Kasus normal (average case)
-
Kasus terburuk (worst case)
Jika sebuah algoritma memiliki kompleksitas waktu eksponensial pada kondisi tertentu, maka penyerang dapat dengan sengaja menciptakan kondisi tersebut.
baca juga : Infrastructure as Code (IaC): Mengunci Celah Keamanan pada Terraform Sebelum Deploy ke Production
Hubungan Complexity Attack dengan ReDoS
ReDoS merupakan bentuk khusus dari Complexity Attack yang menargetkan regular expression engine, terutama yang menggunakan pendekatan backtracking.
Menurut OWASP, ReDoS terjadi ketika regex membutuhkan waktu komputasi berlebihan akibat pola yang ambigu (dikutip dari OWASP).
Bagaimana ReDoS Bekerja di Balik Layar?
Backtracking pada Regex Engine
Banyak bahasa pemrograman (seperti Java, JavaScript, Python, dan PHP) menggunakan regex engine berbasis backtracking. Engine ini akan:
-
Mencoba mencocokkan pola
-
Jika gagal, mundur (backtrack)
-
Mencoba kemungkinan lain
Pada pola tertentu, jumlah percobaan ini dapat meledak secara eksponensial.
Contoh Pola Regex Berbahaya
Nested Quantifier
Dengan input seperti:
Engine regex akan mencoba jutaan kemungkinan sebelum menyadari bahwa input tidak cocok.
Dampak Langsung ke Sistem
-
CPU usage melonjak drastis
-
Thread aplikasi terkunci
-
Service menjadi lambat atau down
-
Dapat dieksploitasi dari satu request saja
baca juga : Privilege Escalation: Cara Hacker Mendapatkan Akses “Root” Melalui Miskonfigurasi Sudoers di Linux
Peran Struktur Data yang Buruk dalam ReDoS
Regex sebagai Struktur Data Tersembunyi
Regex sering diperlakukan sebagai string biasa, padahal secara internal ia adalah struktur data kompleks yang menentukan alur eksekusi.
Kesalahan umum:
-
Terlalu banyak wildcard (
.*) -
Nested repetition
-
Alternation berlapis (
(a|aa)+)
Kurangnya Batasan Input
Tanpa pembatasan panjang input:
-
Penyerang bebas mengirim payload besar
-
Kompleksitas waktu meningkat drastis
-
Serangan menjadi sangat efisien
Strategi Mitigasi Serangan ReDoS
Hindari Pola Regex Ambigu
Prinsip aman:
-
Hindari nested quantifier
-
Gunakan anchor (
^dan$) -
Spesifik pada karakter yang diizinkan
Batasi Panjang Input
Validasi input sebelum regex diproses:
-
Maksimum panjang string
-
Tolak input abnormal lebih awal
Gunakan Regex Engine yang Aman
Beberapa engine modern mendukung:
-
Time-out regex
-
Linear-time regex
-
Non-backtracking engine
Langkah ini dapat mencegah regex berjalan tanpa batas.
Uji Regex terhadap Worst-Case Scenario
Lakukan pengujian dengan:
-
Input panjang
-
Karakter berulang
-
Pola hampir cocok
Ini penting untuk mendeteksi risiko sebelum aplikasi dirilis.
baca juga : BGP Hijacking: Bagaimana Peretas Bisa Membelokkan Rute Internet Global ke Server Mereka Sendiri
Kesimpulan
Complexity Attack membuktikan bahwa ancaman siber tidak selalu berasal dari eksploitasi celah tradisional. ReDoS memanfaatkan kelemahan desain algoritma dan struktur data, khususnya pada regex yang tidak dirancang dengan aman.
Dengan memahami cara kerja regex engine, menghindari pola berbahaya, serta menerapkan pembatasan input, pengembang dapat mencegah serangan ReDoS sejak tahap desain. Dalam keamanan aplikasi modern, efisiensi algoritma adalah bagian dari pertahanan siber.









