CSRF Referer Header Strip
Intro
Most of the web applications I see are kinda binary when it comes to CSRF protection; either they have one implemented using CSRF tokens (and more-or-less covering the different functions of the web application) or there is no protection at all. Usually, it is the latter case. However, from time to time I see application checking the Referer HTTP header.
A couple months ago I had to deal with an application that was checking the Referer as a CSRF prevention mechanism, but when this header was stripped from the request, the CSRF PoC worked. BTW it is common practice to accept empty Referer, mainly to avoid breaking functionality.
A couple months ago I had to deal with an application that was checking the Referer as a CSRF prevention mechanism, but when this header was stripped from the request, the CSRF PoC worked. BTW it is common practice to accept empty Referer, mainly to avoid breaking functionality.
The OWASP Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet tells us that this defense approach is a baaad omen, but finding a universal and simple solution on the Internetz to strip the Referer header took somewhat more time than I expected, so I decided that the stuff that I found might be useful for others too.
Solutions for Referer header strip
Most of the techniques I have found were way too complicated for my taste. For example, when I start reading a blog post from Egor Homakov to find a solution to a problem, I know that I am going to:
Rich Lundeen (aka WebstersProdigy) made an excellent blog post on stripping the Referer header (again, make sure you read that one first before you continue). The HTTPS to HTTP trick is probably the most well-known one, general and easy enough, but it quickly fails the moment you have an application that only runs over HTTPS (this was my case).
The data method is not browser independent but the about:blank trick works well for some simple requests. Unfortunately, in my case the request I had to attack with CSRF was too complex and I wanted to use XMLHttpRequest. He mentions that in theory, there is anonymous flag for CORS, but he could not get it work. I also tried it, but... it did not work for me either.
Krzysztof Kotowicz also wrote a blog post on Referer strip, coming to similar conclusions as Rich Lundeen, mostly using the data method.
Finally, I bumped into Johannes Ullrich's ISC diary on Referer header and that led to me W3C's Referrer Policy. So just to make a dumb little PoC and show that relying on Referer is a not a good idea, you can simply use the "referrer" meta tag (yes, that is two "r"-s there).
The PoC would look something like this:
- learn something very cool;
- have a serious headache from all the new info at the end.
Rich Lundeen (aka WebstersProdigy) made an excellent blog post on stripping the Referer header (again, make sure you read that one first before you continue). The HTTPS to HTTP trick is probably the most well-known one, general and easy enough, but it quickly fails the moment you have an application that only runs over HTTPS (this was my case).
The data method is not browser independent but the about:blank trick works well for some simple requests. Unfortunately, in my case the request I had to attack with CSRF was too complex and I wanted to use XMLHttpRequest. He mentions that in theory, there is anonymous flag for CORS, but he could not get it work. I also tried it, but... it did not work for me either.
Krzysztof Kotowicz also wrote a blog post on Referer strip, coming to similar conclusions as Rich Lundeen, mostly using the data method.
Finally, I bumped into Johannes Ullrich's ISC diary on Referer header and that led to me W3C's Referrer Policy. So just to make a dumb little PoC and show that relying on Referer is a not a good idea, you can simply use the "referrer" meta tag (yes, that is two "r"-s there).
The PoC would look something like this:
<html>
<meta name="referrer" content="never">
<body>
<form action="https://vistimsite.com/function" method="POST">
<input type="hidden" name="param1" value="1" />
<input type="hidden" name="param2" value="2" />
...
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>
Conclusion
As you can see, there is quite a lot of ways to strip the Referer HTTP header from the request, so it really should not be considered a good defense against CSRF. My preferred way to make is PoC is with the meta tag, but hey, if you got any better solution for this, use the comment field down there and let me know! :)
More articles
- Top Pentest Tools
- Hackrf Tools
- World No 1 Hacker Software
- Hack Tools
- Underground Hacker Sites
- Hack Tools
- Pentest Tools Kali Linux
- Pentest Reporting Tools
- Hack Tools
- Hacker Tools Mac
- Hacking Tools For Windows Free Download
- Pentest Reporting Tools
- Hack Tools For Games
- Hacker Techniques Tools And Incident Handling
- Hacking Tools For Beginners
- Hacker Tools For Windows
- Pentest Tools Apk
- How To Make Hacking Tools
- Hacking Tools Pc
- Easy Hack Tools
- Hacking Tools Mac
- Hacker Security Tools
- Pentest Tools Online
- Hacker Tools Windows
- Hacks And Tools
- Pentest Tools Website
- Pentest Tools For Windows
- Hack Tool Apk
- Hack Tools Github
- Pentest Tools For Mac
- Beginner Hacker Tools
- Hacking Tools For Windows
- Blackhat Hacker Tools
- Hacker Tools For Pc
- Pentest Tools Bluekeep
- World No 1 Hacker Software
- Pentest Tools Apk
- Hacker Tools
- Android Hack Tools Github
- Hack Tools For Mac
- Github Hacking Tools
- Hacking Tools Kit
- What Are Hacking Tools
- Hack Tools Github
- Top Pentest Tools
- Hack Website Online Tool
- Hack And Tools
- Pentest Tools Subdomain
- Hacker Search Tools
- Install Pentest Tools Ubuntu
- Hacking Tools 2019
- Hacking Tools Usb
- Hak5 Tools
- Best Pentesting Tools 2018
- Hacker Tools Online
- Hacking Tools For Mac
- Hacker Search Tools
- Github Hacking Tools
- Pentest Recon Tools
- Hacker Tool Kit
- Hacker Tools For Mac
- Hack Tool Apk No Root
- Pentest Automation Tools
- Hack Rom Tools
- Hacker Tools Windows
- Tools Used For Hacking
- Pentest Tools Alternative
- Nsa Hacker Tools
- Best Hacking Tools 2020
- Best Pentesting Tools 2018
- Pentest Tools For Mac
- Hacking Tools For Beginners
- Hacker Tools Free
- Easy Hack Tools
- Hack Tools Online
- Hacking Tools 2019
- Wifi Hacker Tools For Windows
- Hack Tools 2019
- Hacker Tools 2020
- Termux Hacking Tools 2019
- Hack Website Online Tool
- Hack Tools Mac
- Hack Tools Mac
- Pentest Tools Subdomain
- Blackhat Hacker Tools
- Pentest Tools Windows
- Android Hack Tools Github
- Pentest Tools Nmap
- Hack Tools Download
- Tools For Hacker
- Computer Hacker
- Pentest Tools Android
- Pentest Tools Website
- Pentest Tools For Android
- Hacking Tools Download
- Pentest Tools Download
- Hacks And Tools
- Hacking Tools 2020
- Usb Pentest Tools
- New Hacker Tools
- Easy Hack Tools
- Hack Tools 2019
- Hacker Tools 2020
- Top Pentest Tools
- Hacker Tools Free Download
- Hack Tools For Windows
- Tools Used For Hacking
- Hacker Tools Free
- Hacker Techniques Tools And Incident Handling
- Hacker Tool Kit
- Best Hacking Tools 2019
- Pentest Tools Free
- Game Hacking
- Growth Hacker Tools
- Pentest Reporting Tools
- How To Hack
- Hacker Tools
- Hacking Tools For Mac
- Easy Hack Tools
- Hacking Tools For Beginners
- Hacking Tools Pc
- Hacking Tools 2019
- Pentest Tools Download
- Pentest Tools Free
- Easy Hack Tools
- Hack Tools Mac
- Hacking Tools Pc
- New Hacker Tools
- Bluetooth Hacking Tools Kali
- Pentest Tools For Mac
- Best Pentesting Tools 2018
- How To Hack
- Hacker Tools For Ios
- Hacking Tools Download
- Pentest Tools Github
- Hacking Tools Usb
- Bluetooth Hacking Tools Kali
- Hacking Tools For Windows 7
- Hacker Techniques Tools And Incident Handling
- Hacker Search Tools
- Hacking Apps
- Hacker Tools Apk
- Android Hack Tools Github
- Pentest Tools Github
- What Are Hacking Tools
- Best Hacking Tools 2019
- Hacking Apps
- Hacker Tools Windows
- Hack And Tools
- Hack Tool Apk No Root
- Hacking Tools Kit
- Best Hacking Tools 2020
No comments:
Post a Comment