Ushbu bo'limda cross-site request forgery nima ekanini tushuntiramiz, keng tarqalgan CSRF zaifliklariga misollar keltiramiz va CSRF hujumlarining oldini olishni ta'riflaymiz.
Cross-site request forgery (CSRF deb ham ataladi) — bu veb-xavfsizlik zaifligi bo'lib, hujumchiga foydalanuvchilarni o'zlari bajarishni niyat qilmagan amallarni bajarishga undash imkonini beradi. U hujumchiga same-origin policy'ni qisman chetlab o'tishga imkon beradi — bu siyosat esa turli vebsaytlar bir-biriga aralashishining oldini olish uchun mo'ljallangan.
Muvaffaqiyatli CSRF hujumida hujumchi jabrlanuvchini biror amalni beixtiyor bajarishga majbur qiladi. Masalan, bu hisobidagi email manzilini o'zgartirish, parolini almashtirish yoki mablag' o'tkazish bo'lishi mumkin. Amalning tabiatiga qarab, hujumchi foydalanuvchi hisobi ustidan to'liq nazoratni qo'lga kiritishi mumkin. Agar buzilgan foydalanuvchi ilovada imtiyozli rolga ega bo'lsa, hujumchi barcha ilova ma'lumotlari va funksiyalarini to'liq nazorat qilishi mumkin.
CSRF hujumi mumkin bo'lishi uchun uchta asosiy shart mavjud bo'lishi kerak:
Masalan, ilovada foydalanuvchiga hisobidagi email manzilini o'zgartirishga imkon beruvchi funksiya bor deb faraz qiling. Foydalanuvchi bu amalni bajarganda quyidagiga o'xshash HTTP so'rov yuboriladi:
POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE
email=wiener@normal-user.comBu CSRF uchun kerakli shartlarga javob beradi: amal hujumchi uchun qiziq; ilova so'rovni kim yuborganini aniqlash uchun faqat sessiya cookie'sidan foydalanadi; hujumchi kerakli parametr qiymatlarini osongina aniqlaydi.
Shu shartlar mavjud bo'lsa, hujumchi quyidagi HTML'ni o'z ichiga olgan veb-sahifa tuzishi mumkin:
<html>
<body>
<form action="https://vulnerable-website.com/email/change" method="POST">
<input type="hidden" name="email" value="pwned@evil-user.net" />
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>Agar jabrlanuvchi hujumchi sahifasiga tashrif buyursa: hujumchi sahifasi zaif vebsaytga HTTP so'rov yuboradi; foydalanuvchi zaif vebsaytga login qilingan bo'lsa, brauzer avtomatik ravishda sessiya cookie'sini so'rovga qo'shadi (SameSite cookie'lar ishlatilmagan bo'lsa); zaif vebsayt so'rovni odatdagidek, jabrlanuvchi yuborgan deb qabul qilib, uning email manzilini o'zgartiradi.
CSRF odatda cookie asosidagi sessiya boshqaruviga nisbatan tasvirlansa-da, u ilova so'rovlarga foydalanuvchi ma'lumotlarini avtomatik qo'shadigan boshqa kontekstlarda ham (masalan HTTP Basic autentifikatsiya va sertifikatga asoslangan autentifikatsiya) yuzaga keladi.
CSRF ekspluatatsiyasi uchun kerakli HTML'ni qo'lda yaratish, ayniqsa so'rovda ko'p parametr bo'lsa, mashaqqatli bo'lishi mumkin. Eng oson yo'l — Burp Suite Professional'ga o'rnatilgan CSRF PoC generatoridan foydalanish: Burp'da so'rovni tanlab, o'ng tugma menyusidan Engagement tools → Generate CSRF PoC ni tanlaysiz, Burp so'rovni ishga tushiradigan HTML generatsiya qiladi (cookie'lar avtomatik qo'shiladi), so'ng uni brauzerda sinab ko'rasiz.
CSRF hujumlarini yetkazish mexanizmlari mohiyatan reflected XSS bilan bir xil. Odatda hujumchi zararli HTML'ni o'zi boshqaradigan vebsaytga joylashtirib, jabrlanuvchilarni o'sha saytga tashrif buyurishga undaydi (email yoki ijtimoiy tarmoq xabari orqali havola berib). Ba'zi oddiy CSRF ekspluatatsiyalari GET metodidan foydalanadi va zaif vebsaytdagi bitta URL bilan to'liq mustaqil bo'lishi mumkin:
<img src="https://vulnerable-website.com/email/change?email=pwned@evil-user.net">Hozirgi kunda CSRF zaifliklarini topish va ekspluatatsiya qilish ko'pincha nishon vebsayt yoki brauzer joriy qilgan anti-CSRF choralarini chetlab o'tishni talab qiladi. Eng keng tarqalgan himoyalar:
Referer sarlavhasidan foydalanib, so'rov o'z domenidan kelganini tekshiradi. Bu odatda CSRF token tekshiruvidan kamroq samarali.