OWASP (Open Web Application Security Project), açık kaynaklı bir topluluk tarafından geliştirilen, web uygulamalarının güvenliğini artırmayı hedefleyen bir proje topluluğudur. OWASP, web uygulamalarında yaygın olan güvenlik açıklarını belirlemek, bu açıkları önlemek için öneriler sunmak, güvenli yazılım geliştirme konusunda farkındalığı artırmak ve güvenlik açıklarının tespit edilmesi ve giderilmesine yardımcı olmak gibi amaçlar doğrultusunda faaliyet göstermektedir. OWASP’ın en önemli projelerinden biri, web uygulamalarında en yaygın güvenlik açıklarını sıralayan OWASP Top 10’dur. Bu rehber, web uygulaması geliştiricileri ve güvenlik uzmanları için önemli bir kaynak olarak kabul edilmektedir. Bu yazıda OWASP Top 10 zafiyetlerin neler olduğu örnek senaryolar ile anlatılmış ve bu zafiyetlerden nasıl korunulabileceği ile ilgili tavsiyeler verilmiştir.
İlk 10 Web Uygulaması Güvenlik Riski ve Alınması Gereken Önlemler
1. Broken Access Control
Broken Access Control, uygulamalarda yapılan yanlış veya yetersiz erişim kontrolü ayarları sonucu, yetkisiz kullanıcıların uygulama içerisinde yer alan kaynaklara erişmesine olanak sağlayan bir güvenlik açığıdır. Bu açık, yetkili olmayan bir kullanıcının sisteme veya uygulamaya erişim hakkı olmadığı halde, bu kaynaklara erişmesine veya bunları değiştirmesine neden olabilir.
Örnek olarak bir online dosya depolama servisi, kullanıcılara dosyalarını yüklemeleri, saklamaları ve paylaşmaları için bir platform sunmaktadır. Her kullanıcıya özel bir kullanıcı kimliği atanmıştır ve kullanıcılar yalnızca kendi hesaplarındaki dosyalara erişebilmelidir. Ama uygulama, kullanıcı isteklerini doğrularken yeterince doğru kontrol mekanizmaları uygulamamaktadır. Örneğin, bir kullanıcı dosya indirme talebinde bulunduğunda, uygulama yalnızca kullanıcının oturum açmış olduğunu kontrol etmekte, ancak istenen dosyanın talep eden kullanıcıya ait olup olmadığını doğrulamamaktadır.
PHP kod örneği:
<?php
// Kullanıcı girişi kontrolü (oturum kontrolü)
session_start();
if (!isset($_SESSION['user_id'])) {
die("Erişim reddedildi: Lütfen giriş yapın.");
}
// Kullanıcıdan gelen dosya adı parametresi
$file = $_GET['file'];
// Dosyaların saklandığı dizin
$filePath = '/var/www/uploads/' . $file;
// Dosyanın varlığı kontrol ediliyor
if (file_exists($filePath)) {
// Dosya türü ve indirme işlemi için başlıklar
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filePath).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filePath));
flush(); // Çıktı tamponunu temizle
readfile($filePath); // Dosyayı oku ve indir
exit;
}
else {
echo "Hata: Dosya bulunamadı.";
}
?>
Kod incelendiğinde kullanıcı giriş kontrolünün yapıldığı (session_start() ve $_SESSION[‘user_id’] kontrolü), ama indirilmek istenen dosyanın, oturum açan kullanıcıya ait olup olmadığının kontrol edilmediği görülüyor.
Bu açığı kullanarak kötü niyetli bir kullanıcı, URL’de file parametresini manipüle ederek başka kullanıcılara ait dosyaları indirebilir (örn., download.php?file=../../etc/passwd veya başka bir kullanıcının dosyası).
Broken Access Control açığından korunmak için alınması gereken önlemler:
- Erişim kontrolleri düzgün yapılandırılmalıdır,
- Token-based authentication kullanılmalıdır,
- İşlemlerin logları tutulmalı
2. Cryptographic Failures
Cryptographic Failures, kriptografi kullanılarak korunan verilerin, yanlış bir şekilde şifrelendiği veya şifresinin çözüldüğü durumlardır. Bu tür hatalar, uygulamalarda kullanılan şifreleme algoritmalarının yanlış seçilmesi veya uygulanması, anahtar yönetimi hataları veya rastgele sayı üretimindeki eksiklikler nedeniyle oluşabilir. Cryptographic Failures, uygulamaların güvenliği için çok önemli bir risk faktörüdür, çünkü kötü niyetli bir saldırganın bu açıklardan yararlanarak, korunan verilere erişim sağlaması mümkün olabilir.
Örneğin bir e-ticaret web sitesi, kullanıcıların kredi kartı ve kişisel bilgilerini ödeme işlemleri için saklamaktadır. Site, güvenlik amacıyla bu bilgileri şifrelemektedir; ancak, şifreleme yöntemi yanlış uygulanmıştır. Öncelikle, site için zayıf veya eski bir şifreleme algoritması kullanmaktadır, bu da şifrelemenin modern kripto-analiz yöntemleriyle kolayca kırılabilir olmasına yol açar. İkincisi, şifreleme anahtarları güvenli bir şekilde saklanmamakta ve yönetilmemektedir; örneğin, anahtarlar düz metin olarak kod içinde saklanmakta veya kolayca erişilebilir yerlerde tutulmaktadır. Üçüncüsü, web sitesi, veri aktarımı sırasında hala tam SSL/TLS şifrelemesi uygulamamaktadır, bu da verilerin şifrelenmiş olmasına rağmen, transfer sırasında saldırılara açık hale gelmesine sebep olur.
Bu yanlış uygulamalar sonucunda, kötü niyetli bir saldırgan, zayıf şifreleme algoritmasını kırarak veya şifreleme anahtarlarına erişerek kullanıcıların kredi kartı bilgilerini çözebilir. Ayrıca, şifrelenmiş verilerin transferi sırasında SSL/TLS’nin eksikliği, man-in-the-middle saldırılarına karşı verileri korumasız bırakır.
Cryptographic Failures açığından korunmak için alınması gereken önlemler:
- Doğru şifreleme algoritmaları kullanılmalıdır
- Anahtar yönetimi hatalarından kaçınılmalıdır
- Rastgele sayı üretimi doğru yapılmalıdır
- Kriptografik anahtarların düzenli olarak yenilenmesi gerekmektedir
3. Injection
Injection, web uygulamalarında sıklıkla görülen bir güvenlik açığıdır. Bu açık, uygulamalarda kullanılan veri girişleri yoluyla, kötü niyetli kullanıcıların uygulama tarafından yürütülen veritabanı sorgularına, komutlara veya diğer işlevlere veri girişlerinde yapılan hatalı denetlemeler veya filtrelemeler nedeniyle zararlı kod enjekte etmesini sağlar. Saldırganlar, bu açıktan yararlanarak, uygulamaların veritabanını veya sunucularını ele geçirerek, kullanıcı bilgilerine veya diğer hassas verilere erişebilirler.
Bir e-ticaret sitesinde, kullanıcıların ürün aramak için kullandıkları arama çubuğu, ciddi bir SQL Injection zafiyetine sahiptir. Bu zafiyet, site tarafından kullanıcı girdilerinin doğrulamasız ve temizlenmeden doğrudan SQL sorgusuna eklenmesinden kaynaklanmaktadır. Kötü niyetli bir kullanıcı, bu açığı fark ederek arama çubuğuna özel bir SQL ifadesi girebilir (örneğin, ‘ OR ‘1’=’1), ve bu girdi, filtrelenmeden veritabanı sorgusuna dahil edildiğinde, veritabanında beklenmedik ve yetkisiz işlemler gerçekleşebilir. Bu durum, veritabanındaki tüm ürünlerin listelenmesine yol açabileceği gibi, daha ciddi durumlarda veritabanına zarar verilmesine ve kullanıcı bilgilerinin kötüye kullanılmasına neden olabilir. Sonuç olarak, bu zafiyet, veritabanındaki bilgilere yetkisiz erişim sağlayarak sisteme ciddi zararlar verebilir ve kullanıcıların gizliliğini tehlikeye atabilir.
Zafiyetli kod örneği:
<?php
// Kullanıcıdan gelen arama terimi
$aramaTerimi = $_GET['arama'];
// Veritabanı bağlantısı
$mysqli = new mysqli("host", "username", "password", "database");
// Zafiyetli SQL sorgusu
$sql = "SELECT * FROM urunler WHERE urun_adi LIKE '%$aramaTerimi%'";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Ürün Adı: " . $row["urun_adi"]. "<br>";
}
} else {
echo "Sonuç bulunamadı";
}
?>
Kullanıcıdan alınan aramaTerimi doğrudan SQL sorgusuna ekleniyor. Kullanıcının girebileceği özel karakterler veya SQL komutları, sorgu tarafından işleniyor. Bu yaklaşım, SQL enjeksiyonu saldırılarına açık bir kapı bırakır.
Injection açığından korunmak için alınması gereken önlemler:
- Parametrelerin Doğrulanması
- SQL Parametreleştirme
- Kodlama Standartları
- WAF Kullanımı
4. Insecure Design
Insecure Design (Güvensiz Tasarım), bir web uygulamasının tasarımında yapılan hatalar veya eksiklikler nedeniyle ortaya çıkan bir güvenlik açığıdır. Bu, uygulamanın tasarımında yapılan hataların, uygulamanın tüm yaşam döngüsü boyunca devam etmesine ve güvenliğini olumsuz etkilemesine neden olabilir. Güvensiz tasarım, uygulamanın özellikle kimlik doğrulama, yetkilendirme, veri gizliliği ve bütünlüğü gibi önemli güvenlik konularında hatalar içermesiyle ortaya çıkabilir.
Örnek bir zafiyetli senaryoda bir online bankacılık sistemi, müşterilerine hesapları üzerinden para transferleri, hesap bakiyesi sorgulamaları ve diğer finansal işlemleri yapma imkanı sunarken, güvenlik açısından ciddi eksiklikler içermektedir. Sistem, çok faktörlü kimlik doğrulama (2FA) veya otomatik şüpheli işlem algılama gibi temel güvenlik önlemlerini ve savunma mekanizmalarını tasarım aşamasında göz ardı etmiştir. Bu durum, kötü niyetli bir saldırganın, phishing veya keylogging gibi yöntemlerle bir kullanıcının kimlik bilgilerini ele geçirmesine ve ardından bu bilgileri kullanarak sisteme rahatça erişmesine olanak tanır. Sistem, anormal işlem davranışlarını tespit etmekte yetersiz kaldığı için, saldırgan hesaptan büyük miktarlarda para transferi yapabilir. Bu güvenlik zaafiyeti, kullanıcıların ciddi finansal kayıplar yaşamasına ve sistemdeki diğer kullanıcıların benzer saldırılara maruz kalmasına neden olabilir. Bu durum, güvenlik önlemlerinin sistem tasarımı ve geliştirme aşamalarında entegre edilmesinin önemini vurgular.
Insecure Design açığından korunmak için alınması gereken önlemler:
- Güvenli tasarım ilkeleri uygulanmalıdır
- Uygulama geliştirme ekibi, güvenlik odaklı bir yaklaşım benimsemelidir
- Güvenlik açıkları düzeltilmelidir
- Uygulama güvenliği için en iyi uygulamalar kullanılmalıdır
5. Security Misconfiguration
Security Misconfiguration, bir uygulamanın ya da sistemlerin yanlış yapılandırılması veya yapılandırılmamış olması sonucu oluşan bir güvenlik açığıdır. Bu açık, sistemin, uygulamanın veya sunucuların güvenliğini sağlamak için gereken en iyi uygulamaların uygulanmamış veya eksik uygulanmış olmasından kaynaklanabilir.
Örnek olarak, bir şirketin iç ağında çalışan ve çalışanlara çeşitli iç kaynaklara erişim sağlayan bir web uygulaması, ciddi bir güvenlik yapılandırma hatası içermektedir. Uygulama, varsayılan ayarlarla kurulmuş olup, bu ayarlar üzerinde herhangi bir güvenlik odaklı yapılandırma değişikliği yapılmamıştır. Özellikle, uygulamanın yönetim paneli için varsayılan kullanıcı adı ve şifre (örneğin, “admin” ve “password123”) değiştirilmemiştir. Ayrıca, uygulamanın hata mesajları, hassas sistem bilgilerini açığa çıkaran detaylı bilgiler içermektedir. Bu durum, kötü niyetli bir saldırganın ağa erişim sağlayarak web uygulamasını keşfetmesine, varsayılan yönetici giriş bilgilerini kullanarak yönetim paneline erişmesine ve bu panel üzerinden uygulamanın ayarlarını değiştirmesine, zararlı kod yüklemesine veya hassas verilere erişmesine olanak tanır. Hata mesajlarından elde ettiği bilgileri kullanarak daha sofistike saldırılar planlayabilir. Bu güvenlik açığı, şirketin iç ağının güvenliğini ciddi şekilde tehlikeye atarak veri ihlallerine ve potansiyel olarak ciddi finansal ve itibar kayıplarına neden olabilir.
Security Misconfiguration açığından korunmak için alınması gereken önlemler:
- En iyi uygulamaları takip etmek
- Yazılımın güvenlik düzeyini kontrol etmek
- Güvenlik yamalarını ve güncellemeleri takip etmek
- Sistem yapılandırmasını güncellemek
6. Vulnerable and Outdated Components
Vulnerable and Outdated Components, bir uygulamada kullanılan üçüncü taraf bileşenlerin güncellenmemesi veya bilinen güvenlik açıklarına sahip olması nedeniyle oluşan bir güvenlik açığıdır. Birçok modern uygulama, üçüncü taraf bileşenlerin kullanımını içerir. Bu bileşenler, genellikle web uygulama çerçeveleri, veritabanı yönetim sistemleri, açık kaynak kütüphaneler, sunucu yazılımı ve diğer araçlar gibi yazılım bileşenleri olabilir. Bu bileşenlerde güvenlik açıkları keşfedilmesi halinde, uygulama açığa karşı savunmasız hale gelebilir.
Zafiyeti bir senaryo ile örnekleyecek olursak, bir şirket, müşterilere ürünlerini çevrimiçi olarak satan bir e-ticaret web uygulaması işletmektedir. Bu web uygulaması, müşterilere ürünleri görüntüleme, sepete ekleme ve ödeme yapma imkanı sunar ve Spring Framework kullanılarak geliştirilmiştir. Ancak, web uygulaması, kullanılan Spring Framework sürümünün “Spring4Shell” olarak bilinen bir güvenlik zafiyetini içermektedir. Bu zafiyet, Spring Framework’ün SpEL (Spring Expression Language) işlevini kötüye kullanarak uzaktan kod yürütme olanağı tanır. Saldırgan, bu zafiyeti istismar ederek web uygulamasına sızabilir, müşteri bilgilerini çalabilir veya sistem üzerinde istenmeyen işlemler gerçekleştirebilir. Bu durum, şirket için ciddi finansal kayıplara, veri ihlallerine ve itibar kaybına yol açabilir.
Vulnerable and Outdated Components açığından korunmak için alınması gereken önlemler:
- Bileşenleri izlemek
- Güncelleme politikaları oluşturmak
- Bileşenleri doğrulamak
7. Identification and Authentication Failures
Identification and Authentication Failures, bir kullanıcının kimliğinin doğrulanması veya yetkilendirilmesi sırasında yaşanan sorunlar nedeniyle oluşan bir güvenlik açığıdır. Bu tür bir açık, bir saldırganın bir kullanıcının kimliğini çalmasına veya sahte bir kimlik kullanarak uygulamaya erişmesine izin verebilir.
Örneğin, bir uygulama, kullanıcı adı ve parola kombinasyonu gibi temel kimlik doğrulama yöntemlerini kullanarak kimlik doğrulama yapabilir. Ancak, uygulama bu bilgileri doğru bir şekilde doğrulamazsa, saldırganların sahte kimlik bilgileri kullanarak sisteme giriş yapması mümkündür.
Zafiyetli kod örneği:
<?php
// Kullanıcı adı ve parola veritabanından alınır (örneğin, burada sabit olarak tanımlanmıştır).
$databaseUsername = "kullanici123";
$databasePassword = "gizliParola";
// Kullanıcının girdiği kullanıcı adı ve parola alınır.
$inputUsername = $_POST["username"];
$inputPassword = $_POST["password"];
// Kullanıcı adı ve parola doğrulama işlemi yapılır.
if ($inputUsername === $databaseUsername && $inputPassword === $databasePassword) {
// Doğrulama başarılı, kullanıcı giriş yapabilir.
echo "Giriş başarılı, hoş geldiniz!";
} else {
// Doğrulama başarısız, hata mesajı gösterilir.
echo "Kullanıcı adı veya parola hatalı. Lütfen tekrar deneyin.";
}
?>
Bu kod örneğinde, kullanıcı adı ve parola kombinasyonunu doğrulamak için basit bir eşleştirme kullanır. Doğrulama başarısız olduğunda sadece genel bir “Kullanıcı adı veya parola hatalı” mesajı verir. Bu nedenle, saldırganlar yanlış kimlik bilgilerini deneyerek sisteme erişim sağlayabilirler.
Identification and Authentication Failures açığından korunmak için alınması gereken önlemler:
- Güçlü kimlik doğrulama yöntemleri kullanmak
- Kimlik doğrulama işlemlerini izlemek
- Kimlik bilgilerini şifrelemek
- Düzenli olarak kimlik doğrulama politikalarını kontrol etmek
- Çok faktörlü kimlik doğrulama yöntemlerini kullanmak
8. Software and Data Integrity Failures
Yazılım ve veri bütünlüğü hataları, bir yazılım veya veri sisteminin beklenmeyen şekilde değiştirilmesi bozulması sonucu meydana gelen bir güvenlik açığıdır. Bu zafiyet, bir saldırganın yazılım veya veri sistemini hedef alarak sistemi istismar etmesine veya manipüle etmesine izin verebilir.
Yazılım ve veri bütünlüğü hataları, bir yazılım güncellemesi sırasında, yazılımın kötü amaçlı bir saldırgan tarafından değiştirilmesi veya bir saldırganın bir veri depolama ortamına kötü amaçlı yazılım yerleştirmesi gibi birçok farklı şekilde ortaya çıkabilir. Bu tür saldırılar sonucunda, saldırgan verileri çalabilir, verileri bozabilir veya sistemi kontrol etmeye başlayabilir.
Bir istismar senaryosu ile örneklemek gerekirse; bir şirket, kullanıcıların çevrimiçi alışveriş yapabileceği bir e-ticaret web uygulamasını işletmektedir. Ancak, bu web uygulaması güncellemeleri ve kaynakları doğrulamadan veya doğrulanmamış kaynaklardan almasına izin veren bir güvenlik eksikliği içermektedir. Bu durum, kötü niyetli saldırganların sahte güncelleme sunucuları oluşturarak, kullanıcıları sahte güncellemeleri indirmeye ve uygulamaya yönlendirmelerine olanak tanır. Saldırganlar, bu sahte güncellemeleri kullanarak kullanıcıların ödeme bilgilerini veya kişisel verilerini çalan kötü amaçlı yazılımları dağıtarak ciddi zararlara yol açabilirler. Bu tür bir yazılım ve veri bütünlüğü hatası, güvenliğin sağlanmaması durumunda kullanıcıların finansal ve kişisel bilgilerine yönelik ciddi tehditler oluşturabilir.
Zafiyetli kod örneği:
<?php
// Güncelleme sunucusundan güncellemeleri indirir (kontrolsüz bir şekilde).
function downloadUpdates() {
$updateServer = "http://sahte-guncelleme-sunucu.com";
$updateFile = "sahte-guncelleme.zip";
// Güncellemeyi indirir (doğrulama yapmadan).
file_put_contents($updateFile, file_get_contents("$updateServer/$updateFile"));
// Güncellemeyi uygular.
applyUpdates($updateFile);
}
// Güncellemeleri uygular (kontrolsüz bir şekilde).
function applyUpdates($updateFile) {
// Güncelleme dosyasını çıkarır veya yükler (doğrulama yapmadan).
// Bu, sahte güncellemelerin uygulanmasına izin verebilir.
// Kötü amaçlı yazılım içeren bir güncelleme, sistemi tehlikeye atabilir.
}
?>
Bu kod örneği, güncellemeleri ve kaynakları kontrol etmeden indirir ve uygular. Bu, sahte güncellemelerin sisteme yüklenmesine ve kullanıcıların verilerinin tehlikeye atılmasına neden olabilir.
Software and Data Integrity Failures açığından korunmak için alınması gereken önlemler:
- Yazılımın veya verilerin beklenen kaynaktan olduğunu ve değiştirilmediğini doğrulamak için dijital imzalar veya benzer mekanizmaların kullanımı
- Npm veya Maven gibi kitaplıkların ve bağımlılıkların güvenilir depoları kullandığından emin olmak
- Kod ve yapılandırma değişiklikleri için bir inceleme süreci oluşturmak
- Yazılım güncellemelerini düzenli olarak yüklemek
- Güçlü erişim kontrolü uygulamak
- Güvenli yazılım geliştirme yöntemlerini kullanmak
- Yazılım ve veri yedeklemeleri oluşturmak
9. Security Logging and Monitoring Failures
Security Logging and Monitoring Failures, güvenlik olaylarının izlenmesi ve kaydedilmesi işlevlerinin yetersizliği veya hatalı yapılandırılması sonucu ortaya çıkan bir güvenlik açığıdır. Bu tür bir açık, kötü amaçlı aktivitelerin tespit edilememesi veya güvenlik olaylarına yanıt verilememesi gibi sonuçlara neden olabilir.
Örnek olarak bir kurumsal ağdaki bir sunucu, müşteri verilerini saklayan ve işleyen önemli bir finansal uygulamayı barındırmaktadır. Ancak, bu sunucu güvenlik olaylarını ve sistem aktivitelerini kaydetmek ve izlemek için yetersiz bir günlükleme ve izleme mekanizmasına sahiptir. Ayrıca, güvenlik olaylarına tepki verme yeteneği eksiktir. Bu zafiyet, kötü niyetli bir saldırganın sunucuya yönelik bir saldırı gerçekleştirmesi durumunda, sunucunun bu saldırıyı algılamasına rağmen olayı kaydetmeyip raporlayamaması anlamına gelir. Saldırgan, bu zafiyeti istismar ederek hassas müşteri verilerini çalmaya çalışır ve sunucudan izlenmeden uzaklaşır. Şirket, güvenlik olaylarını izlemek ve günlükleme yapmak için uygun mekanizmaları bulunmadığından saldırıyı fark edemez veya müdahale edemez. Sonuç olarak, veri ihlali gerçekleşir ve müşteri bilgileri sızar, bu da şirketin ciddi bir itibar kaybına uğramasına neden olur.
Security Logging and Monitoring Failures açığından korunmak için alınması gereken önlemler:
- Güvenlik olaylarının izlenmesi ve kaydedilmesi için uygun araçlar kullanmak
- Günlük kayıtlarının düzenli olarak incelenmesi
- Uyarı ve alarm sistemleri kullanmak
- Güvenlik politikalarının ve prosedürlerinin düzenli olarak gözden geçirilmesi
10. Server-Side Request Forgery
Sunucu Taraflı İstek Sahtekarlığı (SSRF), bir saldırganın hedef sunucuda bir URL’ye istek gönderirken sahte bir kaynak IP adresi ve alan adı sağlayarak sunucunun kendi iç ağlarına veya diğer harici kaynaklara erişmesine izin veren bir web güvenliği açığıdır. Bir SSRF saldırısı, bir uygulamanın doğrulama sürecini atlayarak veya bir URL’de bir sunucu adresi veya IP adresi gibi güvenliği kontrol etmeyen bir parametre kullanarak gerçekleştirilebilir.
SSRF, hedef sunucu için ciddi bir güvenlik tehdidi oluşturur, çünkü saldırgan sunucuya istekler göndererek hassas verileri çalabilir, sunucunun kaynaklarını tüketebilir, sunucunun kontrolünü ele geçirebilir veya sunucunun çalışmasını bozabilir.
Zafiyete örnek olarak; bir e-ticaret web uygulaması, dış kaynaklı API’ları ürün fiyatlarını ve stok durumunu göstermek için kullanırken, kullanıcıların sağladığı URL’leri güvenli bir şekilde doğrulamama ve filtreleme eksikliği, SSRF (Server-Side Request Forgery) zafiyetini yaratır. Bu durumda, bir saldırgan, web uygulamasının kullanıcı arayüzünde URL’leri girilebilecek bir alana sahipse, özel bir URL oluşturarak web uygulamasının sunucusuna istekte bulunabilir. Saldırgan, bu saldırıyı kullanarak web uygulamasının sunucusunu, iç sunuculara yönlendirebilir ve hassas bilgilere erişebilir veya dış sistemlere saldırılar gerçekleştirebilir.
Zafiyetli kod örneği:
function fetch_data_from_url($url) {
try {
$response = file_get_contents($url);
return $response;
} catch (Exception $e) {
return $e->getMessage();
}
}
Bu kod örneği, kullanıcı tarafından sağlanan URL’leri sorgulamadan ve doğrulamadan kullanır, bu da saldırganların saldırı yapabileceği bir güvenlik açığı oluşturur.
Server-Side Request Forgery açığından korunmak için alınması gereken önlemler:
- Giriş doğrulaması
- Güvenlik duvarı kurulumu
- Güvenli URL işleme
- Sunucu ayarlarının kontrol edilmesi
Son olarak tüm zafiyetlerde korunmak için uygulanabilecek ortak yöntemler:
- Profesyoneller tarafından güvenlik testlerinin yapılması,
- Logların tutulup profesyonel ekipler tarafından faaliyetlerin izlenmesi,
- Yazılım geliştirici ve kullanıcılara farkındalık artırma faaliyetleri yapılmasıdır.
Referanslar
- https://owasp.org/www-project-top-ten/
- https://owasp.org/Top10/A08_2021-Software_and_Data_Integrity_Failures/
- https://www.gaissecurity.com/blog/ssrf-server-side-request-forgery
- https://crashtest-security.com/owasp-software-data-integrity-failures/
- https://www.google.com/url?sa=i&url=https%3A%2F%2Fblog.detectify.com%2F2016%2F05%2F01%2Fowasp%2F&psig=AOvVaw0gjedrE7j3Y0xJfe7NWDj3&ust=1682639442506000&source=images&cd=vfe&ved=0CBEQjRxqFwoTCLDomMTeyP4CFQAAAAAdAAAAABAFhttps://github.com/scipag/HardeningKitty