Winamp поддерживает проигрывание b4s-файлов, которые составляются
при помощи xml. Синтаксис таков:
<?xml version="1.0" encoding='UTF-8' standalone="yes"?>
<WinampXML>
<!-- Generated by: Nullsoft Winamp3 version 3.0 -->
<playlist num_entries="[кол-во записей]" label="[название_list'a]">
<entry Playstring="file:[путь_к_звуковому_файлу]">
<Name>[названи_песни]</Name>
<Length>[величина_в_байтах]</Lengt>
</entry>
</playlist>
</WinampXML>
Переполнение буфера происходит при обработке чрезмерно длинного названия листа (4-ая строчка). Причём, есть некоторые нюансы:
При получении 16 398 байт переполнение происходит только при ВЫХОДЕ из WinAmp'a. 4-мя байтами затирается eax и retaddr (причём ret
находится в регистре eax). Если же название листа ещё увеличить на ~100b, переполнение произойдёт сразу же при запуске. 12-ю байтами перезапишутся ecx, esi и retaddr (указатель стэка в момент "падения" 0x1007C340). Хотя, имхо, что касается
адресного пространства, данные могут разниться в зависимости от билда WinAmp'a и вообще операционной системы (это
маловероятно). Так или иначе, составить b4s'ку, протроянивающую систему, не составляет никакого труда.
Уязвимость обнаружена D4rkGr3y из Damage Hacking Group.