按 Enter 到主內容區
:::

TWCERT-電子報

:::

高階腳本語言Perl測出多種overflow觸發情境

發布日期:
字型大小:
  • 發布單位:TWCERT/CC
  • 更新日期:2019-04-03
  • 點閱次數:743
高階腳本語言Perl測出多種overflow觸發情境

CVE編號

CVE-2018-18311, CVE-2018-18312, CVE-2018-18313, CVE-2018-18314

內文

●概述:
Perl是高階、通用、直譯、動態的腳本程式語言,師法眾多語言特性(C、sed、awk、shell),廣泛應用於各領域,經分析數個原始程式,察覺因輸入值安全過濾欠周,易肇生segmentation fault,如Perl_my_setenv( )函數若遭遇本機輸入鉅量字串,將觸發整數溢位而破壞記憶體配置精確性;而遠端攻擊者經由變造之正規表示式語法,可衍生heap-buffer-overflow,迫使S_grok_bslash_N( )將機敏資訊寫入stderr位置,可越界讀取而獲悉重要設計關鍵,另惡意正規表示式亦可導致S_regatom( )函數溢位後,發動RCE攻擊,新版Perl已釋出並修補缺陷。
●編註:
(1)整數溢位
根據util.c程式內Perl_my_setenv( )函數部分內容:
void Perl_my_setenv(pTHX_ const char *nam, const char *val) {...
2166: const int nlen = strlen(nam);
...
2171: vlen = strlen(val);
2172: new_env = (char*)safesysmalloc((nlen + vlen + 2) * sizeof(char));
由上可知nam、val二個參數乃人為輸入,而nlen、vlen整數型態(佔32bit),如本機攻擊者刻意控制nam、val成為鉅量字串,nlen、vlen兩者加總可能直接溢位,干擾到new_env運算結果,導致所規劃記憶體配置區不足,衍生後續越界寫入例外狀況。
(2) Heap緩衝區溢位
(2-1)越界讀取
以符合正規表示式的語法,編輯特定惡意資料,將影響原始程式regcomp.c內函數S_grok_bslash_N( ),引發heap-buffer-overflow後,可能在stderr(標準錯誤輸出)相關記憶體區段,藉由Address-Sanitizer(ASAN)之類的記憶體偵錯工具,能觀察到不該公開的source code內容,例如一些機密變數名稱,恐成為進階入侵之關鍵訊息。
(2-2)越界寫入
同樣是regcomp.c,其中S_regatom( )函數接收變造之正規表示式字串,運算過程將觸發溢位,可能併發任意代碼執行後果。

影響產品

perl 5.29.1、5.28.0、5.26.2.以前版本

解決辦法

下載perl 5.28.1,參考https://www.perl.org/get.html
回頁首