I think we are exactly on the same page, and welcome to the wonderful world of &#39;Framework behaviour mapping&#39; :)<br clear="all"><br><div>I&#39;ve done this quite a lot in the past, so let see if I can help you here.</div>
<div><br></div><div>The first thing you must do is to make sure that you have &#39;scriptable&#39; access to ALL required artifacts. Since you will need to be doing a lot &#39;automagically&#39; glueing, you have to make sure that you can programatically access the data you need.</div>
<div><br></div><div>From what I understand you already have the traces for the controllers and the views. So what about the config files? Is everything on those config files, or will you also need to parse the java/class files for more metadata. Btw, this is J2EE right?</div>
<div><br></div><div>The next thing you need to do, is to figure out the exact formula that maps the controllers to the views. And before you go any further you need to have a visualization of this (which can be as simple as a treeview, or as complex as a full blow graph model (which you can also do with O2 :)  ).</div>
<div><br></div><div>After that, you will need to look at your sinks and sources and see if they are easy to match (this has to be done after you matched the controllers with the view, or you will get a huge amount of mappings, most of which will never happen in the real-world). One of the beauties of the IO2Finding and O2Trace format is that I was able to join traces by simple doing string matches (there are even helper methods to do that). </div>
<div><br></div><div>The idea/concept for Joining traces, is that you rewrite the Sinks and Sources so that they match:</div><div><br></div><div>For example, if you had a <b>Controller &#39;Sink&#39;</b> with</div><div><br>
</div><div>      setAttribute(&quot;<b><i>A_KEY</i></b>&quot;, {taint value&quot;})  </div><div><br></div><div>and a <b>View &#39;Source&#39; </b>with </div><div><br></div><div>    getAttribute(&quot;<b><i>A_Key</i></b>&quot;) </div>
<div><br></div><div>Then I would rewrite them (in-memory or in disk (if there is a large number of findings)) as:</div><div><br></div><div>   <b>Controller &#39;Sink&#39;</b>  -&gt;   getset_Attribute_<b><i>A_KEY</i></b>()</div>
<div><meta charset="utf-8"><b>   View &#39;Source&#39;    </b> -&gt;<b>   </b> getset_Attribute_<b><i>A_KEY</i></b>() </div><meta charset="utf-8"><meta charset="utf-8"><meta charset="utf-8"><div><br></div><div>and then just:</div>
<div><ul><li>do a direct string Sink-to-Source match, </li><li>glue them with a one-to-many traces/finding generation mode (i.e you will need to create a new trace for each unique Sink-to-Source mapping), </li><li>look at the created findings (and finally you will be able to gain a better picture of what is going on)</li>
</ul></div><div><br></div><div>This actually works very well, and scales spectacularly.</div><div><br></div><div>I have used this on lots of different &#39;glue&#39; locations: Session/Global Variables, Interfaces, Database layers, Controllers-&gt;Views, Reflection, Aspect PointCuts, Validation routines, etc...</div>
<div><br></div><div>A good way forward is probably if we work together on doing this for Spring MVC&#39;s JPetstore, since I&#39;ve already started this process and it is a great case study. See the posts at <a href="http://o2platform.wordpress.com/category/java/spring-mvc/jpetstore/">http://o2platform.wordpress.com/category/java/spring-mvc/jpetstore/</a> , and my next step on this JPetStore security analysis is exactly to create a mapping for the JSPs (check out this post which talks about that: <a href="http://o2platform.wordpress.com/2011/07/15/finding-the-jsp-views-that-are-mapped-to-controlers-in-jpetstore-spring-mvc">Finding the JSP views that are mapped to controlers in JPetStore (Spring MVC)</a> )</div>
<div><br></div><div>Does this make sense? </div><div><br>Dinis Cruz<br><br>Blog: <a href="http://diniscruz.blogspot.com">http://diniscruz.blogspot.com</a><br>Twitter: <a href="http://twitter.com/DinisCruz">http://twitter.com/DinisCruz</a><br>
Web: <a href="http://www.owasp.org/index.php/O2">http://www.owasp.org/index.php/O2</a><br>
<br><br><div class="gmail_quote">On 29 July 2011 16:46, Alvaro <span dir="ltr">&lt;<a href="mailto:alvaro.picapau@gmail.com">alvaro.picapau@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Thats great Dinis! I will have a look at thoses examples. The idea is not to trace the full taint flow in the source code but to connect a sink defined in the controller with a source defined in the view (both of them in the FVDL file). The relation between these controllers and views is done via some configuration xml files. So the idea is to create a mapping table from these xml files that links controllers and views, and bridge the existing sinks and sources in the FVDL.<br>

