<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0cCRHY4fSp7ImA9WhJaEkQ.&quot;"><id>tag:blogger.com,1999:blog-6539367476188596012</id><updated>2012-10-03T13:11:05.835-07:00</updated><category term="Application Security" /><category term="Static Analysis" /><category term="CSRFGuard" /><title>Eazy E Application Security</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ericsheridan.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ericsheridan.blogspot.com/" /><author><name>Eric Sheridan</name><uri>http://www.blogger.com/profile/14445794067083047945</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="29" height="32" src="http://4.bp.blogspot.com/-yyuTEN208zM/T9Y1q7noGAI/AAAAAAAAACk/y-axd6hwptw/s1600/122.thumbnail.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/EazyEApplicationSecurity" /><feedburner:info uri="eazyeapplicationsecurity" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CU8HR30_eip7ImA9WhJbFkU.&quot;"><id>tag:blogger.com,1999:blog-6539367476188596012.post-5326545383942592552</id><published>2012-09-18T08:09:00.000-07:00</published><updated>2012-09-26T11:23:56.342-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-26T11:23:56.342-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Application Security" /><title>Your Cloud Provider is a Partner… Not a One-Night Stand </title><content type="html">&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:DocumentProperties&gt;
  &lt;o:Revision&gt;0&lt;/o:Revision&gt;
  &lt;o:TotalTime&gt;0&lt;/o:TotalTime&gt;
  &lt;o:Pages&gt;1&lt;/o:Pages&gt;
  &lt;o:Words&gt;140&lt;/o:Words&gt;
  &lt;o:Characters&gt;798&lt;/o:Characters&gt;
  &lt;o:Company&gt;WhiteHat Security&lt;/o:Company&gt;
  &lt;o:Lines&gt;6&lt;/o:Lines&gt;
  &lt;o:Paragraphs&gt;1&lt;/o:Paragraphs&gt;
  &lt;o:CharactersWithSpaces&gt;937&lt;/o:CharactersWithSpaces&gt;
  &lt;o:Version&gt;14.0&lt;/o:Version&gt;
 &lt;/o:DocumentProperties&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;JA&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="276"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:"";
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin:0in;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:12.0pt;
 font-family:Cambria;
 mso-ascii-font-family:Cambria;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Cambria;
 mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;



&lt;!--StartFragment--&gt;

&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;o:DocumentProperties&gt;
  &lt;o:Revision&gt;0&lt;/o:Revision&gt;
  &lt;o:TotalTime&gt;0&lt;/o:TotalTime&gt;
  &lt;o:Pages&gt;1&lt;/o:Pages&gt;
  &lt;o:Words&gt;1336&lt;/o:Words&gt;
  &lt;o:Characters&gt;7616&lt;/o:Characters&gt;
  &lt;o:Company&gt;WhiteHat Security&lt;/o:Company&gt;
  &lt;o:Lines&gt;63&lt;/o:Lines&gt;
  &lt;o:Paragraphs&gt;17&lt;/o:Paragraphs&gt;
  &lt;o:CharactersWithSpaces&gt;8935&lt;/o:CharactersWithSpaces&gt;
  &lt;o:Version&gt;14.0&lt;/o:Version&gt;
 &lt;/o:DocumentProperties&gt;
 &lt;o:OfficeDocumentSettings&gt;
  &lt;o:AllowPNG/&gt;
 &lt;/o:OfficeDocumentSettings&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;JA&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:EnableOpenTypeKerning/&gt;
   &lt;w:DontFlipMirrorIndents/&gt;
   &lt;w:OverrideTableStyleHps/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="276"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;

&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-parent:"";
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin:0in;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:12.0pt;
 font-family:Cambria;
 mso-ascii-font-family:Cambria;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Cambria;
 mso-hansi-theme-font:minor-latin;}
&lt;/style&gt;
&lt;![endif]--&gt;



&lt;!--StartFragment--&gt;

