SGE Blog Yayınları

Web Uygulamalarda Http Trace Metodunun Açık Bırakılması Açıklığı

Web Uygulamalarda Http Trace Metodunun Açık Bırakılması Açıklığı

yazan Hasan Fatih Şimşek -
Number of replies: 0

Http Trace methodu gönderilen http talebindeki içeriğin debugging amacıyla talep eden kişiye geri gönderilmesini sağlayan bir methoddur. Aşağıda Trace methodu açık olan bir web sunucusuna gönderilen trace talebinin örneğini görmektesiniz:

> telnet hostname 80
TRACE / HTTP/1.1
Host: hostname     // Host: hostname header'ı gönderiliyor.
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)      // User-Agent: xxx header'ı gönderiliyor.

Sunucu bu durumda aldığı talebe karşılık aşağıdaki yanıtı dönecektir:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Connection: close
Content-Type: message/http
Content-Length: 39
TRACE / HTTP/1.1
Host: www.tutorialspoint.com           // Host: hostname header'ı alınıyor.
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)           // User-Agent: xxx header'ı alınıyor.

Görüldüğü üzere trace methodu ile yapılan http talebine karşılık gönderilen talebin aynısı geri dönmüştür. Bu şekilde geliştiriciler web sunucusuna gönderilen taleplerin web sunucusunda ne şekilde alındığını test edebilirler. 

Trace methodunun sunucuda açık bırakılması geliştiricilerin debug ve diagnostic yapması için kullanışlıdır. Ancak saldırganlar için de kullanışlı olduğundan kapatılması önerilmektedir. Normalde web uygulamalarında HttpOnly flag'i kullanıldığında kullanıcıların web uygulamasındaki çerezleri üçüncü parti kimselerce çalınamazdır. Fakat trace methodu açık bırakıldığında saldırgan “trace talebi” yapan bir javascript kodu web uygulamasına girebilir, ardından kullanıcı trace talebi yapan javascript kodunun yer aldığı web sayfasını görüntüleyebilir. Kendi cookie header'ı ve değerinin de yer aldığı bir http trace talebi sunucuya gönderebilir. Ardından sunucu aynı paketi geri gönderebilir ve gelen trace yanıtını javascript kodu saldırganın sunucusuna göndererek saldırgan paketleri dosyalayabilir ve çerez bilgilerini elde edebilir. Dolayısıyla HttpOnly her ne kadar xss saldırılarını önlese de (yani üçüncü parti kimselerin çerez çalmasını önlese de) trace methoduna karışmadığından HttpOnly flag'i olsa bile çerezler çalınabilmektedir. Bu şekilde trace methodu ile çerez çalma işlemine Cross-Site Tracing saldırısı adı verilmektedir. Aşağıda web uygulamarına girilecek örnek bir Cross-Site Tracing saldırısı yapan javascript kodlamasını görmektesin:

<script type=”text/javascript”>
<!--
function sendTrace () {
var xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”);
xmlHttp.open(“TRACE”, “http://foo.bar”,false);
xmlHttp.send();
xmlDoc=xmlHttp.responseText;
alert(xmlDoc);
}
//-->
</script>
<INPUT TYPE=BUTTON OnClick=”sendTrace();” VALUE=”Send Trace Request”>

Yukarıdaki kodlamada http://foo.bar linki yerine zafiyete sahip web uygulamasının linki girilir ve javascript kodu zafiyete sahip web uygulamasına girilir. Bu javascript kodunun yer aldığı web sayfasını görüntüleyen her kullanıcı web sunucusuna trace talebi yapar. Trace yanıtı  ise xmlDoc değişkenine çekilir. xmlDoc değişken değeri saldırganın sunucusuna örneğin GET talebi ile gönderilir ve saldırı böylece gerçekleşir.

Trace methodu ile saldırgan her bir kullanıcının http talebini okuyarak kullanıcı adı & şifre gibi hassas bilgileri, çerezleri, kullanılan http başlıklarını, sunucu değişkenlerini ve dahasını öğrenebilir. Bu bilgilerden yola çıkan saldırgan oturum devralabilir ya da edindiği bilgiler doğrultusunda daha başka saldırılar düzenleyebilir. Bu kadar geniş çapta bilginin saldırganın eline geçmesini önlemek için trace methodunun kapatılması gerekmektedir.

Uygulama

Apache'de varsayılan olarak Trace methodu kapalı gelir. Bunu aşağıda görebilmekteyiz:

> telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
TRACE / HTTP/1.0
HTTP/1.1 405 Method Not Allowed
Date: Tue, 17 Oct 2017 07:47:31 GMT
Server: Apache/2.4.7 (Ubuntu)
Allow: 
Content-Length: 297
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method TRACE is not allowed for the URL /.</p>
<address>Apache/2.4.7 (Ubuntu) Server at 127.0.1.1 Port 80</address>
</body></html>
Connection closed by foreign host.

Apache'de Trace methodunu açmak için apache2.conf dosyası açılır.

> sudo gedit /etc/apache2/apache2.conf

Dosyanın en altına aşağıdaki kod satırı eklenir:

TraceEnable on

Ardından apache2 servisi yeniden başlatılır.

> service apache2 restart

Böylelikle trace talebinde bulunabilir duruma geliriz:

> telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
TRACE / HTTP/1.0
Test: A // Test: A header'ı gönderiliyor
Deneme: B // Deneme: b header'ı gönderiliyor.
HTTP/1.1 200 OK
Date: Tue, 17 Oct 2017 07:51:43 GMT
Server: Apache/2.4.7 (Ubuntu)
Connection: close
Content-Type: message/http
TRACE / HTTP/1.0
Test: A // Test: A header'ı alınıyor
Deneme: B // Deneme: b header'ı alınıyor.

Görüldüğü üzere trace talebimiz kabul edilmiştir ve gönderdiğimiz paket aynı şekilde geri dönmüştür. Dolayısıyla trace methodu açık durumdadır.

Http Trace Methodu Nasıl Kapatılır?

Apache'de trace methodunu kapamak için apache2.conf dosyası açılır.

> sudo gedit /etc/apache2/apache2.conf

Dosyanın en altına aşağıdaki kod satırı eklenir:

TraceEnable off

Ardından apache2 servisi yeniden başlatılır. 

> service apache2 restart

Böylece trace talebi kapatılmış olur.

Yararlanılan Kaynaklar

https://www.tutorialspoint.com/http/http_methods.htm

https://compsecurityconcepts.wordpress.com/tag/trace/

http://www.techstacks.com/howto/disable-tracetrack-in-apache-httpd.html

https://httpd.apache.org/docs/2.4/mod/core.html#traceenable

http://www.cgisecurity.com/whitehat-mirror/WH-WhitePaper_XST_ebook.pdf

723 kelime