Checklist Pengujian Keamanan MFA/2FA

Panduan pengujian keamanan untuk menemukan kelemahan pada implementasi Multi-Factor Authentication (MFA) / Two-Factor Authentication (2FA) dalam aplikasi web.

Dokumen ini ditujukan untuk security researcher, penetration tester, dan bug bounty hunter yang bekerja dalam lingkup pengujian yang sah dan berizin.

Seluruh teknik di bawah ini hanya boleh dilakukan pada sistem yang Anda miliki atau memiliki izin eksplisit tertulis untuk diuji. Penggunaan tanpa izin adalah tindakan ilegal.


Daftar Isi

  1. Manipulasi Response
  2. Akses Halaman Langsung (Direct Request)
  3. Brute Force OTP
  4. Kode Cadangan (Backup Codes)
  5. Logika Verifikasi Cacat (Flawed Logic)
  6. Serangan Berbasis Waktu (Time-based Attacks)
  7. Saluran Autentikasi Alternatif
  8. Manajemen Sesi
  9. Alur Pemulihan (Recovery Flow)
  10. Pendaftaran MFA (MFA Enrollment)
  11. Kebocoran Informasi (Information Leakage)
  12. CSRF pada Fitur MFA
  13. Clickjacking pada Fitur MFA
  14. Analisis File JavaScript
  15. Kelemahan Lainnya

1. Manipulasi Response

Deskripsi: Pengujian apakah server mempercayai input dari sisi klien untuk menentukan keberhasilan verifikasi 2FA. Kerentanan ini terjadi ketika logika validasi berada di sisi klien (front-end) alih-alih di server.

1.1 Manipulasi Body Response

Contoh response asli:
{ "success": false, "message": "Invalid OTP" }

Response yang dimanipulasi:
{ "success": true, "message": "Invalid OTP" }

Dampak jika rentan: Penyerang dapat melewati 2FA sepenuhnya tanpa mengetahui kode yang benar.


1.2 Manipulasi Status Code HTTP

Response asli:    HTTP/1.1 401 Unauthorized
Response diubah:  HTTP/1.1 200 OK

Dampak jika rentan: Logika front-end yang bergantung pada status code dapat tertipu, membuka akses tanpa validasi server yang tepat.


1.3 Penghapusan Pesan Error

Catatan Analisis: Bagian ini tidak ada dalam dokumen asli. Ditambahkan karena beberapa aplikasi menggunakan kehadiran pesan error sebagai sinyal penolakan; tanpa pesan error, request dapat diteruskan.


2. Akses Halaman Langsung (Direct Request)

Deskripsi: Pengujian apakah URL yang seharusnya hanya dapat diakses setelah melewati 2FA dapat diakses secara langsung tanpa menyelesaikan proses verifikasi.

2.1 Akses Langsung Tanpa 2FA


2.2 Manipulasi Header Referer

GET /dashboard HTTP/1.1
Host: target.com
Cookie: session=abc123
Referer: https://target.com/login/2fa

Dampak jika rentan: Server memvalidasi Referer (yang dapat dipalsukan) bukan status sesi 2FA yang sesungguhnya.


2.3 Pengujian Endpoint API Secara Terpisah

Catatan Analisis: Bagian pengujian endpoint API dan multi-bagian aplikasi ini tidak ada dalam dokumen asli. Penting karena banyak aplikasi menerapkan 2FA di front-end namun mengabaikannya di lapisan API.


3. Brute Force OTP

Deskripsi: Pengujian apakah sistem membatasi jumlah percobaan memasukkan kode OTP yang salah. Tanpa pembatasan, penyerang dapat mencoba semua kemungkinan kombinasi kode.

3.1 Pengujian Rate Limiting


3.2 Pengujian Account Lockout

Catatan Analisis: Pengujian account lockout tidak ada secara eksplisit dalam dokumen asli. Ini merupakan kontrol keamanan penting yang perlu diverifikasi.


3.3 Panjang Kode OTP


3.4 Regenerasi OTP Tak Terbatas


3.5 Rate Limit Alur vs Rate Limit Kode


3.6 Reset Rate Limit Melalui Resend OTP

Dampak jika rentan: Rate limit dapat di-reset setiap kali OTP baru diminta, membuat brute force menjadi mungkin secara bertahap.


4. Kode Cadangan (Backup Codes)

Deskripsi: Kode cadangan adalah mekanisme recovery ketika perangkat 2FA tidak tersedia. Jika tidak diamankan dengan benar, dapat menjadi jalur bypass 2FA.

4.1 Penerapan Single-Use (Sekali Pakai)


4.2 Kekuatan Kode Cadangan


4.3 Penyimpanan Aman


4.4 Kontrol Akses pada Backup Codes

Catatan dari dokumen asli: Backup codes seharusnya hanya tersedia pada satu permintaan segera setelah 2FA diaktifkan. Akses berikutnya seharusnya tidak menampilkan kode yang sama.


4.5 Terapkan Teknik 2FA pada Backup Codes


5. Logika Verifikasi Cacat (Flawed Logic)

Deskripsi: Kerentanan di mana server tidak memvalidasi bahwa pengguna yang melakukan langkah kedua (verifikasi kode) adalah pengguna yang sama yang menyelesaikan langkah pertama (login password).

POST /login-steps/second HTTP/1.1
Host: vulnerable-website.com
Cookie: account=victim-user    ← Diubah dari "attacker" ke "victim"

verification-code=123456       ← Kode valid milik attacker

Dampak jika rentan: Penyerang dapat mengakses akun korban menggunakan kode 2FA miliknya sendiri.


5.2 Berbagi Token Antar Akun (Missing 2FA Code Integrity Validation)


5.3 Penggunaan Ulang Token Sebelumnya


6. Serangan Berbasis Waktu (Time-based Attacks)

Deskripsi: OTP berbasis waktu (TOTP) memiliki jendela validitas terbatas. Kelemahan implementasi pada aspek waktu dapat menciptakan celah keamanan.

6.1 Toleransi Clock Skew

Catatan Analisis: Bagian clock skew tidak ada dalam dokumen asli. Penting untuk diuji terutama pada implementasi TOTP (RFC 6238).


6.2 Penggunaan Ulang Kode dalam Jendela Waktu


6.3 Penerimaan Kode Kadaluwarsa

Catatan dari dokumen asli: Durasi 1 hari cukup untuk melakukan cracking/guessing kode 6 digit, sehingga kode yang tidak kadaluwarsa merupakan kerentanan serius.


7. Saluran Autentikasi Alternatif

Deskripsi: Aplikasi modern sering memiliki beberapa jalur akses (web, API, mobile, SSO). Kelemahan umum adalah ketika 2FA hanya diterapkan di satu jalur namun tidak di jalur lainnya.

7.1 API Melewati 2FA


7.2 Mobile App Melewati 2FA

Catatan Analisis: Bagian ini tidak ada dalam dokumen asli. Kritis karena banyak aplikasi menerapkan 2FA di web namun melupakan implementasinya di mobile app.


7.3 SSO Melewati 2FA


7.4 Subdomain dengan Versi Lama


7.5 Manipulasi Mode MFA

Berdasarkan kasus nyata (Grammarly):


8. Manajemen Sesi

Deskripsi: Sesi yang dibuat sebelum atau selama proses 2FA harus dikelola dengan benar. Sesi yang tidak diinvalidasi atau dapat diprediksi menciptakan celah keamanan.

8.1 Sesi Sebelum 2FA Tidak Dibatasi


8.2 Sesi Sebelum MFA Masih Valid Setelah Aktivasi MFA


8.3 Session Fixation dengan MFA

Catatan Analisis: Bagian ini tidak ada dalam dokumen asli. Session fixation + 2FA adalah kombinasi kerentanan yang perlu diuji secara spesifik.


