libspf2 DNS TXT记录处理堆溢出漏洞

- AV AC AU C I A
发布: 2025-04-13
修订: 2025-04-13

BUGTRAQ ID: 31881 CVE(CAN) ID: CVE-2008-2469 libspf2是用于实现Sender Policy Framework的库,允许邮件系统检查SPF记录并确认邮件已经过域名授权。 libspf2库的Spf_dns_resolv.c文件中的SPF_dns_resolv_lookup函数存在堆溢出漏洞,如果用户解析了带有特制长度字段的超长DNS TXT记录的话,就可能触发这个溢出,导致执行任意代码。 DNS TXT记录中包含有两个长度字段,首先是记录的整体长度字段,其次是范围为0到255的子长度字段,用于描述记录中特定字符串的长度。这两个值之间没有任何联系,DNS服务器也没有强制任何过滤检查。在接收到DNS TXT记录时,外部的记录长度值是所要分配的内存数量,但拷贝的是内部的长度,这就可能会触发溢出。 以下是LibSPF2中的漏洞代码段: Spf_dns_resolv.c#SPF_dns_resolv_lookup(): case ns_t_txt: if ( rdlen > 1 ) { u_char *src, *dst; size_t len; if ( SPF_dns_rr_buf_realloc( spfrr, cnt, rdlen ) != SPF_E_SUCCESS ) // allocate rdlen bytes at spf->rr[cn]->txt return spfrr; dst = spfrr->rr[cnt]->txt; len = 0; src = (u_char *)rdata; while ( rdlen > 0 ) { len = *src; // get a second length from the attacker controlled datastream — some value from 0 to 255, unbound to rdlen src++; memcpy( dst, src, len ); // copy that second length to rdlen byte buffer. dst += len; src += len; rdlen -= len + 1; } *dst = ‘\0′; Wayne Schlitt...

0%
暂无可用Exp或PoC
当前有0条受影响产品信息