HTTP Verb Tampering, saldırganların bir web sunucusuna gönderilen HTTP isteklerindeki HTTP metodu değerlerini değiştirerek, sunucunun beklenmedik bir şekilde davranmasına neden olan bir saldırı türüdür ve dolayısıyla da web uygulamalarının güvenliği açısından önemli bir konudur. Böylece saldırganlar, yetkisiz işlemler gerçekleştirebilir, kullanıcı verilerine erişebilir ya da web uygulamasının çökmesine neden olabilirler. Bu sebepten ötürü, web uygulama geliştiricileri ve güvenlik uzmanları, HTTP Verb Tampering saldırılarına karşı önlem almak için etkili yöntemler geliştirmelidirler. Bu yazıda, HTTP Verb Tampering saldırılarına yakından bakacak ve bu saldırıları önlemek için alınabilecek önlemleri ele alacağız.
“HTTP Verb” tanımını kafa karıştırmadan, bildiğiniz “HTTP Methods” olarak düşünebilirsiniz. İletilen komutları işletme görevi HTTP sunucuya aitse, sunucunun yapacağı işlemler ve dönüşleri de “Fiil” olarak değerlendirilir. Bu sebeple ilgili tabir uygun görülmüştür.
HTTP Verb Tampering, bir web uygulamasına gönderilen HTTP isteklerinin değiştirilerek beklenmeyen davranışlar elde edilmesine olanak tanıyan bir saldırı türüdür. Bir saldırı yöntemi olarak kullanılan bu durum, web uygulaması için kullanılan HTTP yöntemlerinin (GET, POST, PUT, DELETE vb.) yanlış veya kötüye kullanımı yoluyla gerçekleştirilir.
Örneğin bir uygulamanın bizden beklediği olağan GET isteği yerine, oluşturulmuş POST isteği gönderilmesiyle, bir formun yanlış şekilde işlenmesine veya doğrudan bir veritabanına erişim sağlamasına neden olunabilmektedir. İsteğin bu yolla başarı sağlaması neticesinde, bir web uygulamasındaki gizli verilerin çalması veya uygulamada yanlışlıkla zararlı kod çalıştırması sonuçlarıyla karşı karşıya kalınabilmektedir.
Aşağıda, bir HTTP Verb Tampering saldırısına olanak tanıyan örnek kodlara dair örnekler yer almaktadır:
Örnek-1: Bir web uygulamasına gönderilen POST isteği, bir saldırgan tarafından GET isteğine dönüştürülebilir:
Saldırgan, bu formda yer alan "method" özelliği olan “POST” tipinde isteği "GET" olarak değiştirerek formu bu şekilde gönderebilir:
Bu saldırı, izinsiz biçimde kullanıcı hesap bilgilerini görüntülemek için kullanılabilir.
Örnek-2: Bir web uygulamasına gönderilen GET isteği, bir saldırgan tarafından PUT isteğine dönüştürülebilir:
Saldırgan, bu img etiketini bir PUT isteği ile değiştirerek ilgili profil resminde manipülasyon sağlayabilir:
İlgili aktivitenin saldırı maksadıyla yapıldığını düşünecek olursak, bir kullanıcının profil resmini değiştirip bunun izinsiz/ele geçirilen hesap üzerinden yapıldığını adminlere o kullanıcıymış gibi bildirip, ikna ederek hesabı hızlı biçimde askıya aldırtabilirsiniz en basitinden.
Bu tür saldırılardan korunmak için, uygulama geliştiricileri web uygulamalarının gelen istekleri doğru bir şekilde işlediğinden ve manipüle edilmediğinden emin olmak için bazı güvenlik önlemleri almalıdır. Örneğin, uygulama geliştiricileri, HTTP yöntemlerinin doğru bir şekilde kullanıldığını doğrulamak için kod içerisine veri doğrulama kısımları ekleyebilirler.
Bu başlık altında sorun oluşturabilecek bir diğer durum da “X-HTTP-Method-Override” “header”ıdır. HTTP isteğindeki method değerini değiştirmek için kullanılan bir header’dır. Bu header, özellikle RESTful web servislerinde HTTP methodlarının kısıtlandığı durumlarda kullanılabilir. Bu kısıtlama özellikle web uygulamalarında güvenlik nedeniyle yapılır. Örneğin, bir web uygulamasında sadece GET ve POST methodlarının kullanılmasına izin verilir ve bu methodlar dışındaki istekler engellenir. Ancak bu durumda bazı durumlarda diğer methodlara da ihtiyaç duyulabilir. Bu gibi durumlarda X-HTTP-Method-Override header’ı kullanılarak öncelikle POST methodu ile bir istek yapılır ve istekteki X-HTTP-Method-Override header’ı ile istenen method belirtilir.
Örneğin, bir RESTful web servisinde bir kaydın güncellenmesi PUT methodu ile gerçekleştirilirken, web uygulaması sadece GET ve POST methodlarını destekliyor olabilir. Bu durumda, kaydın güncellenmesi için bir POST isteği gönderilir ve X-HTTP-Method-Override header’ı ile PUT methodu belirtilir:
Doğru şekilde yetkilendirme ve doğrulama mekanizmaları oluşturmadığı takdirde, ilgili header kullanılarak, bypass için sonradan hazırlanmış, işletilmek üzere farklı metod içeren bir paket ile bu aksiyon sağlanabilmektedir.
Aşağıda Python ile hazırlanmış kodu, HTTP Verb Tampering aktivitesi öncesi basit tespit için kullanabilirsiniz. Çalışma biçimi ise; belirlenmiş bir URL'ye HTTP methodlarının sıra sıra, standart bir şekilde ve X-HTTP-Method-Override header'ı kullanılarak gönderilmesi sağlanır. Ardından, iki yanıtın durum kodları karşılaştırılır ve farklı ise, sunucunun HTTP Verb Tampering saldırısına karşı savunmasız olduğu sonucu çıkarılabilir. Bu kodun kullanımı, web uygulamaları için güvenlik testlerinde faydalı olabilir.
Haricinde, kapsamlı olarak bir HTTP Verb Tampering tespitini aşağıdaki Nmap üzerinde NSE scripting yardımıyla sağlayabilirsiniz. Yapmanız gereken sadece “http-method-tamper” olarak herhangi arama motorunda sorgu yaparak ilgili koda ulaşabilirsiniz. Haricen, kullanım amacınıza göre de özelleştirebilirsiniz.
WWW üzerinde yayın yapan çoğu Web uygulaması, doğrudan kendisi ya da bağlı olduğu “Service Provider” kabiliyetleri dahilinde yapacağı iş ortaklıklarıyla, gelen isteklerdeki herhangi bir manipülasyon girişimini tespit etmek ve engellemek için web uygulama güvenlik duvarı (Web Application Firewall - WAF) gibi güvenlik araçları kullanabilirler. WAF'lar, web uygulamalarına gelen trafikleri “real-time” filtrelemeyle, zararlı trafiklerden arındırır ve sadece güvenli trafikleri uygulamaya yönlendirirler.
Aşağıdaki PHP örneği, HTTP Verb Tampering saldırısından basitçe nasıl korunabileceğine dair fikir verebilir:
Bu kod, sadece POST isteklerinin işlendiğini kontrol eder ve doğru veri girişi yapıldığını doğrular. Bu tür doğrulama işlemleri, web uygulamasının HTTP Verb Tampering saldırılarından korunmasına yardımcı olur.
Toparlayacak olursak, HTTP Verb Tampering saldırıları, web uygulamaları için önemli bir tehdit oluşturur ve uygulama geliştiricileri, doğru güvenlik önlemlerini alarak bu tür saldırılardan korunabilirler. Alınabilecek tedbirler anlamında yukarıda bahsedilenlerle beraber; web uygulamasının doğru şekilde yapılandırılması, girdi doğrulama ve istek filtreleme, yetkilendirme kontrolleri ve SSL/TLS gibi güvenli protokollerin kullanımı yer almaktadır. Ayrıca, HTTP methodlarının ihtiyaca uygun, doğru bir şekilde kullanılması ve X-HTTP-Method-Override header'ının kullanımının sınırlanması da önemlidir.
“HTTP Verb” tanımını kafa karıştırmadan, bildiğiniz “HTTP Methods” olarak düşünebilirsiniz. İletilen komutları işletme görevi HTTP sunucuya aitse, sunucunun yapacağı işlemler ve dönüşleri de “Fiil” olarak değerlendirilir. Bu sebeple ilgili tabir uygun görülmüştür.
HTTP Verb Tampering, bir web uygulamasına gönderilen HTTP isteklerinin değiştirilerek beklenmeyen davranışlar elde edilmesine olanak tanıyan bir saldırı türüdür. Bir saldırı yöntemi olarak kullanılan bu durum, web uygulaması için kullanılan HTTP yöntemlerinin (GET, POST, PUT, DELETE vb.) yanlış veya kötüye kullanımı yoluyla gerçekleştirilir.
Örneğin bir uygulamanın bizden beklediği olağan GET isteği yerine, oluşturulmuş POST isteği gönderilmesiyle, bir formun yanlış şekilde işlenmesine veya doğrudan bir veritabanına erişim sağlamasına neden olunabilmektedir. İsteğin bu yolla başarı sağlaması neticesinde, bir web uygulamasındaki gizli verilerin çalması veya uygulamada yanlışlıkla zararlı kod çalıştırması sonuçlarıyla karşı karşıya kalınabilmektedir.
Aşağıda, bir HTTP Verb Tampering saldırısına olanak tanıyan örnek kodlara dair örnekler yer almaktadır:
Örnek-1: Bir web uygulamasına gönderilen POST isteği, bir saldırgan tarafından GET isteğine dönüştürülebilir:
HTML:
html
<form method="post" action="/processform">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Login" />
</form>
Saldırgan, bu formda yer alan "method" özelliği olan “POST” tipinde isteği "GET" olarak değiştirerek formu bu şekilde gönderebilir:
HTML:
html
<form method="get" action="/processform">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Login" />
</form>
Bu saldırı, izinsiz biçimde kullanıcı hesap bilgilerini görüntülemek için kullanılabilir.
Örnek-2: Bir web uygulamasına gönderilen GET isteği, bir saldırgan tarafından PUT isteğine dönüştürülebilir:
HTML:
html
<img src="/profileimage?id=987" />
Saldırgan, bu img etiketini bir PUT isteği ile değiştirerek ilgili profil resminde manipülasyon sağlayabilir:
HTML:
html
<img src="/profileimage?id=987" method="put" />
İlgili aktivitenin saldırı maksadıyla yapıldığını düşünecek olursak, bir kullanıcının profil resmini değiştirip bunun izinsiz/ele geçirilen hesap üzerinden yapıldığını adminlere o kullanıcıymış gibi bildirip, ikna ederek hesabı hızlı biçimde askıya aldırtabilirsiniz en basitinden.
Bu tür saldırılardan korunmak için, uygulama geliştiricileri web uygulamalarının gelen istekleri doğru bir şekilde işlediğinden ve manipüle edilmediğinden emin olmak için bazı güvenlik önlemleri almalıdır. Örneğin, uygulama geliştiricileri, HTTP yöntemlerinin doğru bir şekilde kullanıldığını doğrulamak için kod içerisine veri doğrulama kısımları ekleyebilirler.
Bu başlık altında sorun oluşturabilecek bir diğer durum da “X-HTTP-Method-Override” “header”ıdır. HTTP isteğindeki method değerini değiştirmek için kullanılan bir header’dır. Bu header, özellikle RESTful web servislerinde HTTP methodlarının kısıtlandığı durumlarda kullanılabilir. Bu kısıtlama özellikle web uygulamalarında güvenlik nedeniyle yapılır. Örneğin, bir web uygulamasında sadece GET ve POST methodlarının kullanılmasına izin verilir ve bu methodlar dışındaki istekler engellenir. Ancak bu durumda bazı durumlarda diğer methodlara da ihtiyaç duyulabilir. Bu gibi durumlarda X-HTTP-Method-Override header’ı kullanılarak öncelikle POST methodu ile bir istek yapılır ve istekteki X-HTTP-Method-Override header’ı ile istenen method belirtilir.
Örneğin, bir RESTful web servisinde bir kaydın güncellenmesi PUT methodu ile gerçekleştirilirken, web uygulaması sadece GET ve POST methodlarını destekliyor olabilir. Bu durumda, kaydın güncellenmesi için bir POST isteği gönderilir ve X-HTTP-Method-Override header’ı ile PUT methodu belirtilir:
Kod:
POST /update-record.php HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
X-HTTP-Method-Override: PUT
record_id=1234&name=Mehmet
Doğru şekilde yetkilendirme ve doğrulama mekanizmaları oluşturmadığı takdirde, ilgili header kullanılarak, bypass için sonradan hazırlanmış, işletilmek üzere farklı metod içeren bir paket ile bu aksiyon sağlanabilmektedir.
Aşağıda Python ile hazırlanmış kodu, HTTP Verb Tampering aktivitesi öncesi basit tespit için kullanabilirsiniz. Çalışma biçimi ise; belirlenmiş bir URL'ye HTTP methodlarının sıra sıra, standart bir şekilde ve X-HTTP-Method-Override header'ı kullanılarak gönderilmesi sağlanır. Ardından, iki yanıtın durum kodları karşılaştırılır ve farklı ise, sunucunun HTTP Verb Tampering saldırısına karşı savunmasız olduğu sonucu çıkarılabilir. Bu kodun kullanımı, web uygulamaları için güvenlik testlerinde faydalı olabilir.
Python:
import requests
# HTTP methodlarının listesi
http_methods = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH']
# Test edilecek URL
url = 'http://testphp.vulnweb.com/'
# HTTP methodlarının test edilmesi
for method in http_methods:
# Varsayılan olarak HTTP istekleri oluşturulması
response = requests.request(method, url)
# X-HTTP-Method-Override header'ı ile HTTP isteği oluşturulması
response_x = requests.post(url, headers={'X-HTTP-Method-Override': method})
# HTTP response sonucunun doğrulanması
if response.status_code != response_x.status_code:
print(f'X-HTTP-Method-Override header\'ı ile {method} methodu destekleniyor!')
Haricinde, kapsamlı olarak bir HTTP Verb Tampering tespitini aşağıdaki Nmap üzerinde NSE scripting yardımıyla sağlayabilirsiniz. Yapmanız gereken sadece “http-method-tamper” olarak herhangi arama motorunda sorgu yaparak ilgili koda ulaşabilirsiniz. Haricen, kullanım amacınıza göre de özelleştirebilirsiniz.
Kod:
# Kullanım Örnekleri:
nmap -sV --script http-method-tamper <target>
nmap -p80 --script http-method-tamper --script-args 'http-method-tamper.paths={/protected/db.php,/protected/index.php}' <target>
WWW üzerinde yayın yapan çoğu Web uygulaması, doğrudan kendisi ya da bağlı olduğu “Service Provider” kabiliyetleri dahilinde yapacağı iş ortaklıklarıyla, gelen isteklerdeki herhangi bir manipülasyon girişimini tespit etmek ve engellemek için web uygulama güvenlik duvarı (Web Application Firewall - WAF) gibi güvenlik araçları kullanabilirler. WAF'lar, web uygulamalarına gelen trafikleri “real-time” filtrelemeyle, zararlı trafiklerden arındırır ve sadece güvenli trafikleri uygulamaya yönlendirirler.
Aşağıdaki PHP örneği, HTTP Verb Tampering saldırısından basitçe nasıl korunabileceğine dair fikir verebilir:
PHP:
php
if (class=hljs-variable>$_SERVER['REQUEST_METHOD'] !== class=hljs-string>'POST') {
class=hljs-keyword>die("Invalid Request");
}
class=hljs-variable>$username = $_POST[class=hljs-string>'username'];
class=hljs-variable>$password = $_POST[class=hljs-string>'password'];
class=hljs-comment>// Veri doğrulama işlemleri
class=hljs-keyword>if (!empty(class=hljs-variable>$username) && !class=hljs-keyword>empty($password)) {
class=hljs-comment>// Doğru işlemler yap
} class=hljs-keyword>else {
class=hljs-keyword>die("Lütfen kullanıcı adı ve şifrenizi girin.");
}
Bu kod, sadece POST isteklerinin işlendiğini kontrol eder ve doğru veri girişi yapıldığını doğrular. Bu tür doğrulama işlemleri, web uygulamasının HTTP Verb Tampering saldırılarından korunmasına yardımcı olur.
Toparlayacak olursak, HTTP Verb Tampering saldırıları, web uygulamaları için önemli bir tehdit oluşturur ve uygulama geliştiricileri, doğru güvenlik önlemlerini alarak bu tür saldırılardan korunabilirler. Alınabilecek tedbirler anlamında yukarıda bahsedilenlerle beraber; web uygulamasının doğru şekilde yapılandırılması, girdi doğrulama ve istek filtreleme, yetkilendirme kontrolleri ve SSL/TLS gibi güvenli protokollerin kullanımı yer almaktadır. Ayrıca, HTTP methodlarının ihtiyaca uygun, doğru bir şekilde kullanılması ve X-HTTP-Method-Override header'ının kullanımının sınırlanması da önemlidir.
Moderatör tarafında düzenlendi: