Big problems with ASLR in Ice Cream Sandwich
blog.duosecurity.com
blog.duosecurity.com
In the grand scheme of things, though, this isn't as bad as it seems, since the vast majority of Android applications run in the Dalvik JVM. Hence the amount of code that is subject to weaknesses that could be exploited by the attacker to cause a jump into the non-randomized dynamic loader (for example) are much smaller.
Of course, there could still be bugs in native code applications, libraries, and system executables, so the ALSR should definitely be improved. Again, fortunately, this should be relatively easy to do.
The WebView as attack target is a different story, though.
Speaking of which, spender's recent blog post gives a good overview of some of the grsec/PaX mitigations that would hamper the exploitation of the /proc/pid/mem vuln:
Looking at GRKERNSEC_BRUTE, however, it would not affect this exploit: it is designed to penalize the parent for forking exploitable children (so as, for example, to keep new copies of Apache from coming into existence rapidly enough for them to be remotely exploited); however, here we are assumed to have control of the parent, so we can just add a layer of indirection, never reusing direct parents.
[1] http://xorl.wordpress.com/2010/11/09/grkernsec_brute-exploit...
OTOH, that means it's a back door for use with those nasty handset manufacturers that still ship phones that can't be unlocked. :-)
I was under the impression that if you have two or more instances of the same .so/.dll/.dylibs in different processes, and they end up using different virtual addresses then they can't share the same code page. Maybe I'm behind times...
Dug's FUBAR comment was just an attempt cram in as many acronyms as possible...of course the situation is improvable. ;-)
Still at CORE these days?
By design, dylibs (i.e. shared dynamic libraries) are allowed to be loaded at different virtual addresses and still have their text/ro sections shared.
Because dylibs are always compiled with -fPIC, they do not have any dependence on their load addresses (branches are pc-relative, data loads go through the GOT, etc). This allows the dyld to map the physical address(es) of a dylib's text/ro section(s) into virtual address spaces of multiple processes with very little relocation.