A vulnerability exists in eMule in the DecodeBase16(...) function. This function takes an hexadecimal string, its length, and a destination buffer (on the stack) as parameters. The function decodes whatever is supplied, no length check is performed on the string nor on the buffer, leading to a possible stack overflow.
Vulnerable Systems:
* eMule version 0.42d and prior
Immune Systems:
* eMule version 0.42e and newer
The vulnerable function is called 5 times in the code: 3 times in the web server (which may require authentication) and 2 times in the IRC client (not connected by default).
Proof of concept:
Bourriquet is an mIRC alias exploiting this overflow in v0.42d via the SENDLINK command, it calls MessageBoxA (to display 'Patch your eMule !') and then ExitProcess :
Developer response:
The flaw was reported to bluecow from the eMule Team on March, 30th 2004 on IRC. He stated the issue would be patched in the upcoming eMule release, available here: http://www.emule-project.net/home/perl/news.cgi?l=1&cat_id=22
An effort was also done in changing the IRC server address and kicking out vulnerable clients (nice work :)
Solution/Workaround:
The following options are available:
- Upgrade to eMule version 0.42e,
- Do not use the eMule web server and IRC client.