&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
“We programmatically interface with Cloud Providers to
manage our customer data, so we can rely on them for securing our services
right?” Wrong! &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
The moment you start interfacing with a Cloud Provider you
immediately inherit the risks associated with &lt;i&gt;their&lt;/i&gt; deployment, development, and security models – or lack
thereof in many cases. However, you’re still responsible for the secure
development of &lt;i&gt;your&lt;/i&gt; business’s
applications and services, but with the caveat that you are now sharing that
responsibility with a Cloud Provider. Unfortunately, most Cloud Providers do
not provide sufficient visibility into the maturity of security activities
within their software development lifecycle. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Below we’ll take a brief walkthrough of a secure buy-cycle
for a Cloud Provider and look at how you are affected by interfacing with Cloud
Providers and what you can do to ensure consistent adherence to secure
programming patterns and practices.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h2&gt;
Gaining Visibility into Security Activities&lt;/h2&gt;
&lt;div class="MsoNormal"&gt;
Gaining visibility into the security posture of a Cloud
Provider requires a large amount of discussion and documentation review. There
are several common security activities that I look for when evaluating a Cloud
Provider. If I were to evaluate your security capabilities as a Cloud Provider,
some of my very first questions would be:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Do you centralize application security initiatives?&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
As a user of your Cloud Provider services, I need assurance
that your development team and management staff is enabled by a centralized
security team to produce fully secured products. Show me that you have a
centralized security team or standards committee. I want to see a team that is
responsible for defining application security practices and standards as well
as defines and recommends security activities within the organization. Don’t
run your application security program like the Wild-Wild West!&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Do you enforce an application security-training curriculum?&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
As a user of your Cloud Provider services, I need assurance
that your development team and management staff is aware of the latest security vulnerabilities and their mitigation strategies. Before you can
begin addressing application security risks, your team needs to have an
understanding of those core risks!&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Do you facilitate secure development through automation?&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
As a user of your Cloud Provider services, I need assurance
that your development team and management staff has the tooling necessary to
streamline challenging security activities for quick remediation. This is
simply a matter of scalability; humans alone are not a viable option for
finding and fixing every problem in your codebase. Technologies such as Static
Application Security Testing (SAST) and Dynamic Application Security Testing
(DAST) help scale code review and penetration testing solutions by focusing on
a common set of application security problems while additional human-resources
apply more specialized techniques to the business contextual components of your
services.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
I do not want to hear that you “perform penetration tests on
a yearly basis using a 3&lt;sup&gt;rd&lt;/sup&gt; party firm and or 3&lt;sup&gt;rd&lt;/sup&gt; party
tool.” This type of process is not continuous, does not enable developers, does
not scale and leaves too many open problems.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
Do you have incident response for dealing with security vulnerabilities?&amp;nbsp;&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
As a user of your Cloud Provider services, I need assurance
that you have a process in place to respond to vulnerabilities identified in
production applications. I’m looking for a standardized process that is well
understood by the key stakeholders in your business and the applicable business
unit. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Show me the turn-around time for fixing vulnerabilities.
Give me an understanding of compensating controls used to reduce exposure of
exploitable vulnerabilities. Most importantly, show me who did what, when, and
how. I cannot make educated and well-informed decisions for my business if you
do not provide me with enough information from your end. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
How do you ensure confidentiality and integrity of sensitive data?&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
As a user of your Cloud Provider services, I need assurance
that you have sufficient controls in place to protect my sensitive data
throughout the service lifecycle. Tell me the protections you have in place when
sensitive data is being entered into the application, when the sensitive data
is transmitted across the wire, when the sensitive data is at rest, and when
the data is presented to end users. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Key security controls that I am looking for in this regard
include using FIPS 140-2 compliant cryptographic modules, masking of sensitive
fields, use of Transport Layer Security (TLS) for network transmission, use of strong
encryption and message digest algorithms for persistence, and a key management
strategy that incorporates key rotation and processes to minimize disclosure.
The last thing I’d want is you storing the cryptographic key in a database
column adjacent to the encrypted data! &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h3&gt;
How can my team make use of your services securely?&amp;nbsp;&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
As a user of your Cloud Provider services, I need assurance
that my development team will have all the support they need to systematically
interface with your exposed API in a secure fashion. Show me clear and concise
documentation of the security features and security characteristics of your
exposed functionality. My development teams need to understand your
authentication and identity management workflow along with guidance on how to
manage those identity tokens. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
My development teams also need to understand any security
relevant assumptions you place on your exposed API. For example, are you
expecting my development team to verify the user is authorized to access a
database record by querying the &lt;i&gt;UserEntitlments&lt;/i&gt;
endpoint prior to querying the &lt;i&gt;DatabaseRecord&lt;/i&gt;
endpoint? Or have you encapsulated the authorization logic within the &lt;i&gt;DatabaseRecord&lt;/i&gt; endpoint so that my
development team only has to make one API call? I definitely don’t want to be
responsible for disclosing my users’ information because you did not provide me
guidance on how to securely interact with your service.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;h2&gt;
Verify Security Claims and Assertions&lt;/h2&gt;
&lt;div class="MsoNormal"&gt;
While simply hammering your potential Cloud Provider with
application security questions like the above helps provide visibility into
their security posture, it in no way verifies that they’re doing what they
claim. In an ideal partnership, it is prudent for you to require your potential
Cloud Provider to “get tested” by an application security team before moving
the relationship forward. Whether an internal team or a 3rd party carries out
the assessment, the goal of the effort would be to gain confidence that the
Cloud Provider is properly adhering to and implementing their security claims
and assertions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
The assessment should cover not only a code review and
penetration test of the target services, but should also evaluate the
capability of the Cloud Provider to implement their security activities
throughout their Software Development Lifecycle. Use the vulnerabilities from
the code review and penetration test to assist in the evaluation of their
security activity effectiveness. Ask them:&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="text-indent: -0.25in;"&gt;What vulnerabilities in this report are known
and unknown?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="text-indent: -0.25in;"&gt;How long have you been working on remediating
the known?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="text-indent: -0.25in;"&gt;Why do you believe the unknown were not
previously identified?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="text-indent: -0.25in;"&gt;How long will it take to fix these
vulnerabilities?&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="MsoNormal"&gt;
You can roughly estimate what security activity failed based
on evidence from a combined code review and penetration test. If the
vulnerabilities indicate a complete lack of security control(s), then there is
likely a serious problem with the Cloud Provider’s planning and requirements
phases. If the appropriate security controls exist but were not used correctly
or there are various implementations of the same security control, then there is
likely a problem in the design and implementation phases. If the vulnerability
is substantial and was unknown, then there is likely a serious problem with the
Cloud Provider’s secure coding enforcement strategies. Finally, if the
vulnerability is substantial and known for an extended period of time, then
there is likely a serious problem with the Cloud Provider’s incident response
strategies.&lt;/div&gt;
&lt;h2&gt;
Conclusion&lt;/h2&gt;
&lt;div class="MsoNormal"&gt;
There is a very common problem facing consumers of Cloud
Providers today; they simply fail to dig deep enough in the selection process
and settle for what looks good on the surface – a surefire way to build a
short-lived relationship. You must realize that you inherit the risk of your
Cloud Provider the moment you leverage their services. The risks are further
compounded when sensitive information is passed through these Cloud Provider
services. When you evaluate your future Cloud Providers, ensure that you &lt;i&gt;gain visibility&lt;/i&gt; into their application
security activities and you &lt;i&gt;verify
security assertions and claims&lt;/i&gt; through penetration tests and code reviews.
After all, your Cloud Provider is a Partner… not a One-Night Stand!&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;!--EndFragment--&gt;&lt;img src="http://feeds.feedburner.com/~r/EazyEApplicationSecurity/~4/n1ACUkqg3n4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ericsheridan.blogspot.com/feeds/5326545383942592552/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ericsheridan.blogspot.com/2012/09/your-cloud-provider-is-partner-not-one.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/5326545383942592552?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/5326545383942592552?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EazyEApplicationSecurity/~3/n1ACUkqg3n4/your-cloud-provider-is-partner-not-one.html" title="Your Cloud Provider is a Partner… Not a One-Night Stand " /><author><name>Eric Sheridan</name><uri>http://www.blogger.com/profile/14445794067083047945</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="29" height="32" src="http://4.bp.blogspot.com/-yyuTEN208zM/T9Y1q7noGAI/AAAAAAAAACk/y-axd6hwptw/s1600/122.thumbnail.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ericsheridan.blogspot.com/2012/09/your-cloud-provider-is-partner-not-one.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEDSXY8cCp7ImA9WhJQEks.&quot;"><id>tag:blogger.com,1999:blog-6539367476188596012.post-4936359581213120122</id><published>2012-07-25T10:50:00.000-07:00</published><updated>2012-07-25T16:57:58.878-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-25T16:57:58.878-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Static Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Application Security" /><title>Simulating Model View Controller</title><content type="html">Sitting here at &lt;a href="http://www.blackhat.com/usa/"&gt;Black Hat USA 2012&lt;/a&gt;, it seems appropriate to write up another technical static analysis post. I’m coming off a night of drinks with some friends at &lt;a href="http://www.accuvant.com/capability/accuvant-labs"&gt;Accuvant Labs&lt;/a&gt;, so you can rest assure that I’m moving a little slowly this morning…
&lt;br /&gt;
&lt;br /&gt;
We last left off with a discussion about &lt;a href="http://ericsheridan.blogspot.com/2012/06/keyed-collections-and-propagation-pi.html"&gt;method propagator rules&lt;/a&gt; and how they facilitate the static analysis engine’s ability to model the propagation of untrusted data across keyed collections. One of the core use cases for this rule type was the need to more correctly propagate untrusted data across &lt;a href="http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpSession.html"&gt;session objects&lt;/a&gt;. With this functionality in place, at WhiteHat we can begin thinking about how to simulate the &lt;a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;Model-View-Controller&lt;/a&gt; architecture utilized by many popular Web frameworks such that &lt;a href="http://ericsheridan.blogspot.com/2012/06/whitehat-sentinel-source-is-born.html"&gt;Sentinel Source&lt;/a&gt; can propagate untrusted data placed in the session by the Controller and the corresponding retrieval of said untrusted data from the session by the View. Simulating this workflow through static analysis better enables Source’s ability to identify &lt;a href="https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)"&gt;Cross-Site Scripting&lt;/a&gt; vulnerabilities in modern Web applications.
&lt;br /&gt;
&lt;br /&gt;
The first challenge is simulating how an application transfers the execution of the application from the Controller to the View. For simplicity sake, let’s consider an application that makes use of the &lt;a href="http://struts.apache.org/1.x/"&gt;Struts 1.x&lt;/a&gt; MVC framework. In Struts, the developer modifies a configuration file to declare an Action that acts as the Controller. For each Action, the developer can declare one or more JSP files representing the corresponding View. Struts will transfer execution to these JSP files after executing the corresponding Action.
&lt;br /&gt;
&lt;br /&gt;
The &lt;a href="https://www.whitehatsec.com/sentinel_services/sentinelSource-development.html"&gt;WhiteHat Sentinel Source&lt;/a&gt; &lt;a href="http://finance.yahoo.com/news/WhiteHat-Security-Acquires-iw-3971822599.html"&gt;static analysis engine&lt;/a&gt; will programmatically locate and consume Struts configuration file(s) to identify what Actions are exposed and to which JSP files they transfer execution. Source then locates the corresponding source code and marks each Action with Runtime Binding Rules instructing the engine to immediately jump to one or more JSP files after simulating the execution of said Action. The fine grain details of Runtime Binding Rules are outside the scope of this post and will be discussed in later entries. For the purpose of our discussion, just note that Runtime Binding Rules augment control flow graph traversal necessary for modeling this MVC application.&lt;br /&gt;
&lt;br /&gt;
Let’s walk through the workflow a bit using code snippets from a sample Struts 1 MVC application that WhiteHat used as a test case during development. The application’s struts-config.xml file contains an Action declaration as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; 1.   &amp;lt;action input="/index.jsp" name="HelloWorldActionForm" path="/HelloWorld" scope="session" type="com.vaannila.HelloWorldAction"&amp;gt;  
 2.     &amp;lt;forward name="success" path="/helloWorld.jsp" /&amp;gt;  
 3.   &amp;lt;/action&amp;gt;  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
