Cross Site Request Forgery (CSRF)

Cross Site Request Forgery (CSRF)

İnternetin yaygınlaştığı bu günlerde e-ticaret de insanlar için olmazsa olmaz haline geldi. E-ticaret sayesinde alıcılar, istedikleri ürüne daha kolay, daha hızlı ve daha uygun fiyata ulaşabilirler. Satıcılar ise daha geniş bir kitleye ulaşabilir, rekabet güçlerini artırabilir ve işletme maliyetlerini azaltabilirler.

E-ticaretin önemi kadar, web sitelerinin güvenliği de çok önemlidir. Çünkü e-ticaret siteleri, alıcıların kişisel ve finansal bilgilerini saklar ve işler. Bu bilgilerin korunması, hem alıcıların hem de satıcıların haklarını ve itibarlarını korumak için gereklidir.

Web siteleri, hem kullanıcılara daha iyi hizmet sunabilmek için hem de daha fazla satış yapabilmek için çerez (cookie) dediğimiz verileri kullanır. Çerezler, web sitesine girdiğimizde bize özel ayarları saklar. Çerezler kimlik bilgileri gibi değerli veriler sakladığı için güvenlik açısından önemlidir.

CSRF zafiyeti, saldırganın, kullanıcının oturum açtığı bir web uygulamasına, kullanıcının isteği dışında istek göndermesine neden olan bir güvenlik açığıdır. Saldırgan, kullanıcıyı kendi hazırladığı zararlı bir web sitesine yönlendirir veya bir bağlantıya tıklattırır. Bu web sitesi, kullanıcının farkında olmadan web uygulamasına istek gönderir. Bu istek, kullanıcının tarayıcısında saklanan cookieleri de içerir. Web uygulaması, cookieleri doğrulayarak isteği kullanıcının yaptığını varsayar ve isteği işler. Böylece saldırgan, kullanıcının adına web uygulamasında izinsiz işlem yapabilir.

Örneğin, kullanıcı bir web sitesine girdi ve farklı bir sayfaya erişmek istiyor. Kullanıcıya web sitesinden “Bu web sitesi çerezlerden yararlanmak istiyor. Onaylıyor musunuz?” bildirimi geliyor. Kullanıcı bildirimi onayladığında çerezleri kabul ettiğini varsayıyor. Eğer bu sitede CSRF zafiyeti var ise ve bir saldırgan bunu kullanıyorsa, çerezleri onaylayan kullanıcının şifresini ve kullanıcı adını ele geçirebilir.

Zafiyetin pekişmesi için Portswigger’daki labdan bir örnek çözelim. Labdaki senaryomuzda kullanıcının web sitesinde kayıtlı olan e-mail adresini değiştirmeyi hedefliyoruz. İlk olarak update email butonuna tıklayarak isteği yakalıyoruz.

Burp Suite toolunun bize verdiği özelliği kullanarak yakalanan isteği HTML kodlarına çevirelim. Bunun için engagement tools seçeneklerinden “Generate CSRF PoC” seçeneğini seçiyoruz.

Oluşturulan HTML kodunda daha önce belirlemiş olduğumuz e-mail adresini değiştirerek kopyalamış olduğumuz kodu HTML uzantılı bir dosya yardımıyla hedefe iletiyoruz.

Böylelikle labı tamamlamış oluyoruz.

CSRF Zafiyetine Karşı Alınabilecek Önlemler

Web uygulamalarının güvenliğini sağlamak için en güvenli yöntem token kullanmaktır. Token, web uygulamasına gelen istekleri doğrulamak için kullanılan rastgele bir değerdir. Token, web uygulaması tarafından üretilir ve kullanıcıya özeldir. Kullanıcı, web uygulamasına istek gönderirken, token değerini de gönderir. Web uygulaması, gelen istekteki token değerini, kullanıcının oturumundaki token değeri ile karşılaştırır. Eğer değerler uyuşursa, istek kabul edilir. Eğer değerler uyuşmazsa, istek reddedilir. Bu sayede saldırganların, kullanıcının adına sahte istekler göndermesi engellenir. Token kullanımıyla ilgili aşağıda bir kod bloğu örneği göstereceğim.

<?php
session_start();
$token = bin2hex(random_bytes(32));
$_SESSION['token'] = $token;
?>
<form action="siberv4t4n.php" method="POST">
  <input type="hidden" name="token" value="<?php echo $token; ?>">
  <input type="text" name="name" placeholder="Adınız">
  <input type="email" name="email" placeholder="E-posta adresiniz">
  <input type="submit" value="Gönder">
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  $form_token = $_POST['token'];
  $session_token = $_SESSION['token'];
  if ($form_token == $session_token) {
    echo "Form başarıyla gönderildi.";
  } else {
    echo "CSRF saldırısı tespit edildi!";
  }
}
?>

Last updated