<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>GDS Security Blog</title>
	
	<link>http://www.gdssecurity.com/l/b</link>
	<description>Gotham Digital Science Security Blog</description>
	<lastBuildDate>Thu, 08 Oct 2009 21:52:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/GdsSecurityBlog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>GWT-RPC in a nutshell</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/aKK0m7tAB2U/</link>
		<comments>http://www.gdssecurity.com/l/b/2009/10/08/gwt-rpc-in-a-nutshell/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 21:52:19 +0000</pubDate>
		<dc:creator>Ron Gutierrez</dc:creator>
				<category><![CDATA[Application Security]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/?p=146</guid>
		<description><![CDATA[Hello folks, Ron Gutierrez here. Recently I chose to dissect the cryptic serialized HTTP requests used by Google Web Toolkit RPC to better understand which fields are actually “fuzzable”. If you were looking to find a flaw in the implementation of GWT RPC then every single value in the request would be fuzzible. In this [...]]]></description>
			<content:encoded><![CDATA[<p>Hello folks, Ron Gutierrez here. Recently I chose to dissect the cryptic serialized HTTP requests used by Google Web Toolkit RPC to better understand which fields are actually “fuzzable”. If you were looking to find a flaw in the implementation of GWT RPC then every single value in the request would be fuzzible. In this case, I’m looking for the fields that the web application will actually be processing.</p>
<p>First, a little bit about Google Web Toolkit (GWT). GWT is a Java framework that is used to create AJAX applications.  Rather than having to write complex JavaScript code, GWT makes it easy to build AJAX enable Java web applications by allowing developers to build the components in Java and then compiling that code into optimized JavaScript for browsers to run.  One of the added bonuses that GWT provides is the ability to reuse code.  GWT-RPC provides the ability to send native and custom Java objects from the client-side Javascript code over to the Java server-side backend.  GWT-RPC sends a serialized stream containing the Class name, Method name, Parameters through the wire whenever an AJAX call is made. This serialized stream is what we need to dissect in order to understand which fields can be fuzzed without invalidating the request.</p>
<p>The serialized steam is in plaintext and delimited by pipes.  The calls are sent through the browser as a typical HTTP POST Request with the serialized method call in the body of the request. Here is an example of a very simple GWT RPC request to a method called greetServer that takes in two strings as parameters.</p>
<p><code>5|0|7|http://localhost:8080/testproject/<br />
|29F4EA1240F157649C12466F01F46F60|<br />
com.test.client.GreetingService|greetServer|java.lang.String|<br />
myInput1|myInput2|1|2|3|4|2|5|5|6|7|</code></p>
<p>The stream can be split into three different parts (keep in mind that I am using Google’s naming convention for these parts as seen through the code that implements the serialization).</p>
<p><strong>Header </strong></p>
<ol>
<li>Contains the SERIALIZATION_STREAM_VERSION value which at present will always be set to 5.  If this value is changed, it will cause an error on the server side. Therefore, this value is not fuzzable.</li>
<li>The next value is a flag value. I have yet to seen somewhere where this value is set to anything other than 0. Modifying this value does not break a request.</li>
</ol>
<p><code><span style="color: #ff0000">5|0|</span>7|http://localhost:8080/testproject/<br />
|29F4EA1240F157649C12466F01F46F60|<br />
com.test.client.GreetingService|greetServer|java.lang.String|<br />
myInput1|myInput2|1|2|3|4|2|5|5|6|7|</code></p>
<p><strong>String Table</strong></p>
<ol>
<li>The first value is an integer that tells you how many pipe delimited values to read in to fill the String Table.  In this example, the next seven values will be the String Table contents. Consider this data structure to be similar to that of an array in that each value has an index that corresponds to the values in the Payload (discussed next).</li>
</ol>
<p><code><span style="color: #000000">5|0|</span><span style="color: #ff0000">7|</span><span style="color: #ff0000">http://localhost:8080/testproject/<br />
|29F4EA1240F157649C12466F01F46F60|<br />
com.test.client.GreetingService|greetServer|java.lang.String|<br />
myInput1|myInput2|<span style="color: #000000">1|2|3|4|2|5|5|6|7|</span></span></code></p>
<p><strong>Payload</strong></p>
<ol>
<li>Consists of numeric values used to reconstruct the method call and parameters in the String Table. For example, 1 refers to the second element (<a href="http://localhost:8080/testproject">http://localhost:8080/testproject</a>), 2 refers to the third element (29F…), etc.</li>
<li>These values for the most part should not be fuzzed. Since the payload values are used to reconstruct the method call on the server changing them to anything that will create an invalid call which will result in a request error.</li>
<li>There are a few caveats which I’ll get into more detail as we progress.</li>
</ol>
<p><code><span style="color: #ff0000"><span style="color: #000000"><code><span style="color: #000000">5|0|</span>7|<span style="color: #ff0000"><span style="color: #000000">http://localhost:8080/testproject/<br />
|29F4EA1240F157649C12466F01F46F60|<br />
com.test.client.GreetingService|greetServer|java.lang.String|<br />
myInput1|myInput2|</span><span style="color: #ff0000">1|2|3|4|2|5|5|6|7|</span></span></code></span></span></code></p>
<p>The first four values of the payload can be expected to appear in every GWT RPC request. The first two values consist of the directory containing all the Javascript that was generated during the GWT compiliation and what looks to be an identifier for the Service. Regardless of their meanings, their contents should not be fuzzed as the values are not taken into consideration by the server. The next values “com.test.client.GreetingServer” and “greetServer” corresponds to the server side service name and method name that will be called. Altering these values to an incorrect class or method will cause an exception to be thrown and returned in the response if the exception is not properly handled by the server.</p>
<p><code><span style="color: #ff0000"><span style="color: #000000"><code><span style="color: #000000">5|0|</span>7|<span style="color: #ff0000"><span style="color: #000000"><span style="color: #ff0000">http://localhost:8080/testproject/<br />
|29F4EA1240F157649C12466F01F46F60|<br />
com.test.client.GreetingService|greetServer|</span>java.lang.String|<br />
myInput1|myInput2|</span><span style="color: #000000">1|2|3|4|2|5|5|6|7|</span></span></code></span></span></code></p>
<p>This is where the Payload gets a little more interesting … The fifth payload value (2) actually tells you how many method parameters are being sent. In this example the user is sending two parameters; since two parameters are being sent, there are two subsequent payload values (5|5 in this case) that refer to the indices of the String Table containing the data types of the parameters.  In this example, The Java data type of both method parameters is java.lang.String.</p>
<p><code><span style="color: #ff0000"><span style="color: #000000"><code><span style="color: #000000">5|0|</span>7|<span style="color: #ff0000"><span style="color: #000000">http://localhost:8080/testproject/<br />
|29F4EA1240F157649C12466F01F46F60|<br />
com.test.client.GreetingService|greetServer|<span style="color: #ff0000">java.lang.String</span>|<br />
myInput1|myInput2|</span><span style="color: #000000">1|2|3|4|<span style="color: #ff0000">2|5|5|</span>6|7|</span></span></code></span></span></code></p>
<p>The final two values refer to the indices of the String Table containing the actual string values that are being passed in the method. These are the primary subjects for application-level fuzzing. It’s worth noting that integer values that are sent as parameters will be appended to the payload rather than being stored in the String Table. Integer values can be modified, however since Java will be expecting an integer value you will be limited to only numeric values.</p>
<p><code><span style="color: #ff0000"><span style="color: #000000"><code><span style="color: #000000">5|0|</span>7|<span style="color: #ff0000"><span style="color: #000000">http://localhost:8080/testproject/<br />
|29F4EA1240F157649C12466F01F46F60|<br />
com.test.client.GreetingService|greetServer|java.lang.String|<br />
<span style="color: #ff0000">myInput1|myInput2|</span></span><span style="color: #000000">1|2|3|4|2|5|5|<span style="color: #ff0000">6|7|</span></span></span></code></span></span></code></p>
<p>Keep in mind that this was a walkthrough of a request with primitive data types. In reality, developers can be sending custom objects or more complex common Java objects such as Vectors, Linked Lists, etc. These data types will follow a different protocol for reading values from the String Table and Payload. To properly de-serialize these types, I found it easiest to capture sample requests and script the de-serialization.  I am planning to share this research and my script for automating the fuzzing of GWT RPC applications in an upcoming blog post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2009/10/08/gwt-rpc-in-a-nutshell/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2009/10/08/gwt-rpc-in-a-nutshell/</feedburner:origLink></item>
		<item>
		<title>Adobe Flex 3.3 SDK DOM-Based XSS</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/vlNujW7nmHs/</link>
		<comments>http://www.gdssecurity.com/l/b/2009/08/20/adobe-flex-3-3-sdk-dom-based-xss/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 13:44:26 +0000</pubDate>
		<dc:creator>Bix</dc:creator>
				<category><![CDATA[Application Security]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/?p=134</guid>
		<description><![CDATA[I just released an advisory to Bugtraq regarding a DOM-Based XSS bug in the Adobe Flex 3.3 SDK and earlier versions.  I notified the vendor back on June 29, 2009 and they released the fix on August 19th.  If you would like more information, you can view their security bulletin and their TechNotes.
Overview
Adobe [...]]]></description>
			<content:encoded><![CDATA[<p>I just released an advisory to Bugtraq regarding a DOM-Based XSS bug in the Adobe Flex 3.3 SDK and earlier versions.  I notified the vendor back on June 29, 2009 and they released the fix on August 19th.  If you would like more information, you can view their <a href="http://www.adobe.com/go/apsb09-13">security bulletin</a> and their <a href="http://kb2.adobe.com/cps/495/cpsid_49530.html">TechNotes</a>.</p>
<p><strong>Overview</strong></p>
<p>Adobe Flex is a software development kit released by Adobe Systems for the development and deployment of cross-platform rich Internet applications based on the Adobe Flash platform.  An instance of a DOM-based Cross Site Scripting (XSS) vulnerability was found in the default index.template.html file of the SDK which is a template used by FlexBuilder to generate the wrapper html for all application files in your project.  The XSS vulnerability appears to affect all user&#8217;s that download and utilize this html wrapper.  For more information on DOM-based XSS visit <a href="http://www.owasp.org/index.php/DOM_Based_XSS">OWASP&#8217;s site</a>.</p>
<p><strong>Technical Details</strong></p>
<p>File: index.template.html</p>
<p>1) Data enters via URL parameters through the window.location javascript object, is then stored into MMredirectURL variable, and passed to the AC_FL_RunContent() function.</p>
<p>Line 59:<br />
..snip..<br />
<code>var MMredirectURL = window.location;</code><br />
..snip..</p>
<p>Line 63:<br />
<code>AC_FL_RunContent(<br />
..snip..<br />
"FlashVars", "MMredirectURL=" MMredirectURL '&amp;MMplayerType=' MMPlayerType '&amp;MMdoctitle=' MMdoctitle "",<br />
..snip..</code></p>
<p>2) The MMredirectURL variable with user-controllable input is passed to AC_GetArgs and ultimately to AC_Generateobj, which performs a document.write. Writing the un-validated data to HTML creates the XSS exposure.</p>
<p>File: AC_OETags.js</p>
<p>Line 200:<br />
<code>function AC_FL_RunContent(){<br />
var ret =<br />
AC_GetArgs<br />
(  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"<br />
, "application/x-shockwave-flash"<br />
);<br />
AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);<br />
}</code></p>
<p>Line 178:<br />
<code>function AC_Generateobj(objAttrs, params, embedAttrs)<br />
{<br />
var str = '';<br />
if (isIE &amp;&amp; isWin &amp;&amp; !isOpera)<br />
{<br />
str  = '&lt;object ';<br />
for (var i in objAttrs)<br />
str  = i   '="'   objAttrs[i]   '" ';<br />
str  = '&gt;';<br />
for (var i in params)<br />
str  = '&lt;param name="'   i   '" value="'   params[i]   '" /&gt; ';<br />
str  = '&lt;/object&gt;';<br />
} else {<br />
str  = '&lt;embed ';<br />
for (var i in embedAttrs)<br />
str  = i   '="'   embedAttrs[i]   '" ';<br />
str  = '&gt; &lt;/embed&gt;';<br />
}<br />
document.write(str);<br />
}</code></p>
<p>NOTE: For the exploit to work, the end user must have installed an older version of Adobe Flash than the value that is set in the Globals variable &#8220;requiredMajorVersion&#8221; (Line 36).</p>
<p><strong>Proof-of-Concept Exploit</strong></p>
<p>This vulnerability can be exploited against any Flex based application that uses the index.template.html wrapper page containing the code above.  In order to exploit this issue, the end user must have Adobe Flash installed, but it must be an older version than the required one set by the application owner (set in Globals variable &#8220;requiredMajorVersion&#8221;).</p>
<p>Reproduction Request:</p>
<p>http://FlexApp/Flex/index.template.html?&#8221;/&gt;&lt;/object&gt;&lt;XSS attack string goes here&gt;</p>
<p><strong>Recommendation</strong></p>
<p>Update to Flex 3.4 SDK or view <a href="http://kb2.adobe.com/cps/495/cpsid_49530.html">Adobe&#8217;s TechNotes </a>on how to manually fix the issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2009/08/20/adobe-flex-3-3-sdk-dom-based-xss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2009/08/20/adobe-flex-3-3-sdk-dom-based-xss/</feedburner:origLink></item>
		<item>
		<title>SQL Injection used in Heartland, 7-Eleven and Hannaford Breaches</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/SJZ5rJ4jLvw/</link>
		<comments>http://www.gdssecurity.com/l/b/2009/08/19/sql-injection-used-in-heartland-7-eleven-and-hannaford-breaches/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 08:41:15 +0000</pubDate>
		<dc:creator>Justin Clarke</dc:creator>
				<category><![CDATA[Application Security]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/?p=124</guid>
		<description><![CDATA[Having recently seen our book SQL Injection Attacks and Defense come out, it is very timely indeed to see in the news of the recent indictment of Albert Gonzalez that SQL Injection played a key part in the Heartland Payment Systems, 7-Eleven, and Hannaford Brothers breaches, as well as for two other unnamed victim companies.
So [...]]]></description>
			<content:encoded><![CDATA[<p>Having recently seen our book <a href="http://www.elsevierdirect.com/product.jsp?isbn=9781597494243">SQL Injection Attacks and Defense</a> come out, it is very timely indeed to see in the news of the recent <a href="http://voices.washingtonpost.com/securityfix/heartlandIndictment.pdf">indictment of Albert Gonzalez</a> that SQL Injection played a key part in the Heartland Payment Systems, 7-Eleven, and Hannaford Brothers breaches, as well as for two other unnamed victim companies.</p>
<p>So how can SQL Injection, which is an application level problem, be used as a vector for attacking an organization? In a number of ways.  SQL Injection gives an attacker the ability to interact with the database, and therefore if something is possible on the database server it may well be possible through SQL Injection. Modern database systems such as Oracle, SQL Server and others provide a rich variety of functionality for their users &#8211; all too often though, some of this functionality can be abused by malicious individuals.</p>
<p>Making some assumptions, its likely that something like the following occurred:</p>
<ol>
<li>It was possible to interact with the underlying operating system in some way using SQL Injection. This could have been through the ability to execute operating system commands (such as through the well known <em>xp cmdshell</em> stored procedure on Microsoft SQL Server), or through the ability to stage content to the database server (or filesystem) and then have it compiled to executable content.</li>
<li>With the ability to execute content at the operating system layer, access was consolidated by providing some form of alternative control channel or remote access to the database server.</li>
<li>With consolidated access to the database server, the attacker uses the database server as a foothold to go further into the organization.</li>
</ol>
<p>These types of hybrid attacks where one type of attack is dovetailed or launched over another are becoming increasingly common. Another SQL Injection hybrid attack of recent note was the <a href="http://www.computerworld.com.au/article/202731/mass_hack_infects_tens_thousands_sites">SQL Injection mass attacks</a> that started in early 2008. These used SQL Injection in another way &#8211; to inject links to JavaScript malware into thousands of unsuspecting vulnerable sites. It just goes to prove that even if a vulnerability is over 10 years old, it still has some new tricks to be seen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2009/08/19/sql-injection-used-in-heartland-7-eleven-and-hannaford-breaches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2009/08/19/sql-injection-used-in-heartland-7-eleven-and-hannaford-breaches/</feedburner:origLink></item>
		<item>
		<title>SPF Moves to CodePlex</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/W863uYNU9kY/</link>
		<comments>http://www.gdssecurity.com/l/b/2009/08/13/spf-moves-to-codeplex/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 14:30:38 +0000</pubDate>
		<dc:creator>Brian Holyfield</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/?p=114</guid>
		<description><![CDATA[Just a quick post to let everyone know that with the release of v1.0.5, SPF has officially gone open-source.  The code (and most recent binary distribution) are now available from CodePlex and have been released under the GPL license. 
The decision to open-source SPF was an easy one.  The biggest factor preventing several companies from implementing SPF in their production environment [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick post to let everyone know that with the release of <a href="http://spf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31437#DownloadId=78876">v1.0.5</a>, SPF has officially gone open-source.  The code (and most recent binary distribution) are now available from <a href="http://spf.codeplex.com">CodePlex</a> and have been released under the GPL license. </p>
<p>The decision to open-source SPF was an easy one.  The biggest factor preventing several companies from implementing SPF in their production environment was the fact that it was neither commercially supported nor open source.  By moving SPF to an open source licensing model, more companies will have the option to experiment and hopefully use SPF to protect their web applications. </p>
<p>The CodePlex platform also provides public <a href="http://spf.codeplex.com/WorkItem/List.aspx">issue tracking</a> and a <a href="http://spf.codeplex.com/Thread/List.aspx">discussion forum</a> that will hopefully benefit the SPF user base going forward.  Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2009/08/13/spf-moves-to-codeplex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2009/08/13/spf-moves-to-codeplex/</feedburner:origLink></item>
		<item>
		<title>Creating a Patch for Human Stupidity</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/ed3hRZItei0/</link>
		<comments>http://www.gdssecurity.com/l/b/2009/04/08/creating-a-patch-for-human-stupidity/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 14:39:43 +0000</pubDate>
		<dc:creator>Alex Bayly</dc:creator>
				<category><![CDATA[General Security]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/?p=102</guid>
		<description><![CDATA[Social engineers use old tricks and new to bypass firewalls and other conventional IT security defences by taking advantage of human weakness or kindness to attack secure buildings, machine rooms, or trading floors from inside. This gives them access to information and data that they simply couldn&#8217;t get by hacking a web site. They don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Social engineers use old tricks and new to bypass firewalls and other conventional IT security defences by taking advantage of human weakness or kindness to attack secure buildings, machine rooms, or trading floors from inside. This gives them access to information and data that they simply couldn&#8217;t get by hacking a web site. They don&#8217;t have to pick locks or break windows as it’s usually easier not to. They use research, a plausible “story”, and a winning smile. A high-profile <a href="http://www.timesonline.co.uk/tol/news/uk/crime/article5563001.ece">example</a> of this type of attack was prosecuted in the UK in March 2009.</p>
<p>In September 2004, security procedures at The Sumitomo Mitsui Banking Corporation failed it when one of its security guards let friends in to play cards. The hackers installed software that recorded pictures of information on computer screens, details of keystrokes and of users&#8217; security details. They were caught when they tried to collect on the information they had harvested.</p>
<p>In 2007, a conman gained access to the safety deposit boxes at an ABN Amro bank in Antwerp&#8217;s diamond quarter, in what is thought to have been the biggest robbery ever committed by one person. The thief used no violence, <a href="http://www.independent.co.uk/news/world/europe/thief-woos-bank-staff-with-chocolates--then-steals-diamonds-worth-16314m-440755.html">just his charm</a>, to gain entry and steal gems worth €21 million. </p>
<p>&#8220;He bought chocolates for the personnel, he was a nice guy, he charmed them, got the original of keys to make copies and got information on where the diamonds were,&#8221; said Philip Claes, spokesman for the Diamond High Council in Antwerp.</p>
<p>Many people who work in offices will know that passwords, key codes, and SecureID tokens can often be simply picked up off the desks around them. If a social engineer can gain access to an office, any of this information is potentially up for grabs. The data that can be accessed using these items is very likely to be critical to the company, otherwise why defend it? </p>
<p>So how do you defend your company against an attacker who uses his knowledge of your staff to simply walk into the building? </p>
<p>The patch for human weakness is simple: education. An informed workforce is safer than one left in the dark. Managers should try to create a corporate culture in which security is everybody’s business, not just that of the IT department or the security guard. An organisation’s technological security may identify some attacks, but if the staff and organisational culture are on your side as well, then your systems will be far more secure.</p>
<p>For example, employees should understand that if legitimate IT staff need access to a machine, they should not need the employee&#8217;s help, or username and password, to do so. But if the company&#8217;s employees treat technology as a feared and mysterious thing, it leaves a hole through which a social engineer can attack. The social engineer may be given access to critical systems, simply by posing as one of the IT staff. During social engineering engagements we have had instances where employees have logged in for the social engineering team, believing them to be IT staff, and left them in charge of critical systems.</p>
<p>Since we started testing how companies&#8217; systems hold up against social engineering attacks, we have been surprised by how easy it is to operate in a crowded room. We have even worked in restricted access areas and never been challenged. Looking like you belong and are busy can make people leave you alone. Why does this work? </p>
<p>Most organisations&#8217; security policies require that staff ask people who they do not recognise for company ID. But especially in Britain, asking for ID is seen as confrontational behaviour and those who do it may meet more outrage than praise for their understanding of the need to challenge strangers. You need more that just a policy to resolve this problem; you need to teach people that social engineering actually happens, and that they can make a difference. </p>
<p>In the UK we are lucky enough to have a TV show called the <a href="http://www.youtube.com/watch?v=Ewo73NtwNKg">Real Hustle</a>. This show purports to teach people about the way con men work and protect them from getting hustled. If it can work for keeping peoples money in their wallets, couldn’t staff education in a similar vain keep corporate data safe? </p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2009/04/08/creating-a-patch-for-human-stupidity/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2009/04/08/creating-a-patch-for-human-stupidity/</feedburner:origLink></item>
		<item>
		<title>When ASP.NET EventValidation Doesn’t Work</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/0bUu0vBCxDg/</link>
		<comments>http://www.gdssecurity.com/l/b/2009/03/19/when-aspnet-eventvalidation-doesnt-work/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 15:07:35 +0000</pubDate>
		<dc:creator>Brian Holyfield</dc:creator>
				<category><![CDATA[Application Security]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/?p=80</guid>
		<description><![CDATA[As a developer or security tester, it is important to know how built-in security mechanisms like EventValidation work.   Starting with version 2.0 of the .NET Framework, Microsoft introduced the concept of “EventValidation” for validating PostBack data.  The principal behind EventValidation is fairly simple &#8212; if the framework sees certain values within a [...]]]></description>
			<content:encoded><![CDATA[<p>As a developer or security tester, it is important to know how built-in security mechanisms like EventValidation work.   Starting with version 2.0 of the .NET Framework, Microsoft introduced the concept of “EventValidation” for validating PostBack data.  The principal behind EventValidation is fairly simple &#8212; if the framework sees certain values within a PostBack that it doesn’t know about, it throws an exception.  The official explanation from MSDN is included below:</p>
<blockquote><p>The event validation mechanism reduces the risk of unauthorized postback requests and callbacks. When the EnableEventValidation property is set to true, ASP.NET allows only the events that can be raised by the control during a postback request or callback.</p>
<p style="text-align: right;">&#8211; MSDN</p>
</blockquote>
<p>From a security point of view, this sounds like a great feature.  EventValidation actually does go a long way in protecting many non-editable application inputs (such as drop-down lists, etc) from parameter manipulation attacks.</p>
<p>Unfortunately there is very little documentation on how EventValidation works underneath the hood (you can find one attempt at an explanation <a href="http://odetocode.com/Blogs/scott/archive/2006/03/20/3145.aspx">here</a>).  One thing I have noticed is that there are some inconsistencies in how EventValidation gets enforced.  Specifically, there are certain scenarios that seemingly *should* result in a validation exception but do not.  Let’s look at a few…</p>
<p><strong>The First Scenario</strong></p>
<p>In the first scenario, we have an account maintenance page that allows users to view and potentially update their account information.  Updates are submitted by pressing the “Update” image button on the account maintenance page.  This button is a standard ASP.NET ImageButton control as shown by the code below:</p>
<p><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: blue;">&lt;</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: #a31515;">asp</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: blue;">:</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: #a31515;">ImageButton</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas;"> <span style="color: red;">ID</span><span style="color: blue;">=&quot;ImageButton1&quot;</span> <span style="color: red;">runat</span><span style="color: blue;">=&quot;server&quot;</span> <span style="color: red;">OnClick</span><span style="color: blue;">=&quot;ImageButton1_Click&quot;</span><span> </span><span style="color: red;">ImageUrl</span><span style="color: blue;">=&quot;/images/UpdateProfile.gif&quot;</span> <span style="color: blue;">/&gt;</span></span></p>
<p>As you can see, the image button triggers the <strong>ImageButton1_Click </strong> method within the codebehind when clicked, which will process the update.  Based on application business rules, users within certain groups are not permitted to update their profile.  As such, the developer took the following route to disable this feature:</p>
<p style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: Consolas;"><span style="color: blue;">if</span> (<span style="color: #2b91af;">HttpContext</span>.Current.User.IsInRole(<span style="color: #a31515;">&quot;GUEST&quot;</span>))</span></p>
<p style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: Consolas;">{</span></p>
<p style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: Consolas;">&nbsp;&nbsp;ImageButton1.Enabled = <span style="color: blue;">false</span>;</span></p>
<p style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: Consolas;">&nbsp;&nbsp;ImageButton1.ImageUrl = <span style="color: #a31515;">&quot;/images/UpdateProfileDisabled.gif&quot;</span>;</span></p>
<p><span style="font-size: 10pt; line-height: 115%; font-family: Consolas;">}</span></p>
<p>As you can see, if the user is in the “Guest” role, the button will be disabled and a grayed out image button will be displayed instead.  For reference, the HTML generated by this code is shown below:</p>
<p><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: blue;">&lt;</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: #a31515;">input</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas;"> <span style="color: red;">type</span><span style="color: blue;">=&quot;image&quot;</span> <span style="color: red;">name</span><span style="color: blue;">=&quot;ImageButton1&quot;</span> <span style="color: red;">id</span><span style="color: blue;">=&quot;Image1&quot;</span> <span style="color: red;">disabled</span><span style="color: blue;">=&quot;disabled&quot;</span> <span style="color: red;">src</span><span style="color: blue;">=&quot;/images/UpdateProfile.gif&quot;</span><span style="color: blue;">/&gt;</span></span></p>
<p>At this point, some of you are undoubtedly thinking about a possible attack here.  The ImageButton control is disabled, but if the logic within the associated OnClick method (ImageButton1_Click) doesn’t perform the same role check, then the user can still submit a request to update their profile by forcing the request (even though the button has been disabled).   Those of you familiar with how HTML works know that simply removing the <em>disabled=”disabled”</em> portion of the HTML INPUT tag shown above will enable the button within the browser.  Once the enabled button is clicked, the <strong>ImageButton1_Click</strong> method will be invoked.</p>
<p>This is clearly bad coding on the part of the developer, however that is not the interesting part here. Based on the concept behind EventValidation, you would think that this scenario should throw an exception.  In fact, if the control were a LinkButton instead of an ImageButton, a validation exception <span style="text-decoration: underline;">would</span> be thrown.  So why doesn’t EventValidation catch this?  I’m not 100% certain but my guess is that it&#8217;s because a LinkButton controls use the EventTarget parameter to pass in the “clicked” control name whereas with an ImageButton, the actual control name is passed as the name of an input parameter (along with its .x and .y coordinates) and the EventTarget is left blank.</p>
<p><strong>Another Scenario</strong></p>
<p>Now let’s look at another scenario.  This time the page uses the <strong>OnTextChanged</strong> event of a TextBox control to determine whether the value was modified and, if so, will update the database with the new value.  As you can see from the excerpt below, the <strong>TBUserName_TextChanged</strong> method will be called when the TextBox value is changed.</p>
<p><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: blue;">&lt;</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: #a31515;">asp</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: blue;">:</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas; color: #a31515;">TextBox</span><span style="font-size: 10pt; line-height: 115%; font-family: Consolas;"> <span style="color: red;">ID</span><span style="color: blue;">=&quot;TBUserName&quot;</span> <span style="color: red;">runat</span><span style="color: blue;">=&quot;server&quot;</span> <span style="color: red;">OnTextChanged</span><span style="color: blue;">=&quot;TBUserName_TextChanged&quot; /&gt;</span></span></p>
<p>Like the previous scenario, the developer uses a similar technique to prevent users outside of the “Administrators” role from updating their user name.   If the user is not in the “Admins” role, the text box will be disabled within the browser so that the user will not be permitted to update the value.</p>
<p style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: Consolas;"><span style="color: blue;">if</span> (!<span style="color: #2b91af;">HttpContext</span>.Current.User.IsInRole(<span style="color: #a31515;">&quot;ADMINS&quot;</span>))</span></p>
<p style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: Consolas;">{</span></p>
<p style="margin-bottom: 0.0001pt; line-height: normal;"><span style="font-size: 10pt; font-family: Consolas;">&nbsp;&nbsp;TBUserName.Enabled = <span style="color: blue;">false</span>;</span></p>
<p><span style="font-size: 10pt; line-height: 115%; font-family: Consolas;">}</span></p>
<p>Once again, the method associated with the <strong>OnTextChanged</strong> event (TBUserName_TextChanged) needs to also perform the same role check to prevent a malicious user from bypassing the “disabled” HTML attribute.  This is another scenario where EventValidation should seemingly prevent such an attack from working since the control is not enabled, however it doesn’t.</p>
<p><strong>Other Notable Points</strong></p>
<p>Both of the scenarios outlined here will not be exploitable if the controls have their respective <em>.Visible</em> attributes set to false.  Forcing a request that uses a non-visible control (one where <em>.Visible</em> is explicitly set to “false”) will generally always trigger an EventValidation exception.  However, as you can see from the above two examples this is not always the case when only the .Enabled attribute is set to false.</p>
<p>A few other points of interest that I noticed with respect to the above scenarios:</p>
<ul>
<li>EventValidation DOES prevent users from submitting a LinkButton button when .Enabled is set to “false”</li>
<li>The OnTextChanged event will not be raised when the .ReadOnly attribute on a TextBox control is set to “false”</li>
</ul>
<p>So to summarize, Event Validation is a great feature of ASP.NET that can potentially thwart exploits where the developer may be incidentally relying on client-side controls (like the Browser) to prevent users from performing certain actions. Unfortunately, however, there is some inconsistency on how controls are treated when they are “Disabled” rather than not “Visible”.</p>
<p>The funny part is that based on the terminology alone, when asked if it is generally more secure to “Disable” something versus make it “Not Visible”, almost all security folks would recommend disabling.  Ironic isn’t it?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2009/03/19/when-aspnet-eventvalidation-doesnt-work/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2009/03/19/when-aspnet-eventvalidation-doesnt-work/</feedburner:origLink></item>
		<item>
		<title>Source Boston IIS7 Slides Posted</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/ab0IMlQWpXY/</link>
		<comments>http://www.gdssecurity.com/l/b/2009/03/17/source-boston-iis7-slides-posted/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 05:22:50 +0000</pubDate>
		<dc:creator>Brian Holyfield</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/?p=60</guid>
		<description><![CDATA[
My slides from the Source Boston conference last week have been posted for public consumption.  The talk discussed some of the cool new built-in features of IIS7, like the Integrated Request Pipeline and Request Filtering. Additionally, it covered the new modular architecture of IIS7 and discussed custom modules (like SPF) and various other new [...]]]></description>
			<content:encoded><![CDATA[<p>
My slides from the Source Boston conference last week have been <a href="http://www.gdssecurity.com/l/IIS7-Application-Defense-Source-Boston-2009.pdf">posted for public consumption</a>.  The talk discussed some of the cool new built-in features of IIS7, like the Integrated Request Pipeline and Request Filtering. Additionally, it covered the new modular architecture of IIS7 and discussed custom modules (like <a href="http://www.gdssecurity.com/l/spf/">SPF</a>) and various other new add-on modules that the Microsoft IIS team has released for free.
<p>Those of you not familiar with various extensions that the IIS team has released over the past several months should check out <a href="http://www.iis.net">IIS.NET</a>.  My two favorites are the <a href="http://www.iis.net/downloads/default.aspx?tabid=34&#038;g=6&#038;i=1691">URL Rewriter for IIS7</a> (think mod_rewrite for IIS) and <a href="http://www.iis.net/downloads/1825/ItemPermaLink.ashx">Dynamic IP Restrictions Extension</a>, an add-on that dynamically blocks IP addresses that violate connection threshold and timing limits (great for slowing down CGI and App Scans).
</p>
<p>
Overall, the conference was great&#8230;hats off to Stacy and the crew for a job well done.  They will be posting videos of the talks on the <a href="http://www.sourceconference.com/">Source Conference</a> site over the next few weeks, so certainly worth keeping an eye out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2009/03/17/source-boston-iis7-slides-posted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2009/03/17/source-boston-iis7-slides-posted/</feedburner:origLink></item>
		<item>
		<title>.NET StockTrader from MSDN:  The new WebGoat?</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/766b9pE9jCs/</link>
		<comments>http://www.gdssecurity.com/l/b/2009/02/05/net-stocktrader-from-msdn-the-new-webgoat/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 16:38:43 +0000</pubDate>
		<dc:creator>Brian Holyfield</dc:creator>
				<category><![CDATA[Application Security]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/?p=35</guid>
		<description><![CDATA[As an application security consultant, I always like to have a vulnerable sample application handy for demonstrating web application attacks to clients.  The irony is that other than contrived vulnerable sample applications, like FoundStone&#8217;s Hacme Applications or OWASP WebGoat, good vulnerable demo applications are actually hard to find.  
Luckily the folks at Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>As an application security consultant, I always like to have a vulnerable sample application handy for demonstrating web application attacks to clients.  The irony is that other than contrived vulnerable sample applications, like <a href="http://www.foundstone.com/us/resources-free-tools.asp">FoundStone&#8217;s Hacme Applications</a> or <a href="http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project">OWASP WebGoat</a>, good vulnerable demo applications are actually hard to find.  </p>
<p>Luckily the folks at Microsoft recently developed a new sample application, <a href="http://msdn.microsoft.com/en-us/netframework/bb499684.aspx">.NET StockTrader</a>, that fills this gap nicely.  The best thing about .NET StockTrader is that it was not intentionally designed to be an insecure application.  It is worth mentioning that the primary purpose of the .NET StockTrader application is to showcase the performance and interoperability of .NET Enterprise Application Server technologies like Windows Communication Foundation (WCF) and NOT a model for web application security.  That being said, for Microsoft to publish a sample application of any kind that has such obvious security bugs is interesting and would seem to be an oversight.  </p>
<p>For those interested in seeing a live demo of the application, you can find a live instance of .NET StockTrader on one of our <a href="http://trade-no-spf.gdsdemo.com">GDS Demo Sites</a>.  The items below just scratch the surface of this application as they were all quickly identified within about 10 minutes of playing around with the application.  While there are surely more issues to be found, here are some highlights:</p>
<p><strong>Failure to Restrict Authenticated URLs</strong></p>
<p>Not surprisingly, the .NET StockTrader application uses ASP.NET Forms Authentication for restricting access to protected pages.  Unfortunately, only the pages directly linked from the main navigation bar have been defined as protected resources within the web.config.  What does this mean?  Well,  pages such as <code>/PortfolioBySymbol.aspx</code> (used to display your portfolio holdings) can be directly browsed without providing proper authentication credentials. You&#8217;ll notice that a NullReferenceException gets thrown when accessing this page anonymously.  This is not by design, but due to the fact that the page attempts to read the ASP.NET forms authentication cookie and it&#8217;s missing.  Luckily the NullReferenceException saves the day here, but still a very sloppy configuration error (not to mention a code-level failure to anticipate and safely handle scenarios where the  ASP.NET Forms Authentication cookie is empty).</p>
<p><strong>Password Disclosure</strong></p>
<p>This issue highlights two major problems with the application.  As an authenticated user, try browsing to the Account Profile page.  Aside from the normal account profile data one would expect to find here, something will probably jump out at you (at least if you are a security person).  There are two form fields, appropriately marked &#8220;Password&#8221; and &#8220;Confirm Password&#8221;, which are pre-populated.  The problem here is that the actual user&#8217;s password is rendered back within two form fields.  Even though the browser masks the values from plain-sight, they can easily be revealed by viewing the HTML source (aka Right-Click -> View Source).  As I hinted at before, there are actually two issues here.  The second problem is that these passwords are actually stored in plain-text within the back-end database table used for storing profile data.  As you can see, things are starting to get ugly.</p>
<p><strong>Cross-Site Request Forgery</strong></p>
<p>The next issue is a classic Cross-Site Request Forgery (aka a one-click attack).  These attacks are certainly common, but this one is especially ugly as you will see in a moment.  Keep in mind that the premise for this sample application is an on-line stock trading web application, like eTrade.  Unfortunately, the page used to execute all BUY and SELL transactions passes all of its parameter via a single GET request similar to the following:</p>
<p><code>/Order.aspx?action=buy&#038;symbol=s:0&#038;quantity=122</code></p>
<p>The reason this is especially dangerous is that it can even be exploited through a malicious IMG or other HTML tag as shown below, so forcing a POST request is not necessary for exploit:</p>
<p><code>&lt;IMG SRC=&quot;/Order.aspx?action=buy&amp;symbol=s:0&amp;quantity=122&quot; HEIGHT=&quot;0&quot; WIDTH=&quot;0&quot; /&gt;</code></p>
<p><strong>FormsAuthenticationToken Manipulation</strong></p>
<p>Now this one is arguably the worst of the lot.  As I mentioned towards the beginning of the post, the .NET StockTrader application uses ASP.NET forms authentication.  What I didn&#8217;t mention was that the Authentication section of the web.config actually has cookie protection disabled (aka protection=&#8221;None&#8221;).  As you can imagine, this makes it trivial for anyone to decode the ASP.NET Forms Authentication Token and manipulate its contents to impersonate any, yes any, user.  Ironically this is one of those issues that does not immediately jump out at you if just viewing the cookie since the Forms Authentication Token is always HEX encoded irrespective of the protection setting .  Let&#8217;s take a look at an example: </p>
<p><code>signinform=BC970F782904ECCF027500690064003A0039000000316F04304A80C90100318975484C80C90100002F000000</code></p>
<p>The one thing that does jump out is the unusually short length of the encoded string and the abundance of NULL (00) values.  Run this string through a HEX decoder and you can quickly see the wheels come off (Hint:  75 69 64 3A 39 == U I D : 9)</p>
<p><strong>Arbitrary URL Redirection</strong></p>
<p>Last but not least, I&#8217;ll point out a less severe but equally interesting  URL that caught my eye when browsing the application:</p>
<p><code>/StockTrade.aspx?action=sell&#038;return=Portfolio.aspx&#038;holdingid=5434</code></p>
<p>Any time you see a URL or file name being passed to the application there is usually something fishy going on.  As it turns out, the &#8220;return&#8221; query string value on this page is directly assigned to the .PostBackUrl property of a LinkButton control on the page.  The result is an arbitrary URL redirection exploit when the user clicks the link button.  Ironically this bug is also dangerously close to being a Cross-Site Scripting (XSS) bug, however there appears to be some built-in escaping taking place thanks to the .NET framework (although I am sure with some further testing this could be turned into an exploitable XSS bug).  </p>
<p><strong>So What?</strong></p>
<p>I think we all would agree that the insecure code examples and sloppy configuration settings highlighted above are pretty common and easily fixed, however that&#8217;s no excuse for Microsoft publishing a sample application riddled with flaws (even if it isn&#8217;t intended to be  a showcase for application security).  As many of us know, developers often rely on sample code and reference applications like the ones published on MSDN when writing code, so mistakes like these could easily make their way into a real-world scenario. Pretty scary. </p>
<p>Ironically, ALL of these issues can be mitigated with <a href="http://www.gdssecurity.com/l/spf/">Secure Parameter Filter (SPF) for IIS</a>, which can be seen live in action protecting the same sample application at <a href="http://trade-spf.gdsdemo.com">http://trade-spf.gdsdemo.com</a>.  Also, for those interested in continuing the bug hunt, the .NET StockTrader sample application can be <a href="http://msdn.microsoft.com/en-us/netframework/bb499684.aspx">downloaded for free from MSDN</a>.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2009/02/05/net-stocktrader-from-msdn-the-new-webgoat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2009/02/05/net-stocktrader-from-msdn-the-new-webgoat/</feedburner:origLink></item>
		<item>
		<title>Tamper Proofing Web Applications at Run-Time</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/TeFI7Vkxn2Y/</link>
		<comments>http://www.gdssecurity.com/l/b/2008/12/19/tamper-proofing-web-applications-at-run-time/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 21:05:20 +0000</pubDate>
		<dc:creator>Joe Hemler</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/2008/12/19/tamper-proofing-web-applications-at-run-time/</guid>
		<description><![CDATA[Earlier this week we presented at the OWASP NY/NJ chapter meeting on &#8220;Tamper Proofing Web Applications at Run-Time&#8221;.             The talk presented some strategies and free solutions for protecting web applications from input driven attacks.          [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this week we presented at the <a href="https://lists.owasp.org/pipermail/owasp-nynjmetro/2008-December/000368.html" target="_blank">OWASP NY/NJ chapter meeting</a> on &#8220;Tamper Proofing Web Applications at Run-Time&#8221;.             The talk presented some strategies and free solutions for protecting web applications from input driven attacks.             The goal is to harden web applications so their non-editable inputs cannot be manipulated, which when left unchecked are a root cause of authorization bypass vulnerabilities such as parameter manipulation, forceful browsing, business logic flaws, etc.                         You can download the <a href="http://www.gdssecurity.com/l/TamperProofing-OWASP-NYC-12-16-2008.pdf">presentation slides here</a>.</p>
<p>Non-editable inputs are those that end-users do not need to modify directly &#8216; hidden form fields, URIs and QueryString parameters, cookies, etc.             Traditional approaches to protecting this data &#8216; black list and/or white list validation &#8216; are insufficient as they cannot normally prevent authorization flaws within the context of a user&#8217;s session.</p>
<p>Our talk demonstrated two freely available solutions that provide this type of protection for existing web applications without the need to modify the underlying application source code.             In general, they both operate on the theory that the application should only permit users to perform those actions that the UI has rendered to them.             The idea is to leverage HTTP responses at run-time to identify all legitimate requests (forms and links), collect the state of each possible request, and then validate subsequent requests against the stored state information.             Specifically, we cover <a href="http://www.hdiv.org" target="_blank">HDIV (HTTP Data Integrity Validator)</a> for J2EE web applications and <a href="http://www.gdssecurity.com/l/spf/">SPF (Secure Parameter Filter)</a> for .NET web applications. The implementation details of each are discussed as well as related pros and cons.</p>
<p>You can download the <a href="http://www.gdssecurity.com/l/TamperProofing-OWASP-NYC-12-16-2008.pdf">presentation slides here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2008/12/19/tamper-proofing-web-applications-at-run-time/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2008/12/19/tamper-proofing-web-applications-at-run-time/</feedburner:origLink></item>
		<item>
		<title>OWASP Boston Slides and SPF Public Demo Site</title>
		<link>http://feedproxy.google.com/~r/GdsSecurityBlog/~3/NjYnDiezepM/</link>
		<comments>http://www.gdssecurity.com/l/b/2008/12/04/owasp-boston-slides-and-spf-public-demo-site/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 21:45:40 +0000</pubDate>
		<dc:creator>Brian Holyfield</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.gdssecurity.com/l/b/2008/12/04/owasp-boston-slides-and-spf-public-demo-site/</guid>
		<description><![CDATA[The slide deck from the &#8220;Tamper Proofing Web Applications at Runtime&#8221; talk I gave last night at the OWASP Boston meeting are now available for download.
We also released version 1.0.1 of SPF earlier this week and have a public SPF demo site running .NET PetShop v4 from MSDN.        [...]]]></description>
			<content:encoded><![CDATA[<p>The slide deck from the &#8220;Tamper Proofing Web Applications at Runtime&#8221; talk I gave last night at the OWASP Boston meeting are now <a href="/l/TamperProofing-OWASP-Boston-12-03-2006.pdf">available for download</a>.</p>
<p>We also released version 1.0.1 of SPF earlier this week and have a public <a href="http://ps4-spf.gdsdemo.com/">SPF demo site</a> running .NET PetShop v4 from MSDN.             More information on SPF can be found on its <a href="/l/spf/">official page</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gdssecurity.com/l/b/2008/12/04/owasp-boston-slides-and-spf-public-demo-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gdssecurity.com/l/b/2008/12/04/owasp-boston-slides-and-spf-public-demo-site/</feedburner:origLink></item>
	</channel>
</rss>