The engine will consume this declaration and notice exposure of the “com.vaannila.HelloWorldAction” Action class and the fact that it forwards to “helloWorld.jsp” upon completion. The Sentinel Source static analysis engine will locate the method declaration corresponding to the HelloWorldAction class that is invoked by Struts and use this as the starting point for call graph traversal. The found method declaration is as follows:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; 1.   public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {  
 2.      request.setAttribute("name", request.getParameter("name"));  
 3.      
 4.      HttpSession session = request.getSession(true);  
 5.      session.setAttribute("name", request.getParameter("name"));  
 6.      session.setAttribute("message", ((HelloWorldActionForm)form).getMessage());  
 7.      
 8.      response.setHeader("message", ((HelloWorldActionForm)form).getMessage());  
 9.      return mapping.findForward(SUCCESS);  
 10.  }  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
There are several lines of interest and even a couple vulnerabilities within this code snippet alone. However, let’s focus our attention on the ActionForm variable declaration and the corresponding invocations on line 6. As a result of one or more rules found in our Apache Struts RulePack, the Sentinel Source static analysis engine will mark the ActionForm variable declaration instance as a source of untrusted data. This means that the invocation of all getters containing corresponding setters will return untrusted data for this specific instance.&lt;br /&gt;
&lt;br /&gt;
Moving forward, we see that the developer sets the “message” session attribute to the value of ((HelloWorldActionForm)form).getMessage(). This line triggers a method propagator rule ensuring that subsequent calls to retrieve the “message” attribute from the session will return untrusted data. However, the session object extends beyond the scope of this method and is accessible to other classes and methods such as JSPs. In order to compensate for this increased scope, Source marks the method propagator rule as “global” instructing the engine to maintain untrusted data propagation references beyond the scope of the method.&lt;br /&gt;
&lt;br /&gt;
Once the engine is finished traversing the method, it will immediately jump to the “helloWorld.jsp” file to begin traversal.  Source’s static analysis engine carries over the untrusted data propagation references associated with the session’s “message” attribute and associates it with corresponding session instances in the underlying JSP. Consider the following code snippet from helloWorld.jsp:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; 1.   &amp;lt;h1&amp;gt;&amp;lt;bean:write name="HelloWorldActionForm" property="message" filter="false"/&amp;gt;&amp;lt;/h1&amp;gt;  
 2.   &amp;lt;h1&amp;gt;&amp;lt;%= request.getAttribute("name") %&amp;gt;&amp;lt;/h1&amp;gt;  
 3.   &amp;lt;h1&amp;gt;&amp;lt;%= session.getAttribute("name") %&amp;gt;&amp;lt;/h1&amp;gt;  
 4.   &amp;lt;h1&amp;gt;&amp;lt;%= session.getAttribute("message") %&amp;gt;&amp;lt;/h1&amp;gt;  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
We notice that on line #4 the JSP retrieves the contents of the “message” session attribute and displays it directly on the page. This is a perfect receipt for Cross-Site Scripting and is subsequently caught by the engine. If you were paying close attention, you may have noticed that in fact all 4 lines above result in Cross-Site Scripting all of which are identified by the Sentinel Source static analysis engine today.&lt;br /&gt;
&lt;br /&gt;
The command line output of the trace signifying this vulnerability looks as follows:

&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; (6) Injection.Net.Http.Body (2) (Severity:Medium) (Confidence:High)  
      web/helloWorld.jsp (16) Sink (Sink.Net.Http.Body)  
      src/java/com/vaannila/HelloWorldAction.java (39) Propagator  
      src/java/com/vaannila/HelloWorldAction.java (34) Source (Source.Net.Http.Parameter)  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
