<div>One of the greatest challenges I always had when reviewing Spring MVC applications, was to gain a ful picture of its controllers, and more importantly its CommandClasses (i.e. the POJOs that are AutoBinded by Spring and who are a common source of high/critical vulnerabilities in Spring MVC apps).</div>

<div> </div>
<div>The way I approach these problems (visualizing/understanding Spring, Struts, DWR, Sharepoint, etc...), is to write scripts that consume the Application&#39;s articfacts (web.xml, *-servlet.xml, source-code, class files) and then consolidated that information in &#39;easy&#39; (or easier) to undersand visualizations.</div>

<div> </div>
<div>Unfortunally most of the great examples that I had in the past were built on top of Client code, so I couldn&#39;t really share them. But finally, the O2 Scripts have reached a level of maturity that it was easy to create a generic version of them for Spring&#39;s MVC Demo application: <strong>JPetStore</strong>.</div>

<div> </div>
<div>Ironically, this demo application from Spring (which is used by Spring Developers to learn how ot use Spring), is actually vulnerable to a number of security issues, including some spectacular cases of the Spring MVC AutoBinding issue.</div>

<div> </div>
<div>I have created a number of Blog posts and videos that hopefully will help you to understand (and replicate) the issue:</div>
<div>
<ul>
<li>
<div clear="all"><a href="http://o2platform.wordpress.com/2011/07/11/o2-script-with-blackbox-exploits-for-spring-mvc-autobinding-vulnerabilities-in-jpetstore/">O2 Script with BlackBox exploits for Spring MVC AutoBinding vulnerabilities in JPetStore</a> (with video) - Blog post that shows a number of security exploits in action, for example: <em>create a shopping cart, to though the payment process, and change the total value on the last step</em></div>
</li>
<li>
<div clear="all"><a href="http://o2platform.wordpress.com/2011/07/12/o2-script-spring-mvc-util-view-controllers/">O2 Script: ‘Spring MVC Util – View Controllers’</a> (with video) - Blog post that presents a visualizer for the Spring MVC mappings. <strong>This is the most imporant script here</strong> , since this is the view that is really unique (and the one I have not seen anywhere else). What you have there is a full mapping of the Spring MVC properties for JPetStore, which includes not only the &#39;URL to Controller&#39; mappings, but (much more important) a &#39;expanded&#39; view of the CommandClass. And altough the JPetStore example is already quite a good one, in the real world these POJO objects tend to be massive (with cases where the developers/management only expects that only a couple fields should be populated form an HTTP request, and in reality, dozens if not hundreds of fileds can be edited/manipulated)</div>
</li>
<li>
<div clear="all"><a href="http://o2platform.wordpress.com/2011/07/12/o2-script-for-spring-mvc-jpetstore-start-servers-startstop-apache-and-hsqldb/">O2 Script for “Spring MVC JPetStore – Start Servers” (start/stop apache and hsqldb)</a> (with video) - Blop post that shows an O2 Script that starts the apache and hsqldb server</div>
</li>
<li>
<div clear="all"><a href="http://s3.amazonaws.com/Demo_Files/jPetStore%20-%20O2%20Demo%20Pack.zip">http://s3.amazonaws.com/Demo_Files/jPetStore%20-%20O2%20Demo%20Pack.zip</a> - Fully packaged version of JPetStore and relevant O2 Scripts (it is 30Mb because it includes apache server) </div>
</li>
<li>
<div clear="all"><a href="http://diniscruz.blogspot.com/2011/07/two-security-vulnerabilities-in-spring.html">http://diniscruz.blogspot.com/2011/07/two-security-vulnerabilities-in-spring.html</a> - Blog post with a couple more details about the Spring MVC AutoBinding vulnerability (exploited above) and a link to the 2008 white paper published on this topic  </div>
</li></ul>
<div>The other important factor about these examples, is that I finally have a real example that can be used when talking with the Spring Framework team, other OWASP/AppSec FOSS tools and with AppSec vendors (tools and service-providers). Basically, from now on the message is: <strong>here is a complete scenario, now lets figure out how to use your technology to fix, detect or mitigate this.</strong> </div>

<div> </div>
<div><strong>This is also a part of O2 that I was waiting for, in order to be able to fully participate in the current OWASP &#39;reach the developer&#39; efforts.</strong> In order to reach the developers, we need to speak their language, and with these examples (and technology) I can finally communicate properly with developers, and show them how their app works.</div>

<div> </div>
<div>Note that the point here is not to push that everybody should be using using O2 to perform this type of analysis!   My objective with O2 is to show what can/should be done, and to allow others to create more native implementations of these techniques (in this case, there should be an eclipse plug-in to do this or to consume this data). Ultimately if we want to reach the developers we need to communicate with them using tools and techniques they are already used to.</div>

<div> </div>
<div>There is still a lot to document and to map out (including other tools that merge even further the black-box and white box worlds), so please take these scripts for a test drive, <strong>and help me to create a really powerful &#39;Spring MVC Security Analsys ToolKit&#39; that can dramatically increase the security of Spring MVC applications :)</strong></div>

<div> </div>
<div>We also need to start thinking about <strong>creating an (Open) &#39;Spring MVC Security Rule Pack&#39; which can be maintained by the community and consumed by the multiple tools/services</strong>.</div>
<div> </div>
<div>Final note for the .NET Crowd, <strong>the <a href="http://ASP.NET">ASP.NET</a> MVC has the same problem</strong>, and I although I have not looked at a big <a href="http://ASP.NET">ASP.NET</a> MVC app, I will bet that they will create the same types of vulnerabilties (so ...  if you have access to such an app, try the O2&#39;s <a href="http://ASP.NET">ASP.NET</a> MVC visualizer on it :)  )</div>

<div> </div>
<div>Dinis Cruz</div>
<div>Blog: <a href="http://diniscruz.blogspot.com">http://diniscruz.blogspot.com</a></div>
<div>Twitter: <a href="http://twitter.com/DinisCruz">http://twitter.com/DinisCruz</a></div>
<div>Web: <a href="http://www.owasp.org/index.php/O2">http://www.owasp.org/index.php/O2</a></div>
<div> </div></div>