PHP5.6被發(fā)現(xiàn)存在堆溢出漏洞
收藏該文寫在前面
這個(gè)漏洞,應(yīng)該不是Stefan Esser發(fā)現(xiàn)的,應(yīng)該是Stefan Esser看到了github上的commit才隨藤摸瓜找到了這個(gè)漏洞,看來關(guān)注更新的確是一個(gè)好習(xí)慣啊。
正文
漏洞存在于DNS TXT記錄解析這個(gè)功能之中。Stefan Esser在github的一個(gè)代碼提交中發(fā)現(xiàn)了這個(gè)漏洞。當(dāng)PHP程序運(yùn)行dns_get_record()的時(shí)候,惡意的服務(wù)器或者是進(jìn)行中間人攻擊的黑客可以利用這個(gè)漏洞執(zhí)行任意代碼。
產(chǎn)生漏洞的代碼存在于ext/standard/dns.c,可以看到代碼之中加入了針對(duì)于長度的判斷。
- while (ll < dlen) {
- n = cp[ll];
- + if ((ll + n) >= dlen) {
- + // Invalid chunk length, truncate
- + n = dlen - (ll + 1);
- + }
- memcpy(tp + ll , cp + ll + 1, n);
- add_next_index_stringl(entries, cp + ll + 1, n, 1);
- ll = ll + n + 1;
Red Hat bug也收錄了這個(gè)漏洞,但也沒有給出具體細(xì)節(jié)。