The HelloWorldAction.java class contains a source of untrusted input on line 34 that comes from the HTTP request (i.e. “ActionForm form”). Line 39 propagates that untrusted data via the session set attribute call (i.e. session.setAttribute("message", ((HelloWorldActionForm)form).getMessage());). The application then retrieves the contents of the “message” attribute and displays it to the user without encoding on line 16 of helloWorld.jsp (i.e. &amp;lt;%= session.getAttribute("message") %&amp;gt;
).&lt;br /&gt;
&lt;br /&gt;
Simulating Model-View-Controller patterns should be viewed as a core requirement for today’s static analysis technologies. Static analysis technologies that cannot properly simulate this programming pattern will ultimately miss a lot of vulnerability classes that can and should be identified by a tool. Be aware of technologies that try to overcompensate for this weakness via overly broad assumptions and rules that ultimately produce an overwhelmingly large set of false positives.&lt;br /&gt;
&lt;br /&gt;
This article just scratches the surface of the capabilities within Sentinel Source’s static analysis engine. Method propagator rules are a critical component to pulling off the simulation of MVC as they allow us to propagate across keyed collections and maintain untrusted data propagation references across method declarations. While there are slight variations depending on the technology, this basic strategy can be applied to all MVC frameworks including Struts 1, Struts 2, and Spring MVC.&lt;br /&gt;
&lt;br /&gt;
Phew… That post was a bit long but hopefully it was technically interesting! Alright, time to get back to the normal Black Hat way of life – drinks anyone?&lt;img src="http://feeds.feedburner.com/~r/EazyEApplicationSecurity/~4/22TChlKf4C8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ericsheridan.blogspot.com/feeds/4936359581213120122/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ericsheridan.blogspot.com/2012/07/simulating-model-view-controller.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/4936359581213120122?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/4936359581213120122?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EazyEApplicationSecurity/~3/22TChlKf4C8/simulating-model-view-controller.html" title="Simulating Model View Controller" /><author><name>Eric Sheridan</name><uri>http://www.blogger.com/profile/14445794067083047945</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="29" height="32" src="http://4.bp.blogspot.com/-yyuTEN208zM/T9Y1q7noGAI/AAAAAAAAACk/y-axd6hwptw/s1600/122.thumbnail.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ericsheridan.blogspot.com/2012/07/simulating-model-view-controller.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAEQHwyeip7ImA9WhJQEks.&quot;"><id>tag:blogger.com,1999:blog-6539367476188596012.post-1184590680130437314</id><published>2012-06-11T11:07:00.004-07:00</published><updated>2012-07-25T16:58:21.292-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-25T16:58:21.292-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Static Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Application Security" /><title>WhiteHat Sentinel Source is Born!</title><content type="html">&lt;br /&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
June 1st 2012 was the official one-year mark since&amp;nbsp;&lt;a href="http://www.whitehatsec.com/" style="color: #019edf; text-decoration: none;" title="WhiteHat Security"&gt;WhiteHat Security&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://www.infraredsecurity.com/" style="color: #019edf; text-decoration: none;" title="Infrared Security"&gt;Infrared Security&lt;/a&gt;&amp;nbsp;decided to&amp;nbsp;&lt;a href="https://www.whitehatsec.com/news/11pressarchives/PR_062211infrared.html" style="color: #019edf; text-decoration: none;" title="join forces"&gt;join forces&lt;/a&gt;&amp;nbsp;to create&amp;nbsp;&lt;a href="http://ericsheridan.blogspot.com/2012/04/whitehat-sentinel-source-beta-released.html" style="color: #019edf; text-decoration: none;" title="WhiteHat Sentinel Source"&gt;WhiteHat Sentinel Source&lt;/a&gt;. After a significant amount of hard work from a lot of great people, WhiteHat Sentinel Source has gone public! I’m going to use this opportunity to write up a bit of a nostalgic blog post… while still keeping my&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Don_Draper" style="color: #019edf; text-decoration: none;" title="Don Draper"&gt;Don Draper&lt;/a&gt;&amp;nbsp;game face on of course. Having been an application security consultant for years, I’ve developed a pretty big chip on my shoulder as it relates to existing static analysis tools. I said to myself time and time again… “There has to be a better way to do this!” I put that energy to good use and infused our technology and service offering with the following core static analysis values that truly separate WhiteHat Sentinel Source from the competition:&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
&lt;strong&gt;1. Invest in Performance:&lt;/strong&gt;&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
In order to support an Agile-paced development world, performance of both scan time and verification turnaround time are critical to success. We are constantly investing in our core technology and processes to ensure we get the fastest turnaround time possible!&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
&lt;strong&gt;2. Support Modern Programming Paradigms:&lt;/strong&gt;&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
Development teams have adopted various modern programming paradigms and technologies that throw existing static analysis tools for a loop. Such paradigms and patterns include: Object-Oriented Programming, Aspect-Oriented Programming, Inversion of Control, Dependency Injection, etc. We are constantly striving to ensure that our technology has the ability to support these paradigms to accurately model modern source code!&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
&lt;strong&gt;3.&amp;nbsp;Strive for Actionable Results:&lt;/strong&gt;&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
Reviewing 100+ “findings” is a complete burden and dilutes the value of the technology. We are striving for&amp;nbsp;&lt;em&gt;quality over quantity&lt;/em&gt;throughout our core engine and RulePack development processes! “No grep-like rules” is something you’ll hear me say frequently.&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
&lt;strong&gt;4.&amp;nbsp;Provide Feedback Early:&lt;/strong&gt;&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
Performing source code scans at the end of a development initiative or even when the project distributable can be built is too late! Teams are constantly requesting feedback&amp;nbsp;&lt;em&gt;during&lt;/em&gt;&amp;nbsp;the development phases, not at the&amp;nbsp;&lt;em&gt;end&lt;/em&gt;. We are constantly striving to ensure our ability to integrate with source code repositories such that we can provide feedback early in the development phase. This coupled with our core technology performance makes daily scans a possibility!&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
&lt;strong&gt;5.&amp;nbsp;Leave Security to Security:&lt;/strong&gt;&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
Putting a large static analysis report in front of a developer expecting them to triage and fix the results is a complete waste of time and energy. We are constantly striving to ensure that we&amp;nbsp;&lt;em&gt;enable&lt;/em&gt;&amp;nbsp;developers to more effectively remediate significant vulnerabilities by performing the triage ourselves.&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
While the success of WhiteHat Sentinel Source is attributable to many individuals, there are a few folks who really stand out:&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
&lt;a href="http://www.youtube.com/user/AppsecTutorialSeries" style="color: #019edf; text-decoration: none;" title="Jerry Hoff"&gt;&lt;strong&gt;Jerry Hoff (VP, Static Analysis Division):&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
Jerry is an incredibly well-rounded application security expert and a long-time friend. Jerry played a critical role in disseminating our static analysis strategy to the rest of the team and really bootstrapped our ability to talk about static analysis in a way that actually makes sense to people. I always thought I had a great ability to make application security topics digestible until I met this guy. Very much a forward-thinking person, I refuse to have strategic discussions without his input. Jerry has been helping me push static analysis since day 1 at Infrared Security. We would have not even gotten half this far without his efforts… thank you Jerry!&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
&lt;a href="http://www.linkedin.com/pub/siamak-pazirandeh/3/450/b1" style="color: #019edf; text-decoration: none;" title="Max"&gt;&lt;strong&gt;Siamak Pazirandeh (Senior Software Architect):&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
Siamak is an incredibly talented developer, architect, and leader. The benevolent development dictator, Siamak (a.k.a. Max) was responsible for spearheading the integration of static analysis into WhiteHat’s existing DAST service model. This large effort involved designing and building a persistency model for evolving codebases optimized for the purpose of verification, scalability design, service delivery architecture, middleware integration, and overall project leadership. He’s already solved challenges with DAST, why not solve SAST too… thank you Max!&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
&lt;a href="http://www.jtmelton.com/" style="color: #019edf; text-decoration: none;" title="John Melton"&gt;&lt;strong&gt;John Melton (Senior Application Security Researcher):&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
John too is an incredibly well-rounded application security expert with serious technical depth in Java. With his astounding work ethic, attention to detail, and everlasting pursuit of perfection, John Melton has become the lead of the Sentinel Source Java engine and RulePack R&amp;amp;D. His abilities and core values around product development provide me with the confidence I need so that I can focus energies on other development initiatives. He is also one of fewer than five people in the world who can very directly and bluntly call me out on my mistakes without me feeling insulted. I think it has to do with his southern accent… thank you John!&lt;/div&gt;
&lt;div style="background-color: white; color: #333333; font-family: Arial, Helvetica, Tahoma, sans-serif; font-size: 13px; line-height: 20px; padding: 0px 0px 15px;"&gt;
With the core technology in place and our integration with the Sentinel interface, WhiteHat Sentinel Source is ready! We fully intend to shake up this market and will continue to push forward with real innovation. We are making the pledge to strive for accuracy, timeliness and usability with our solution. We look forward to other vendors stepping up to our plate… competition will only make us work harder!!&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EazyEApplicationSecurity/~4/KXLw-HiVzF8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ericsheridan.blogspot.com/feeds/1184590680130437314/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ericsheridan.blogspot.com/2012/06/whitehat-sentinel-source-is-born.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/1184590680130437314?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/1184590680130437314?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EazyEApplicationSecurity/~3/KXLw-HiVzF8/whitehat-sentinel-source-is-born.html" title="WhiteHat Sentinel Source is Born!" /><author><name>Eric Sheridan</name><uri>http://www.blogger.com/profile/14445794067083047945</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="29" height="32" src="http://4.bp.blogspot.com/-yyuTEN208zM/T9Y1q7noGAI/AAAAAAAAACk/y-axd6hwptw/s1600/122.thumbnail.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ericsheridan.blogspot.com/2012/06/whitehat-sentinel-source-is-born.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcFRng8fyp7ImA9WhVaFE4.&quot;"><id>tag:blogger.com,1999:blog-6539367476188596012.post-2998822079878406837</id><published>2012-06-05T09:05:00.000-07:00</published><updated>2012-06-11T11:06:57.677-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-11T11:06:57.677-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Static Analysis" /><title>Keyed Collections and Propagation, PI.</title><content type="html">I’ve been asked several times now about how the static code analysis engine that I’ve been driving and developing for WhiteHat Security’s upcoming Static Code Analysis solution deals with the propagation of untrusted data across keyed collections. If you’ve ever leveraged a pre-existing static analysis tool during a security code review, then you’ve most likely run into one or more “vulnerabilities” which highlight a code snippet that looks similar to the following:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;1.  public class HelloServlet extends HttpServlet {
2.  
3.       public void doGet(HttpServletRequest request, HttpServletResponse response) {
4.            HttpSession session = request.getSession(true);
5.            session.setAttribute(“name”, request.getParameter(“name”));
6.            session.setAttribute(“label”, “Eric Sheridan is a ‘Mad Scientist’”);
7.  
8.            Statement statement = createStatement();
9.            statement.execute(session.getAttribute(“label”));
10.      }
11. }
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
There are a couple of “vulnerabilities” that the old-school static analysis tools would flag with this code snippet. The first “vulnerability” is that setting a session attribute to the value of an HTTP parameter without validation is a “trust boundary violation.” The idea is that developers implicitly trust the values retrieved of the HttpSession object, thus we must take care to properly validate data placed in the collection.&lt;br /&gt;
&lt;br /&gt;
Okay, the subject matter expert in me agrees and feels this is very much a best practice – but a vulnerability!? No way. I can’t imagine presenting that as a vulnerability to the financial institutions I deal with on Wall Street. Those folks are sharp as hell and would tell me to get out of the room. While I like the best practice, this always felt like a marketing excuse as to why the tool couldn’t propagate across keyed collections… let’s take a look at that problem.&lt;br /&gt;
&lt;br /&gt;
The second “vulnerability” that would probably be flagged in this code snippet by an old school static analysis tool is line 9:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;statement.execute(session.getAttribute(“label”));
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Since the static analysis tool has no way to know if the “label” attribute in the HttpSession object is tainted, it assumes EVERY value in the HttpSession object is tainted – i.e. the entire HttpSession object is marked as a source of untrusted data. This has led to thousands of ridiculous findings over the past several years and is one of the many reasons why the application security community has a serious chip on their shoulders as it relates to static analysis.&lt;br /&gt;
&lt;br /&gt;
Having been an application security consultant for years, I’ve experienced this hell and refuse to let my users experience that whirlwind of pain again. The static code analysis engine for which I've led development supports a rule type called a “method propagator rule” that is designed to propagate untrusted data across two specific methods of an object based on various criteria, one of which is a keyed value. WhiteHat’s internal team of RulePack developers use this rule type to ensure that if we see a call to &lt;i&gt;javax.servlet.http.HttpSession.setAttribute&lt;/i&gt; and the second argument is tainted, then the call to &lt;i&gt;javax.servlet.http.HttpSession.getAttribute&lt;/i&gt; returns untrusted data if and only if the first argument to both methods (i.e. the key) is contextually the same.&lt;br /&gt;
&lt;br /&gt;
If you have experience in the static analysis space, you’ll quickly realize that this is not just simple taint propagation: we’re working with much more rich propagation models than others. The trick to pulling this off is calculating the key associated with the setAttribute and getAttribute method invocations. Our calculation produces a signature that attempts to identify a consistent pattern between the setAttribute and the corresponding getAttribute. As long as the pattern is consistent, we can propagate across the keyed collection. Take a look at the following examples to help illustrate the approach I’ve developed which is to be used in WhiteHat’s Static Code Analysis solution:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;Example #1&lt;/b&gt;: Consistent use of the string literal “eric” – SUCCESS!

