HTTPQUERY
Bahasa Indonesia

TRACE

Penggunaan

Request TRACE adalah perkakas diagnostik untuk memeriksa rantai request antara klien dan server origin. Server merespons dengan 200 dan menyertakan pesan request yang diterima di dalam body respons. Salah satu format yang dikenali adalah Content-Type message/http. Body respons berisi salinan pesan request sebagaimana diterima, tidak termasuk bidang yang dianggap sensitif oleh server, sehingga memungkinkan perbandingan dengan request aslinya.

Properti

Request TRACE tidak membawa body. Klien bertanggung jawab untuk tidak menyertakan bidang sensitif seperti kredensial atau Cookie dalam request TRACE, karena respons yang digemakan mengekspos seluruh header yang diterima.

Microsoft IIS secara historis mendukung TRACK sebagai alias proprietari untuk TRACE. Keduanya rentan terhadap kerentanan XST yang sama dan keduanya perlu dinonaktifkan di produksi.

Deteksi perantara

Ketika sebuah request melewati proxy atau gateway, setiap perantara menambahkan entri header Via yang mencantumkan versi protokol yang digunakan untuk meneruskan. Membandingkan request asli dengan salinan yang digemakan mengungkap header yang ditambahkan, diubah, atau dihapus oleh setiap hop.

Header Max-Forwards membatasi sejauh mana sebuah request TRACE berjalan. Menyetel nilai ini ke nol membuat proxy pertama yang merespons, yang berguna untuk mengisolasi perantara tertentu dalam rantai multi-hop. Pengurangan penghitung pada setiap hop mencegah loop penerusan tak berujung.

Keamanan dan XST

Cross-Site Tracing (XST) adalah vektor serangan yang mengeksploitasi TRACE untuk menangkap header HTTP, termasuk token autentikasi dan nilai cookie. Skrip berbahaya mengirim request TRACE ke server target, dan respons yang digemakan mengekspos header yang selain itu tidak dapat diakses oleh skrip tersebut.

Catatan

Sebagian besar server produksi menonaktifkan TRACE untuk mencegah serangan XST. Server web seperti Apache dan Nginx menonaktifkan TRACE secara bawaan. Browser juga memblokir TRACE. WHATWG Fetch Standard mencantumkan TRACE sebagai metode terlarang, sehingga JavaScript tidak dapat mengeluarkan request TRACE. Menonaktifkan TRACE di server tetap menjadi langkah pengerasan yang disarankan untuk semua server yang menghadap internet.

Contoh

Request TRACE ke sumber daya root. Server menggemakan request asli di dalam body respons dan menyertakan header Via yang menunjukkan bahwa request melewati dua server proxy.

Request

TRACE / HTTP/1.1
Host: example.com

Respons

HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 91
Via: 1.1 proxy1.example.re, 1.1 proxy2.example.re

TRACE / HTTP/1.1
Host: example.com
Via: 1.1 proxy1.example.re, 1.1 proxy2.example.re

Header Via mencantumkan proxy1.example.re dan proxy2.example.re sebagai perantara. Keduanya meneruskan request menggunakan HTTP/1.1. Setiap perantara harus menambahkan entri Via pada request yang diteruskan, sehingga body yang digemakan menyertakan bidang Via terakumulasi yang ditambahkan oleh kedua proxy tersebut.

CORS

TRACE adalah metode terlarang CORS. Browser memblokir semua upaya mengirim TRACE melalui API browser seperti fetch() dan XMLHttpRequest.

Menonaktifkan TRACE

Apache menonaktifkan TRACE dengan TraceEnable Off pada konfigurasi server. nginx tidak mendukung TRACE secara bawaan, sehingga tidak diperlukan tindakan apa pun. IIS mengharuskan penghapusan TRACE (dan TRACK) dari daftar verb yang diizinkan pada Request Filtering. Caddy tidak mendukung TRACE secara bawaan.

OWASP menyarankan penonaktifan TRACE pada semua server produksi. Pemindai keamanan menandai TRACE yang aktif sebagai kerentanan meskipun browser modern memblokir request TRACE melalui Fetch Standard, yang mencantumkan TRACE sebagai metode terlarang.

Menonaktifkan TRACE pada level server tetap menjadi pertahanan utama terhadap XST karena klien dan skrip HTTP non-browser tidak terikat oleh pembatasan Fetch Standard.