8.4 Izin Sesi (Session Permission)


8.5 Fungsi “Remember This Device”


9. Alur Pemulihan (Recovery Flow)

Deskripsi: Fitur pemulihan akun (reset password, ubah email) sering menjadi jalur alternatif yang tidak memerlukan 2FA, sehingga menjadi target serangan.

9.1 Reset Password Melewati 2FA

Catatan dari dokumen asli: Hampir semua aplikasi web secara otomatis login pengguna setelah berhasil mereset password. Ini bisa menjadi bypass 2FA yang efektif.


9.2 Perubahan Email Menonaktifkan 2FA



9.4 Ketahanan terhadap Social Engineering

Catatan Analisis: Aspek social engineering resistance tidak ada dalam dokumen asli namun kritis dalam konteks recovery flow.


10. Pendaftaran MFA (MFA Enrollment)

Deskripsi: Proses mendaftarkan metode 2FA baru harus dilindungi dengan baik, karena kelemahan di sini dapat memungkinkan penyerang mendaftarkan perangkat 2FA miliknya ke akun korban.

10.1 Melewati Proses Pendaftaran MFA


10.2 Menonaktifkan 2FA Tanpa Autentikasi yang Memadai

Kasus nyata dari dokumen asli:

1. Aktifkan 2FA dari /settings/auth
2. Klik tombol nonaktifkan 2FA
3. Masukkan kode autentikasi yang valid
4. Di kolom password, masukkan nilai sembarang
5. Jika 2FA berhasil dinonaktifkan → password tidak divalidasi

10.3 Aktivasi 2FA Tanpa Verifikasi Email


10.4 Proteksi Re-enrollment

Catatan Analisis: Bagian ini tidak ada dalam dokumen asli. Re-enrollment tanpa validasi memungkinkan account takeover jika session dikompromikan.


11. Kebocoran Informasi (Information Leakage)

Deskripsi: Aplikasi yang tidak sengaja mengekspos kode 2FA atau informasi sensitif lainnya dalam response HTTP.

11.1 Kebocoran Kode OTP dalam Response


11.2 Informasi Sensitif di Halaman 2FA


11.3 Analisis File JavaScript


12. CSRF pada Fitur MFA

Deskripsi: Cross-Site Request Forgery pada fitur terkait MFA dapat memungkinkan penyerang menonaktifkan atau memodifikasi pengaturan 2FA korban tanpa sepengetahuan mereka.

12.1 CSRF pada Fitur Nonaktifkan 2FA


12.2 CSRF pada Fitur Ubah Pengaturan 2FA


13. Clickjacking pada Fitur MFA

Deskripsi: Clickjacking memungkinkan penyerang menyisipkan halaman aplikasi dalam iframe tersembunyi, kemudian mengelabui pengguna untuk mengklik tombol (seperti “Nonaktifkan 2FA”) tanpa menyadarinya.

13.1 Pengujian Iframe pada Halaman Nonaktifkan 2FA

<iframe src="https://target.com/settings/disable-2fa"></iframe>

13.2 Header Keamanan


14. Analisis File JavaScript

Deskripsi: File JavaScript yang digunakan oleh halaman 2FA dapat mengandung informasi sensitif atau logika yang dapat dieksploitasi.

14.1 Pencarian Endpoint Tersembunyi


14.2 Client-Side Rate Limit Bypass

Catatan dari dokumen asli: Merujuk ke rate-limit-bypass.md — pastikan untuk menguji semua teknik rate limit bypass yang relevan.


15. Kelemahan Lainnya

15.1 Bypass dengan Kode Null atau 000000


15.2 Bypass dengan Mengirim Kode Kosong

Berdasarkan kasus nyata (Glassdoor):

Request original:  verification-code=123456
Request dimodifikasi: [parameter dihapus sepenuhnya]

15.3 Penyalahgunaan Fungsi Reset Password untuk Mengeksploitasi Sesi

Berdasarkan kasus nyata (Grammarly):


Referensi