&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;session.setAttribute(“eric”, request.getParameter(“test”));
statement.execute(session.getAttribute(“eric”));
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Example #2&lt;/b&gt;: Consistent use of the field Fields.NAME – SUCCESS!


&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;session.setAttribute(Fields.NAME, request.getParameter(“test”));
statement.execute(session.getAttribute(com.company.Fields.NAME));
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Example #3&lt;/b&gt;: Consistent use of the invocation getProperties().getName() – SUCCESS!

&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;session.setAttribute(getProperties().getName(), request.getParameter(“test”));
statement.execute(session.getAttribute(this.getProperties().getName()));
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
The conclusion here is that we can propagate across keyed collections such as &lt;i&gt;java.util.Map&lt;/i&gt; and &lt;i&gt;javax.servlet.http.HttpSession&lt;/i&gt; automatically without any sort of user intervention. We are finding that this strategy significantly reduces false positive rates and produces more actionable results for developers. Pretty cool, huh?

As you can infer from the title, this is only Part I of a multi-part series. Want to take this to the next level? How about propagating values in keyed collections from a Struts controller to the correct Struts JSPs? MVC anyone? … Stay Tuned!&lt;img src="http://feeds.feedburner.com/~r/EazyEApplicationSecurity/~4/dvPGpkkmSFc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ericsheridan.blogspot.com/feeds/2998822079878406837/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ericsheridan.blogspot.com/2012/06/keyed-collections-and-propagation-pi.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/2998822079878406837?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/2998822079878406837?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EazyEApplicationSecurity/~3/dvPGpkkmSFc/keyed-collections-and-propagation-pi.html" title="Keyed Collections and Propagation, PI." /><author><name>Eric Sheridan</name><uri>http://www.blogger.com/profile/14445794067083047945</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="29" height="32" src="http://4.bp.blogspot.com/-yyuTEN208zM/T9Y1q7noGAI/AAAAAAAAACk/y-axd6hwptw/s1600/122.thumbnail.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://ericsheridan.blogspot.com/2012/06/keyed-collections-and-propagation-pi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MGR3g4cCp7ImA9WhVQF0g.&quot;"><id>tag:blogger.com,1999:blog-6539367476188596012.post-2960776556201331202</id><published>2012-04-06T10:00:00.005-07:00</published><updated>2012-04-06T15:30:26.638-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-06T15:30:26.638-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Static Analysis" /><category scheme="http://www.blogger.com/atom/ns#" term="Application Security" /><title>WhiteHat Sentinel Source Beta Released!!</title><content type="html">Well, its been almost a year since &lt;a href="http://www.infraredsecurity.com/"&gt;Infrared Security&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.whitehatsec.com/"&gt;WhiteHat Security&lt;/a&gt;&amp;nbsp;decided to &lt;a href="https://www.whitehatsec.com/news/11pressarchives/PR_062211infrared.html"&gt;join forces&lt;/a&gt;&amp;nbsp;to design, implement, and deliver a static code analysis solution that actually works! After a significant amount of hard work from a lot of great folks, our solution turned Beta on April 4th, 2012… and man do I feel like a proud parent! Oh, and what’s the name of that solution you ask? WhiteHat Sentinel Source!&lt;br /&gt;
&lt;br /&gt;
WhiteHat Sentinel Source makes use of an advanced static code analysis (SCA) engine that is capable of modeling and analyzing applications developed using modern programming paradigms for security vulnerabilities with extreme accuracy, speed, and precision. Modern programming paradigms that frequently cause challenges for other technologies yet are in the powerhouse of our engine include Object Oriented Programming (more specifically – efficient traversal of multiple concrete implementations for method invocations), Aspect Oriented Programming, Dependency Injection, Inversion of Control, Dynamically Typed Languages, and more! In addition, the core SCA technology &lt;a href="http://finance.yahoo.com/news/WhiteHat-Security-Acquires-iw-3971822599.html"&gt;acquired from Infrared Security&lt;/a&gt;&amp;nbsp;makes use of the patent pending “Runtime Simulation” technology allowing for more accurate and more efficient traversal of source code. Our bleeding edge technology provides the performance and turn-around time that will allow us to be the first static analysis vendor to truly support the fast paced world of Agile development shops! Want some proof? How about a scan of 1.5 million lines of code taking 25 minutes and producing ~150 high confidence vulnerabilities!&lt;br /&gt;
&lt;br /&gt;
An equally exciting piece of WhiteHat Sentinel Source is our overall delivery model. We are the first to provide our customers with the ability to integrate a static code analysis solution within their own source code repositories in a way that allows us to provide insight into the security posture of their applications throughout the evolving development lifecycle… without the need to completely compile and or run the application! As soon as you start committing code and scheduling scans, we can start providing feedback! A really cool part of this decentralized model to static code analysis is our leveraging WhiteHat Security’s proven ability to verify vulnerabilities before they are delivered to the client. While our static code analysis is extremely accurate, we will reach a whole new level with the verification of our results by the Threat Research Center (TRC)!&lt;br /&gt;
&lt;br /&gt;
I’ve had my blinders on for over a year focused on the development of this static code analysis solution. Now is the time to take off those blinders and start sharing with the world the cool research and advancements we are making in the space of static code analysis. Over the next several months, I will be discussing those key technical and process advancements and differentiators that will really make us stand out as a visionary company!&lt;br /&gt;
&lt;br /&gt;
So if we haven’t met before, my name is &lt;a href="http://www.linkedin.com/pub/eric-sheridan/3/7ab/26"&gt;Eric Sheridan&lt;/a&gt;&amp;nbsp;– Chief Scientist of Static Code Analysis… good to meet you!&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EazyEApplicationSecurity/~4/2YL3xuFSfaA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ericsheridan.blogspot.com/feeds/2960776556201331202/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ericsheridan.blogspot.com/2012/04/whitehat-sentinel-source-beta-released.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/2960776556201331202?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/2960776556201331202?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EazyEApplicationSecurity/~3/2YL3xuFSfaA/whitehat-sentinel-source-beta-released.html" title="WhiteHat Sentinel Source Beta Released!!" /><author><name>Eric Sheridan</name><uri>http://www.blogger.com/profile/14445794067083047945</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="29" height="32" src="http://4.bp.blogspot.com/-yyuTEN208zM/T9Y1q7noGAI/AAAAAAAAACk/y-axd6hwptw/s1600/122.thumbnail.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ericsheridan.blogspot.com/2012/04/whitehat-sentinel-source-beta-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQFRnw9eSp7ImA9Wx9UE0s.&quot;"><id>tag:blogger.com,1999:blog-6539367476188596012.post-5741052864417347817</id><published>2011-02-09T15:59:00.000-08:00</published><updated>2011-02-10T10:41:57.261-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-10T10:41:57.261-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CSRFGuard" /><category scheme="http://www.blogger.com/atom/ns#" term="Application Security" /><title>Hey Django and RoR - How About Some CSRFGuard Love!?</title><content type="html">You caught me in the middle of my usual end of day routine, Django and Ruby on Rails. You dynamic scripting languages with your progressive thinking... your speed of development... your general distaste for static compilation and dependency injection... you snarky devils.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;An OWASP buddy of mine, Michael Coates, recently posted about how attackers could&amp;nbsp;&lt;a href="http://michael-coates.blogspot.com/2011/02/cross-origin-header-forging-for-csrf.html"&gt;bypass CSRF prevention controls for Ajax requests&lt;/a&gt;&amp;nbsp;within these popular frameworks&amp;nbsp;(&lt;a href="http://www.djangoproject.com/weblog/2011/feb/08/security/"&gt;here&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails"&gt;here&lt;/a&gt;).&amp;nbsp;These frameworks look for the presence of the X-Requested-With header in the HTTP request to determine if it was sent using XMLHttpRequest. If this header was sent, the frameworks would not check for the existence of the CSRF prevention token. The idea was that attackers could not use XHR nor forge the X-Requested-With header in browsers without breaking the Same Origin Policy (SOP).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Well, it turns out some security researchers were able to spoof the X-Requested-With header using "a combination of browser plugins and redirects".&amp;nbsp;&lt;a href="http://ericsheridan.blogspot.com/2010/12/how-csrfguard-protects-ajax.html"&gt;THIS IS EXACTLY THE SORT OF THING I PREDICTED WOULD HAPPEN!&lt;/a&gt;&amp;nbsp;Too many caps? Perhaps... but you probably use lower case too much. Anyway, this once again confirms my statement that the browser is a hostile&amp;nbsp;environment!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;What makes this news more interesting is that their proposed solutions do exactly what CSRFGuard 3.0 ALPHA already does!! These frameworks are now hooking calls to the JavaScript XMLHttpRequest object to ensure that a custom header name value pair containing the CSRF prevention token is sent with every Ajax request. The server-side code will only process the Ajax request if the CSRF prevention token was sent in the header or as a parameter. Mileage may vary - but thats the gist of it!&lt;br /&gt;
&lt;br /&gt;
What to see what the CSRFGuard JavaScript code looks like?? &lt;a href="https://github.com/esheri3/OWASP-CSRFGuard/blob/master/Owasp.CsrfGuard/conf/Owasp.CsrfGuard.js"&gt;Check it out here!!&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The thing that actually annoys me? No mention of CSRFGuard anywhere on the aforementioned sites! How about some freaking love over here!? If you use CSRFGuard in your applications or as a reference implementation for other environments, let me know! We at OWASP put in a lot of work to make these solutions available. Letting the author know you leveraged there work in some way is a very gratifying feeling!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;This all assumes, of course, that Django and RoR used CSRFGuard as a reference implementation. If they didn't and re-invented this strategy all on their own, then shame on you guys for not using Google and OWASP! Having to&amp;nbsp;unknowingly&amp;nbsp;re-invent the Ajax CSRF prevention strategy wheel was probably punishment enough.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So check out the&amp;nbsp;&lt;a href="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project"&gt;OWASP CSRFGuard Project&lt;/a&gt;! Version 3.0 is currently ALPHA and is in need of more testing. Please support the project!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Ok... back to my usual end of day routine.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EazyEApplicationSecurity/~4/PzQ2OqYp33w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ericsheridan.blogspot.com/feeds/5741052864417347817/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ericsheridan.blogspot.com/2011/02/hey-django-and-ror-how-about-some.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/5741052864417347817?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/5741052864417347817?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EazyEApplicationSecurity/~3/PzQ2OqYp33w/hey-django-and-ror-how-about-some.html" title="Hey Django and RoR - How About Some CSRFGuard Love!?" /><author><name>Eric Sheridan</name><uri>http://www.blogger.com/profile/14445794067083047945</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="29" height="32" src="http://4.bp.blogspot.com/-yyuTEN208zM/T9Y1q7noGAI/AAAAAAAAACk/y-axd6hwptw/s1600/122.thumbnail.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ericsheridan.blogspot.com/2011/02/hey-django-and-ror-how-about-some.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYGQ3o4fyp7ImA9Wx9UEkQ.&quot;"><id>tag:blogger.com,1999:blog-6539367476188596012.post-1475282232369981347</id><published>2010-12-23T09:30:00.000-08:00</published><updated>2011-02-09T16:02:02.437-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-09T16:02:02.437-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CSRFGuard" /><category scheme="http://www.blogger.com/atom/ns#" term="Application Security" /><title>How CSRFGuard Protects Ajax</title><content type="html">There have been several discussions on web application security mailing lists and blogs about the best strategy to protect Ajax interfaces&amp;nbsp;from Cross-Site Request Forgery (CSRF) attacks. Most of these discussions center around verification of the X-Requested-With header or&amp;nbsp;adoption and subsequent verification of the Origin header. I thought now would be a good time to talk about how OWASP CSRFGuard v3 protects&amp;nbsp;Ajax interfaces from CSRF attacks. It is important to note that CSRFGuard v3 is still in development. Now is a great opportunity to test&amp;nbsp;and provide feedback!&lt;br /&gt;
&lt;br /&gt;
Most if not all of the hard work to project Ajax is done through the &lt;a href="http://code.google.com/p/owaspcsrfguard/source/browse/trunk/main/Owasp.CsrfGuard/conf/Owasp.CsrfGuard.js?r=39"&gt;dynamic JavaScript code&lt;/a&gt;&amp;nbsp;generated by&amp;nbsp;&lt;a href="http://code.google.com/p/owaspcsrfguard/source/browse/trunk/main/Owasp.CsrfGuard/src/org/owasp/csrfguard/servlet/JavaScriptServlet.java?r=39"&gt;JavaScriptServlet&lt;/a&gt;. The first thing this script will do is determine if it was referenced from HTML that was served by the same domain or sub-domain&amp;nbsp;that hosts JavaScriptServlet. This check is intended to help mitigate the risk of JavaScript hijacking; a topic of which is reserved for a&amp;nbsp;separate blog post. If the HTML was produced by our domain, CSRFGuard's JavaScript code will dynamically hook the XMLHttpRequest object&amp;nbsp;with the goal of intercepting the "open" and "send" events. This is rather trivial in browsers that properly support the prototype&amp;nbsp;properties of JavaScript objects, such as Firefox and Chrome. Consider the following code snippet found in the "hijackStandard" function:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;XMLHttpRequest.prototype._open = XMLHttpRequest.prototype.open;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;this.url = url;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;this._open.apply(this, arguments);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;XMLHttpRequest.prototype._send = XMLHttpRequest.prototype.send;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;XMLHttpRequest.prototype.send = function(data) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if(this.onsend != null) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;this.onsend.apply(this, arguments);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;this._send.apply(this, arguments);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
This code makes use of JavaScript specific function hijacking techniques to hook the "open" and "send" methods. The original copy of both&amp;nbsp;"open" and "send" are stored in an instance variable starting with an underscore followed by the original method name; "_open" and "_send"&amp;nbsp;respectively. Whenever client-side JavaScript invokes the "open" method of XMLHttpRequest, our code will store a copy if the target URL and&amp;nbsp;invoke the original method. We make a backup of the target URL for use at a later point in our code. Whenever client-side JavaScript&amp;nbsp;invokes the "send" method of XMLHttpRequest, our code will invoke the "onsend" event. This is a custom event that is defined by CSRFGuard&amp;nbsp;and allows for the augmentation of the request before it is sent out over the wire. We will see later in the JavaScript code how this&amp;nbsp;"onsend" event handler is used to inject custom headers into the request.&lt;br /&gt;
&lt;br /&gt;
Hooking the XMLHttpRequest object in Internet Explorer, however, is not so trivial. Attempting to run the above code in Internet Explorer&amp;nbsp;would choke at the "this._open.apply" and "this._send.apply" method invocations, complaining that they do not exist. After banging my head&amp;nbsp;against the desk and taking a break to watch &lt;a href="http://www.imdb.com/title/tt0113243/"&gt;Hackers&lt;/a&gt;, I decided to do this Zero Cool style and hook&amp;nbsp;the entire XMLHttpRequest object. This required defining my own XMLHttpRequest object coupled with all corresponding constructors,&amp;nbsp;properties, methods, and events. All of this logic is encapsulated within the "hijackExplorer" function. At the end of the day, this code&amp;nbsp;hooks and exposes the same capabilities as the aforementioned code in Firefox and Chrome. Hey Microsoft JavaScript guys, please tell me&amp;nbsp;there is an easier way!?&lt;br /&gt;
&lt;br /&gt;
With the hooks in place and the "onsend" event exposed, we can inject our custom CSRFGuard logic within every XMLHttpRequest object. Our&amp;nbsp;augmentations to XMLHttpRequest should be the inclusion of two header name value pairs for all requests sent to our domain or optionally&amp;nbsp;our sub-domains. Verification of the destination URL before inclusion of the headers is intended to reduce the risk of sending the token&amp;nbsp;offsite as a result of future browser vulnerabilities as well as any existing or soon to exist leniencies in the XMLHttpRequest and Cross-Origin specifications. Consider the following code snippet from the dynamic JavaScript code:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;XMLHttpRequest.prototype.onsend = function(data) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;if(isValidUrl(this.url)) {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;this.setRequestHeader("X-Requested-With", "%X_REQUESTED_WITH%")&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;this.setRequestHeader("%TOKEN_NAME%", "%TOKEN_VALUE%");&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;};&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
If the request is sent to our domain or optionally our sub-domains, then we will inject the "X-Requested-With" header with a configurable&amp;nbsp;value coupled with a custom header name value pair. The custom header name value pair is actually the same CSRF prevention token name value&amp;nbsp;pair that is injected in forms and links. When CSRFGuard receives the request on the server, it will check for the presence of the X-Requested-With header. If supplied, CSRFGuard will then verify that the custom header name value pair exists and the token value is correct&amp;nbsp;for the current session. If no X-Requested-With header is supplied, then CSRFGuard will default to analyzing HTTP parameters for the&amp;nbsp;presence and validity of the CSRF prevention token. Note that CSRFGuard will only make use of the per-session token model as opposed to the&amp;nbsp;&lt;a href="http://www.owasp.org/index.php/CSRFGuard_3_Configuration#Unique_Token_Per_Page"&gt;per-page token model&lt;/a&gt;&amp;nbsp;for Ajax requests. I have not yet&amp;nbsp;figured out a clean solution to support per-page tokens within Ajax requests which would not either break application functionality or&amp;nbsp;increase network traffic two-fold.&lt;br /&gt;
&lt;br /&gt;
CSRFGuard only uses the X-Requested-With header to determine if the request was sent by Ajax. In theory, the X-Requested-With header&amp;nbsp;indicates use of XMLHttpRequest which is bound by the Same Origin Policy (SOP). An attacker cannot send XMLHttpRequests to our origin when&amp;nbsp;served from a separate origin. As a result, many developers simply check for the presence of this header as a defense against CSRF attacks.&amp;nbsp;Now I'm an extremely realistic, or paranoid, person - the browser is a hostile environment! In an effort to reduce my trust in the&amp;nbsp;browser's ability to properly enforce the Same Origin Policy and prevent unauthorized specification of HTTP request headers, I've decided&amp;nbsp;to include the custom header name value pair. If an attacker is able to somehow send an XMLHttpRequest across origins and or specify&amp;nbsp;arbitrary HTTP headers, then they would still need to know the victim's CSRF prevention token for the attack to fire. Now that's defense in&amp;nbsp;depth!&lt;br /&gt;
&lt;br /&gt;
There is a bit of a movement going on around adoption of the "Origin" header to help defend against CSRF attacks. However, I am&amp;nbsp;skeptical.&amp;nbsp;The wording use in various presentations and papers around this topic seem to imply that the Origin header should only be sent in POST&amp;nbsp;requests and not GET requests. Clearly, these are not the people who actually work closely with enterprise level developers and&amp;nbsp;applications. Let me make this very clear - most modern and almost all legacy web applications will gladly process the same POST request as&amp;nbsp;a GET request! Until the specification becomes more mature and address more realistic technical aspects of CSRF prevention, you should be&amp;nbsp;sticking with the &lt;a href="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project"&gt;synchronizer token pattern&lt;/a&gt; in one form or another.&lt;br /&gt;
&lt;br /&gt;
-Eric&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt; &lt;/b&gt;&lt;img src="http://feeds.feedburner.com/~r/EazyEApplicationSecurity/~4/T8GWNKAlNYo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ericsheridan.blogspot.com/feeds/1475282232369981347/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ericsheridan.blogspot.com/2010/12/how-csrfguard-protects-ajax.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/1475282232369981347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/1475282232369981347?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EazyEApplicationSecurity/~3/T8GWNKAlNYo/how-csrfguard-protects-ajax.html" title="How CSRFGuard Protects Ajax" /><author><name>Eric Sheridan</name><uri>http://www.blogger.com/profile/14445794067083047945</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="29" height="32" src="http://4.bp.blogspot.com/-yyuTEN208zM/T9Y1q7noGAI/AAAAAAAAACk/y-axd6hwptw/s1600/122.thumbnail.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://ericsheridan.blogspot.com/2010/12/how-csrfguard-protects-ajax.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8BRXg6fSp7ImA9WhJbFkU.&quot;"><id>tag:blogger.com,1999:blog-6539367476188596012.post-4105883826901641569</id><published>2010-12-15T17:05:00.000-08:00</published><updated>2012-09-26T11:24:14.615-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-26T11:24:14.615-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CSRFGuard" /><category scheme="http://www.blogger.com/atom/ns#" term="Application Security" /><title>OWASP CSRFGuard 3.0.0.336 (ALPHA) Released!</title><content type="html">It is with great pride that I announce the release of OWASP CSRFGuard 3.0.0.336 (ALPHA)! This is a development release of the v3 series&amp;nbsp;that is in need of peer review, testing, and general feedback in preparation for BETA. There are several significant new features that are&amp;nbsp;in need of testing in the enterprise development environments. Please contact me for support if you are interested in testing the latest&amp;nbsp;release. Of course, I am always open to questions, comments, or feature requests! Please check out the project home page&amp;nbsp;(&lt;a href="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project"&gt;http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project&lt;/a&gt;) and User Manual (&lt;a href="http://www.owasp.org/index.php/CSRFGuard_3_User_Manual"&gt;http://www.owasp.org/index.php/CSRFGuard_3_User_Manual&lt;/a&gt;)&amp;nbsp;for more information about how to install, configure, and deploy the OWASP CSRFGuard library.&lt;br /&gt;
&lt;br /&gt;
OWASP CSRFGuard has been completely rewritten to address the various feature requests and bug fixes submitted to me over the past couple&amp;nbsp;years. No longer will CSRFGuard be referred to as just a "reference implementation". By addressing the performance and scalability issues&amp;nbsp;plaguing older releases, OWASP CSRFGuard v3 is intended to serve as the de-facto standard prevention mechanism against CSRF attacks for&amp;nbsp;JavaEE web applications. The following is a bulleted summary of the significant changes associated with the v3 release:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;OWASP CSRFGuard is now available under the much more liberal BSD license&lt;/li&gt;
&lt;li&gt;Owasp.CsrfGuard.properties file can be loaded from classpath, web context directory, or current directory&lt;/li&gt;
&lt;li&gt;Developers can implement a custom logger to be consumed by the library&lt;/li&gt;
&lt;li&gt;Experimental support for the rotation of CSRF tokens once the previous token is expired&lt;/li&gt;
&lt;li&gt;Experimental support for creating and verifying unique CSRF tokens per page&lt;/li&gt;
&lt;li&gt;Experimental support for Ajax through the verification of headers dynamically injected by CSRFGuard JavaScript&lt;/li&gt;
&lt;li&gt;Configurable actions including Log, Invalidate, Redirect, Forward, RequestAttribute, and SessionAttribute&lt;/li&gt;
&lt;li&gt;Unprotected pages can be captured using same syntax used by the JavaEE container in web.xml&lt;/li&gt;
&lt;li&gt;Library no longer intercepts HTTP responses produced by the web application&lt;/li&gt;
&lt;li&gt;Developers can manually inject CSRF prevention tokens using the JSP tag library&lt;/li&gt;
&lt;li&gt;Developers can automate injection of CSRF prevention tokens using dynamic JavaScript DOM Manipulation&lt;/li&gt;
&lt;li&gt;Tokens are only injected into HTML elements that submit requests to the current origin (planned for XHR)&lt;/li&gt;
&lt;li&gt;JavaScript token injection can be configured to inject into links, forms, and XMLHttpRequests&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Please check out the following resources for more information regarding recent project updates:&lt;br /&gt;
&lt;br /&gt;
Project Page -&amp;nbsp;&lt;a href="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project"&gt;http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project&lt;/a&gt;&lt;br /&gt;
User Manual -&amp;nbsp;&lt;a href="http://www.owasp.org/index.php/CSRFGuard_3_User_Manual"&gt;http://www.owasp.org/index.php/CSRFGuard_3_User_Manual&lt;/a&gt;&lt;br /&gt;
Code Repository -&amp;nbsp;&lt;a href="http://code.google.com/p/owaspcsrfguard/"&gt;http://code.google.com/p/owaspcsrfguard/&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/EazyEApplicationSecurity/~4/J82wNrOlpkY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ericsheridan.blogspot.com/feeds/4105883826901641569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://ericsheridan.blogspot.com/2010/12/owasp-csrfguard-300336-alpha-released.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/4105883826901641569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6539367476188596012/posts/default/4105883826901641569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/EazyEApplicationSecurity/~3/J82wNrOlpkY/owasp-csrfguard-300336-alpha-released.html" title="OWASP CSRFGuard 3.0.0.336 (ALPHA) Released!" /><author><name>Eric Sheridan</name><uri>http://www.blogger.com/profile/14445794067083047945</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="29" height="32" src="http://4.bp.blogspot.com/-yyuTEN208zM/T9Y1q7noGAI/AAAAAAAAACk/y-axd6hwptw/s1600/122.thumbnail.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ericsheridan.blogspot.com/2010/12/owasp-csrfguard-300336-alpha-released.html</feedburner:origLink></entry></feed>
