Msn Icon DOS on 2.6.5
Sadrul Habib Chowdhury
sadrul at pidgin.im
Wed Feb 17 08:19:48 EST 2010
* Pierre Noguès had this to say on [17 Feb 2010, 14:05:43 +0100]:
> OK I said shit i'll send you exploit to reproduce the bug and a deeper backtrack.
That'd be great. Thanks.
PS: Please reply to the list.
Sadrul
> Pierre Noguès a écrit :
>> Yes maybe tokens isn't null but *tokens or tokens[1] should be NULL or
>> not initialized.
>>
>> http://library.gnome.org/devel/glib/unstable/glib-String-Utility-Functions.html#g-strsplit
>>
>>
>> Returns :
>> a newly-allocated NULL-terminated array of strings. Use
>> g_strfreev() to free it.
>>
>> Regarding the help if we don't have '\t', tokens[0] or tokens[1] should
>> be NULL, try something like that:
>> printf("tokens = %p\n", *tokens);
>> printf("tokens = %p\n", tokens[1]);
>>
>> Sadrul Habib Chowdhury a écrit :
>>> * Pierre Noguès had this to say on [17 Feb 2010, 13:23:24 +0100]:
>>>> Hello,
>>>>
>>>> I discovered a low severity vulnerability which can lead to a
>>>> remote dos of pidgin. This vulnerability can't be exploited to lead
>>>> to a remote code execution. Tested on 2.6.5.
>>>>
>>>> The vulnerability is located in slp.c here :
>>>>
>>>> msn_emoticon_msg(MsnCmdProc *cmdproc, MsnMessage *msg){
>>>>
>>>> //...
>>>> tokens = g_strsplit(body_str, "\t", 10);
>>>> //tokens can be null !
>>>>
>>>> //...
>>>> if (tokens[tok] == NULL || tokens[tok + 1] == NULL) {
>>>> //ref NULL pointer => CRASH
>>>>
>>>> When msg doesn't contain '\t' char in his body, g_strsplit return
>>>> NULL,
>>>
>>> g_strsplit doesn't seem to return NULL in such cases, e.g. try the
>>> following code:
>>>
>>> #include <glib.h>
>>>
>>> int main()
>>> {
>>> const char *string = "0123456789";
>>> char **tokens = g_strsplit(string, "\t", 10);
>>> printf("tokens = %p\n", tokens);
>>> g_strfreev(tokens);
>>> return 0;
>>> }
>>>
>>> What version of glib are you using?
>>>
>>>> this NULL pointer is referenced in READ ACCESS in the for loop.
>>>> That's why it crash.
>>>>
>>>> Backtrace:
>>>> #0 0x00007f54b6de3473 in msn_emoticon_msg () from
>>>> /usr/lib/purple-2/libmsn.so
>>>> #1 0x00007f54b6dcbb32 in msn_cmdproc_process_msg () from
>>>> /usr/lib/purple-2/libmsn.so
>>>> #2 0x00007f54b6de80e4 in ?? () from /usr/lib/purple-2/libmsn.so
>>>> #3 0x00007f54b6de1e7c in msn_servconn_process_data () from
>>>> /usr/lib/purple-2/libmsn.so
>>>> #4 0x00007f54b6de2022 in ?? () from /usr/lib/purple-2/libmsn.so
>>>> #5 0x000000000046661e in ?? ()
>>>> #6 0x00007f54cae7820a in g_main_context_dispatch () from
>>>> /usr/lib/libglib-2.0.so.0
>>>> #7 0x00007f54cae7b8e0 in ?? () from /usr/lib/libglib-2.0.so.0
>>>> #8 0x00007f54cae7bdad in g_main_loop_run () from
>>>> /usr/lib/libglib-2.0.so.0
>>>> #9 0x00007f54cc02abc7 in gtk_main () from
>>>> /usr/lib/libgtk-x11-2.0.so.0
>>>> #10 0x000000000047dc83 in main ()
>>>>
>>>
>>> Perhaps something else is causing the crash? A more verbose backtrace
>>> could be useful.
>>>
>>>> Solution:
>>>> Check if tokens isn't null before entering in the loop.
>>>>
>>>> Reproduce the bug:
>>>> Just send a mime message with content-type "text/x-mms-emoticon"
>>>> and no icon. It will crash.
>>>
>>> Do you have any test program/code/patch that can be used to recreate
>>> the crash?
>>>
>>> Cheers,
>>> Sadrul
>>>
>>
>
> --
> Pierre Noguès - Meta Security
> Consultant en sécurité
>
> http://meta-security.com
> 40 rue Albéric de Calonne - 80 000 Amiens
More information about the security
mailing list