<div dir="ltr"><div class="gmail_extra">Hi Stephen,</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_quote">On Fri, Nov 14, 2014 at 5:39 AM, Stephen Checkoway <span dir="ltr"><<a href="mailto:s@pahtak.org" target="_blank">s@pahtak.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi Volodymyr,<br>
<span class=""><br>
On Nov 4, 2014, at 2:14 PM, Volodymyr Kuznetsov <<a href="mailto:vova.kuznetsov@epfl.ch">vova.kuznetsov@epfl.ch</a>> wrote:<br>
<br>
> With such protection in place, overwriting the return addresses or pivoting the stack would become nearly impossible in practice, along with many ROP attacks that are based on it.<br>
<br>
</span>I agree that overwriting the return address becomes more difficult, but stack pivoting is still doable. On x86, overwriting a function pointer to point to<br>
<br>
        xchg    eax, esp<br>
        ret<br>
<br>
which is just two bytes, 0x94 0xc3, will pivot the stack to eax and start a return-oriented program when the function pointer is called.<br></blockquote><div><br></div><div>Yes, good point indeed! Protecting against this would require preventing an attacker from arbitrary overwriting function pointers, which will be the topic of our next set of patches ;)</div><div><br></div><div>- Volodymyr Kuznetsov</div></div></div></div>