高階腳本語言Perl測出多種overflow觸發情境
- 發布單位:TWCERT/CC
- 更新日期:2019-04-03
- 點閱次數:743
CVE編號
內文
●概述:
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( )函數接收變造之正規表示式字串,運算過程將觸發溢位,可能併發任意代碼執行後果。
影響產品
解決辦法
相關連結
- https://metacpan.org/changes/release/SHAY/perl-5.26.3
- https://rt.perl.org/Public/Bug/Display.html?id=133204
- https://rt.perl.org/Public/Bug/Display.html?id=133423
- https://rt.perl.org/Public/Bug/Display.html?id=133192
- https://rt.perl.org/Public/Bug/Display.html?id=131649
- https://securitytracker.com/id/1042181
- http://tech.mozilla.com.tw/posts/4282/address-sanitizerasan-%25E4%25B8%2580%25E5%2580%258B-cc-%25E8%
- https://hsto.org/getpro/habr/post_images/707/723/436/70772343650f66c353ad80a06d5272ca.jpg