<br clear="all">Cheers,<br>Alvaro<br>
<br><br><div class="gmail_quote"><div><div></div><div class="h5">On Fri, Jul 29, 2011 at 2:49 AM, dinis cruz <span dir="ltr">&lt;<a href="mailto:dinis.cruz@owasp.org" target="_blank">dinis.cruz@owasp.org</a>&gt;</span> wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div class="h5">
Here is a reply I just sent to a new O2 user that is trying to get his head around O2 Scripting (to parse, filter and visualize FVDL Files) , which also includes a link to a blog post with an example of what the O2 .NET Static Analysis engine is able to create:<div>


<br></div><div><span style="border-collapse:collapse;font-family:arial, sans-serif;font-size:13px"><i>&quot;...I&#39;ve pushed another blog post that should give you more ideas on what you can do with O2 scripting and FVDL files: <a href="http://o2platform.wordpress.com/2011/07/29/creating-the-the-util-view-fvdl-traces-h2-script-lots-of-data-analysis-code-samples" style="color:rgb(0, 0, 204)" target="_blank">http://o2platform.wordpress.com/2011/07/29/creating-the-the-util-view-fvdl-traces-h2-script-lots-of-data-analysis-code-samples</a> (I wrote this last week, but run out of time to publish it then)<div>


<br></div><div><b>Question:</b> what do you mean by &quot;connecting some related issues..an unsupported MVC pattern breaks the data flow from the controller to the view&quot; ? Are you trying to connect the tain-flow traces? (for example a trace that starts in a Controller and continues on a View?)</div>


<div><br></div><div>If so, you need to take a look at what I was doing with the traces I used to get from the Ounce Labs engine. I was doing exactly that. </div><div><br></div><div>There is quite a lot of scripts and code in O2 to support the joining of traces (from simple to complex use cases), so let me know if this is what you are trying to do (note that to really take advantage of O2, we should expand the current FVDL parser to create IO2Findings objects, since once we have that, we can use the existing O2 tools for Finding&#39;s viewing and Trace&#39;s joining (including Drag&amp;Drop trace creation support)).</div>


<div><br></div><div>To see an example of the kind of traces you can do in O2, <b>check this out .NET HacmeBank SQL Injection vulnerability trace example: <a href="http://o2platform.wordpress.com/2011/07/29/o2-net-ast-scanner-hacmebank-sql-injection-poc" style="color:rgb(0, 0, 204)" target="_blank">http://o2platform.wordpress.com/2011/07/29/o2-net-ast-scanner-hacmebank-sql-injection-poc</a> .</b></div>


<div><br></div><div>Note how that &#39;O2 created trace&#39;:</div><div><ul><li style="margin-left:15px">starts on a URL (the real <b>Source</b> of tainted data), </li><li style="margin-left:15px">then follows the taint flow into a server-side Textbox, </li>


<li style="margin-left:15px">and into the WebService&#39;s call on the WebSite code</li><li style="margin-left:15px">and into the WebServices&#39; method on the WebService&#39;s code (this was a separate trace that was joined with the first one), </li>


<li style="margin-left:15px">and continues the taint follow until it reaches the Sql Injection <b>Sink</b></li></ul></div></i></span>...&quot;</div><div><br>Dinis Cruz<br>
</div>
<br></div></div>_______________________________________________<br>
Owasp-o2-platform mailing list<br>
<a href="mailto:Owasp-o2-platform@lists.owasp.org" target="_blank">Owasp-o2-platform@lists.owasp.org</a><br>
<a href="https://lists.owasp.org/mailman/listinfo/owasp-o2-platform" target="_blank">https://lists.owasp.org/mailman/listinfo/owasp-o2-platform</a><br>
<br></blockquote></div><br>
</blockquote></div><br></div>