PHP < 5.2.0 Buffer Overflows in htmlspecialchars() and htmlentities()
2006-11-07 12:27
htmlspecialchars() 及 htmlentities() ,
是 php web programmer 常用的 function
用來將某些網頁特殊字元, 轉換成相對應的 HTML entities ,
例如 < = < 、 > = > 、 ” = " ... 等等,
同時它們也常用來防止網頁產生 XSS 漏洞.
幾日前,
國外的 Hardened-PHP Project 發現這兩個 function 存在 heap overflow 的漏洞 ,
可能導致遠端惡意使用者執行任意指令.
不過這只有在特定情況下 - 當使用 UTF-8 charset 時, 才會發生 .
原因在於 htmlentities 的實作 , PHP source code 的 ext/standard/html.c 中
PHPAPI char *php_escape_html_entities( .... )
{
....
....
if (len + 9 > maxlen)
replaced = erealloc (replaced, maxlen += 128);
...
...
}
當轉換用的 buffer , 再塞 10 bytes 資料會到底的話, 就會 realloc 多 128 bytes .
這本來也沒什麼問題, 因為一般的 HTML entities 都在 8 個字元以下 ,
但有個例外 - Greek character set 會超過 !
所以當惡意的攻擊者塞入特定的字元 ( Greek character set、或來自 0×00, 0xc0-0xfd ) 後,
可能導致 server 端在 realloc() 時發生 heap overflow ,
而執行到其中的惡意代碼 ( 加檔案、開後門、塞木馬、... 等等都有可能 )
解決方式 -
目前 PHP 官方放出的最新版 5.2.0 已經修正了這個問題 ,
而也只有這個版本的 PHP 不受影響 , 其他 < 5.2.0 的通通有可能爆 ...
( 以下為個人看法, 未經實驗, 請自行承擔後果 :> )
真的不想冒然衝上 5.2 的話 , 也可以將之前的版本手動 patch 一遍,
將 5.2.0 裡 ext/standard/html.c 中的 php_escape_html_entities( ) 整個搬過去舊版的
再 recompile 一隻起來 , 應該就沒事了 :p
相關報導 -
http://www.securitytracker.com/alerts/2006/Nov/1017152.html
http://www.hardened-php.net/advisory_132006.138.html
95年全國大專院校資安技能競賽Wordpress 2.0.5 Remote File Include Vulnerability
.Vulnerability 類別的文章 :
Linux Kernel >= 2.6.13 && < 2.6.17.4 sys_prctl() Local Root ExploitWordpress 2.0.5 Remote File Include Vulnerability
2 則留言 新增留言
1. ajneok | November 7th, 2006 at 22:34
orz...
我的最愛→AJNeoK→Black→Outian's 芭樂閣 ...
擺對地方了...
2. OuTian | November 7th, 2006 at 23:44
喂喂 樓上的不要亂歸類呀
明明是阿都仔發現的
我只是分析一下, 提醒大家咩 :>
新增留言
訂閱這則留言的 RSS Feed