If you’re planning to take the Security+ exam, you should have a good understanding of application security controls and techniques in preventing an attack that uses HTML links to trick a user into performing an action.
For example, can you answer this question?
Q. Homer recently received an email thanking him for a purchase that he did not make. He asked an administrator about it and the administrator noticed a pop-up window, which included the following code:
<body onload=”document.getElementByID(‘myform’).submit()”>
<form id=”myForm” action=”gcgapremium.com/purchase.php” method=”post”
<input name=”Buy Now” value=”Buy Now” />
</form>
</body>
What is the MOST likely explanation?
A. XSRF
B. Buffer overflow
C. SQL injection
D. Fuzzing
More, do you know why the correct answer is correct and the why incorrect answers are incorrect? The answer and explanation is available at the end of this post.
Attacker Creating HTML Links
Cross-site request forgery (XSRF or CSRF) is an attack where an attacker tricks a user into performing an action on a web site. The attacker creates a specially crafted HTML link and the user performs the action without realizing it.
As an innocent example of how HTML links create action, consider this HTML link: http://www.google.com/search?q=Success. If a user clicks on the link, it works just as if the user browsed to Google and entered Success as a search term. The ?q=Success part of the query causes the action.
Many web sites use the same type of HTML queries to perform actions. For example, imagine a web site that supports user profiles. If users wanted to change profile information, they could log on to the site, make the change, and click a button. The web site may use a link like this to perform the action:
http://getcertifiedgetahead.com/edit?action=set&key=email&value=you@home.com
Attackers use this knowledge to create a malicious link. For example, the following link could change the email address in the user profile, redirecting the user’s email to the attacker:
http://getcertifiedgetahead.com/edit?action=set&key=email&value=hacker@hackersrs.com
Although this shows one possibility, there are many more. If a web site supports any action via an HTML link, an attack is possible. This includes making purchases, changing passwords, transferring money, and much more.
Web sites typically won’t allow these actions without users first logging on. However, if users have logged on before, authentication information is stored on their system either in a cookie or in the web browser’s cache. Some web sites automatically use this information to log users on as soon as they visit. In some cases, the XSRF attack allows the attacker to access the user’s password.
XSRF Attack Prevention
Users should be educated on the risks related to links from sources they don’t recognize. Phishing emails often include malicious links that look innocent enough to users, but can cause significant harm. If users don’t click the link, they don’t launch the XSRF attack.
However, just as with cross-site scripting, the primary burden of protection from XSRF falls on the web site developers. Developers need to be aware of XSRF attacks and the different methods used to protect against them. One method is to use dual authentication and force the user to manually enter credentials prior to performing actions. Another method is to expire the cookie after a short period, such as after 10 minutes, preventing automatic logon for the user.
Many current web application frameworks include CSRF prevention steps out of the box. As an example, Django (often used to create web applications) won’t even run pages that include forms that don’t include CSRF protection. Additionally, Django makes this easy to do. Developers simply add this string into the code: {% csrf_token %}. Python code within the Django framework does the heavy lifting to protect against a CSRF attack.
Remember this
Cross-site request forgery (XSRF) scripting causes users to perform actions on web sites, such as making purchases, without their knowledge. In some cases, it allows an attacker to steal cookies and harvest passwords.
Q. Homer recently received an email thanking him for a purchase that he did not make. He asked an administrator about it and the administrator noticed a pop-up window, which included the following code:
<body onload=”document.getElementByID(‘myform’).submit()”>
<form id=”myForm” action=”gcgapremium.com/purchase.php” method=”post”
<input name=”Buy Now” value=”Buy Now” />
</form>
</body>
What is the MOST likely explanation?
A. XSRF
B. Buffer overflow
C. SQL injection
D. Fuzzing
Answer is A. A cross-site request forgery attack (XSRF) causes users to perform actions without their knowledge. This scenario indicates the user visited a web site, most likely through a malicious link, and the link initiated a purchase. None of the other attacks cause unsuspecting users to make purchases.
A buffer overflow attacks a web site and attempts to access system memory.
An SQL injection attack attempts to access data on a database server.
Fuzzing sends random data to an application to test its ability to handle the random data.
You may also like to view a blog post about Web Application Vulnerabilities.