Stefan Esser wrote:
> Hi,
> 
> i heard several people looking at the gobbles exploit and believing it
> can only be fake:
> 
> here is my little explanation how bsd memcpy can be exploited:
> 
> first a snipset of the bsd memcpy code:
> 
> ...
> 1:
>       addl    %ecx,%edi       /* copy backwards. */
>       addl    %ecx,%esi
>       std
> [1]   andl    $3,%ecx         /* any fractional bytes? */
>       decl    %edi
>       decl    %esi
>       rep
>       movsb
> [X]   movl    20(%esp),%ecx   /* copy remainder by words */
>       shrl    $2,%ecx
>       subl    $3,%esi
>       subl    $3,%edi
>       rep
>       movsl
> ...
> 
> In Apache we trigger exactly this piece of code: bsd thinks the two
> buffers are overlapping and so it wants to copy backward.
> The problem is that you are able to overwrite the call to memcpy
> including the supplied paramters (dst, src, length). With up to
> 3 bytes ([1]) depending on alignment. if you align everything perfectly
> you can set the 3 high bytes of length to zero and so change how many
> dwords memcpy tries to copy in our case 0x000000?? 
> This is only possible because the code reads the length param again from
> stack [X]... This way you can easily survive the call and overwrite 
> the saved instruction pointer before the memcpy call...

I should just point out the slight error in this analysis - in fact, the 
exploit only overwrites two bytes of the length (incidentally, the 
length is also constrained to be its own stack offset, leaving no room 
for manouver at all) - so the length is initially -146 (ffffff6e), and 
after overwriting becomes 0000ff6e, copying just under 64k onto the 
stack, which is plenty for a standard stack-based shellcode exploit.

I've also checked, and FreeBSD is indeed vulnerable in the same way, but 
the glibc implementation I have seen of memcpy is not, so if Linux is 
vulnerable, its by another route. I haven't looked at Solaris.

Cheers,

Ben.

-- 
http://www.apache-ssl.org/ben.html       http://www.thebunker.net/

"There is no limit to what a man can do or how far he can go if he
doesn't mind who gets the credit." - Robert Woodruff

Reply via email to