𝗠𝗲𝗻𝗴𝗮𝘂𝘁𝗲𝗻𝘁𝗶𝗸𝗮𝘀𝗶 𝗪𝗲𝗯𝗵𝗼𝗼𝗸 𝗕𝘂𝗸𝗮𝗻 𝗕𝗲𝗿𝗺𝗮𝗸𝘀𝘂𝗱 𝗠𝗲𝗹𝗮𝗸𝘂𝗸𝗮𝗻 𝗩𝗮𝗹𝗶𝗱𝗮𝘀𝗶
Ramai pembangun melancarkan pepijat berbahaya ke produksi. Mereka keliru antara pengesahan (authentication) dengan validasi (validation).
Pengesahan (Authentication) bermaksud mesej tersebut datang daripada penyedia yang betul. Validasi (Validation) bermaksud data di dalam mesej tersebut adalah betul.
Jika anda hanya melakukan langkah pertama, anda akan kerugian wang.
Kerentanan WordPress baru-baru ini (CVE-2026-9189) menunjukkan ralat ini. Contact Form 7 PayPal and Stripe Add-on gagal menyemak jumlah pembayaran.
Berikut adalah cara penyerang mengeksploitasi perkara ini:
- Seorang penyerang mencipta pesanan bernilai $2,000.
- Penyerang membuat pembayaran sebenar sebanyak $1.
- Mereka menetapkan nombor invois supaya sepadan dengan pesanan $2,000 tersebut.
- PayPal menghantar notifikasi yang sah dan disahkan untuk pembayaran $1 tersebut.
- Plugin tersebut melihat mesej yang disahkan itu dan menandakan pesanan $2,000 sebagai telah dibayar.
Plugin tersebut mempercayai penghantar mesej tetapi mengabaikan kandungan mesejnya.
Jangan lakukan kesilapan ini. Apabila anda mengendalikan webhook, ikuti langkah-langkah ini:
- Autentikasi mesej menggunakan tandatangan (signatures) atau rahsia kongsi (shared secrets).
- Padankan jumlah dan mata wang dengan pesanan dalam pangkalan data anda.
- Sahkan e-mel penerima sepadan dengan akaun anda.
- Gunakan nilai sebelah pelayan (server-side) untuk menghubungkan pesanan. Jangan hanya mempercayai ID invois yang dihantar dalam payload.
- Gunakan idempotensi untuk mengabaikan ID transaksi yang bertindih.
- Pastikan pengesahan TLS sentiasa aktif untuk semua permintaan.
- Gagal secara tertutup (Fail closed). Jika mana-mana semakan gagal, hentikan segalanya.
Jika anda menggunakan Contact Form 7 PayPal and Stripe Add-on versi 2.4.9 atau lebih lama, kemas kini sekarang. Setiap pesanan yang belum dibayar adalah sasaran untuk eksploitasi ini.
Sentiasa autentikasi penghantar mesej, kemudian semak datanya.