There is an issue leading to a buffer overflow of
a slab allocated buffer in the VFAT file system code. The issue
manifests when converting UTF8 characters to UTF16 inside the
"utf8s_to_utf16s" function. Reaching this code requires writing to a
VFAT partition that has been mounted with the "utf8" option. Ubuntu
10.04 mounts USB sticks with this option by default. Most Android
devices mount eMMC/SD cards/etc with this option.
The issue affects kernels prior to 3.2. Many Android devices remain
affected today.
I'm not entirely sure when the issue was introduced at this moment. It
appears to have been introduced here:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=74675a58507e769beee7d949dbed788af3c4139d
The issue was fixed here:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=0720a06a7518c9d0c0125bd5d1f3b6264c55c3dd
The issue was partially disclosed here (this spurred my investigation):
http://www.exploit-db.com/exploits/23248/
Props to G13 for finding it. It's pretty disappointing that
Google/Android security teams (and of course Linux maintainers) didn't
responsibly disclose the issue so other Linux kernel packagers could
package a fix.
If anyone wishes to contact me with questions or concerns,
feel free.
Joshua J. Drake jduck
oss-sec-vfat@qoop.org
//The information contained within this publication is
//supplied "as-is"with no warranties or guarantees of fitness
//of use or otherwise. Bot24, Inc nor Bradley Sean Susser accepts
//responsibility for any damage caused by the use or misuse of
//this information