{"id":1269,"date":"2009-03-13T21:51:35","date_gmt":"2009-03-14T05:51:35","guid":{"rendered":"http:\/\/cubist.cs.washington.edu\/Security\/?p=1269"},"modified":"2009-03-13T21:51:35","modified_gmt":"2009-03-14T05:51:35","slug":"security-review-online-taxes","status":"publish","type":"post","link":"https:\/\/secblog.cs.washington.edu\/Security\/2009\/03\/13\/security-review-online-taxes\/","title":{"rendered":"Security Review: Online Taxes"},"content":{"rendered":"<p>For the last couple of years, I have done my taxes online.\u00a0 Compared to doing them by hand on paper, the online method takes far less time to fill out.\u00a0 However, it also brings with it the host of security risks associated with entering sensitive data over the internet.\u00a0 To successfully file your tax return, the online system must take your social security number, as well as all your personal and financial information.<!--more--><\/p>\n<p><strong>Assets \/ Security Goals<\/strong><\/p>\n<p>One clear asset that needs to be protected is the user&#8217;s sensitive personal information.\u00a0 If an attacker can read this data, they can effectively steal the user&#8217;s identity.<\/p>\n<p>Another desirable security goal is that accurate information must go to the government.\u00a0 Inaccurate sending of information could lead to either the user owing more money than they should, or the IRS performing an audit on the user.<\/p>\n<p><strong>Adversaries \/ Threats<\/strong><\/p>\n<p>One threat could come from someone sitting between the company building your tax return and the IRS.\u00a0 Someone in this position might be able to intercept and modify the return when it is transmitted to the IRS.<\/p>\n<p>Another threat could be from a disgruntled employee at the company building your tax return.\u00a0 To make their services as easy to use as they are, these companies must store all the information you enter each year so that you don&#8217;t have to re-enter your personal information again the next year.\u00a0 A disgruntled employee might be able to steal this data and sell it to the highest bidder.<\/p>\n<p><strong>Weaknesses<\/strong><\/p>\n<p>One possible weakness could be cross-site scripting vulnerabilities.\u00a0 These are often caused by easy to miss bugs, and their consequence could be as serious as having all the user&#8217;s sensitive data stolen.<\/p>\n<p>Another weakness comes from the combination of sensitive data being stored for an extended period of time (1+ years) and the user using their account very infrequently (likely only once per year).\u00a0 This allows for both inside or outside attackers plenty of time to launch quite extensive attacks, which the user will likely know nothing of for a very long time<\/p>\n<p><strong>Defenses<\/strong><\/p>\n<p>The main key to defending against cross-site scripting vulnerabilities is to check everything going into and out of the server side script is sanitized.\u00a0 This includes not charging blindly on in the case of invalid values.<\/p>\n<p>As for the data retention weakness, not storing the sensitive data from year to year would definitely be the most secure option.\u00a0 However, this does mean a sacrifice in convenience that users may find worth a small decrease in security.\u00a0 Assuming the data must be kept, ideally it should be kept in such a way that not even the company would be able to look at it without being given some secret by the user.\u00a0 This could work by having the user know a password that the company only knows the secure hash of.\u00a0 This password could then also be used to generate a secret key that could then encrypt the user&#8217;s sensitive information on the company&#8217;s computers.\u00a0 This way, when the user is not accessing the data, the company&#8217;s computers do not have enough information to recover the user&#8217;s password, the secret key generated by their password, or their sensitive data.\u00a0 But they would be able to quickly verify that a user&#8217;s password is correct, and from that correct password, generate the secret key to temporarily unlock their data.\u00a0 The downside to this system is that it is now only as strong as the user&#8217;s password, and user&#8217;s are notoriously bad at choosing strong passwords.<\/p>\n<p><strong>Risks \/ Conclusion<br \/>\n<\/strong><\/p>\n<p>The main risks in doing taxes online lie in the possibility of identity theft and tax fraud.\u00a0 I would imagine that companies providing online tax services likely know of and have defenses for attacks coming from the outside.\u00a0 What has me a little bit more worried is the threat of an inside job.\u00a0 A single disgruntled employee, or even just an unpatched computer that gets a virus could likely bypass most defenses against outside attacks if they are not considered.\u00a0 One thing that does sooth my worries some is that as reputable companies wishing to continue making money, these companies would likely work hard to mitigate the effects of any attack on the user, otherwise they might get a reputation for screwing people over.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For the last couple of years, I have done my taxes online.\u00a0 Compared to doing them by hand on paper, the online method takes far less time to fill out.\u00a0 However, it also brings with it the host of security &hellip; <a href=\"https:\/\/secblog.cs.washington.edu\/Security\/2009\/03\/13\/security-review-online-taxes\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":109,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1269","post","type-post","status-publish","format-standard","hentry","category-security-reviews"],"_links":{"self":[{"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/posts\/1269","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/users\/109"}],"replies":[{"embeddable":true,"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/comments?post=1269"}],"version-history":[{"count":4,"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/posts\/1269\/revisions"}],"predecessor-version":[{"id":1289,"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/posts\/1269\/revisions\/1289"}],"wp:attachment":[{"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/media?parent=1269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/categories?post=1269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secblog.cs.washington.edu\/Security\/wp-json\/wp\/v2\/tags?post=1269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}