秒杀科技公司多款产品的RCE漏洞破绽bug揭秘
框架的网安性曾经愈来愈惹起网安职员的存眷,比方Apache Struts案例中因为框架内繁多漏洞破绽bug所激发的网安打击想必人人早有耳闻。假如从产物供应商的角度来斟酌这类危险的话,咱们也能找到异常类似的情况。在本文中,我将向您展现若安在分歧的趋向科技产物长途履行代码,因为这些分歧产物都利用了雷同的代码库。
一个漏洞破绽bug通杀所有产物——趋向科技产物的Widget
大多数趋向科技的产物都为管理员网页供给了响应的widget。固然焦点体系是经由过程Java/.NET编写的,然则这个widget机制倒是用PHP完成的。这就意味着,每当利用widget时,响应的产物中必需植入PHP解释器。这对付攻击者来讲,的确就是一个完美的情况:因为各类分歧的产物中含有雷同的代码库,以是一旦从中发明了漏洞破绽bug,就能够或许顺遂搞定所有的产物。
因为下面提到的缘故原由,我对趋向科技OfficeScan产物的widget体系停止了一次代码考核。此次审计的成果一方面是异常风趣的,同时对我来讲也是可怜的,因为固然找到了6个分歧的漏洞破绽bug,但只要2个是0day。
在深刻懂得该漏洞破绽bug以前,我想先分享一下这个widget库的事情道理。
从头开端
这个widget框架有一个署理机制。简而言之,咱们有一个proxy_controller.php端点,它会接管用户供给的参数,而后依据用户的输出来挪用相干的类。
widget的范例紧张有两种:用户天生的widget和默许的widget。以下源代码取自proxy_controller.php文件。
if(!isset($g_GetPost)){
$g_GetPost = array_merge($_GET,$_POST);
}else{
$g_GetPost = array_merge($g_GetPost,$_GET,$_POST);
}
// ... CODE OMIT ...
$server_module = $g_GetPost['module'];
$isDirectoryTraversal = WF::getSecurityFactory()->getSanitize()->isDirectoryTraversal($server_module);
if(true === $isDirectoryTraversal){
mydebug_log("Bad guy come in!!");
proxy_error(WF_PROXY_ERR_INIT_INVALID_MODULE, WF_PROXY_ERR_INIT_INVALID_MODULE_MSG);
}
$intUserGeneratedInfoOfWidget = (array_key_exists('userGenerated', $g_GetPost)) ? $g_GetPost['userGenerated'] : 0;
if($intUserGeneratedInfoOfWidget == 1){
$strProxyDir = USER_GENERATED_PROXY_DIR;
}else{
$strProxyDir = PROXY_DIR;
}
$myproxy_file = $strProxyDir . "/" . $server_module . "/Proxy.php";
//null byte injection prevents
if( is_string( $myproxy_file ) ) {
$myproxy_file = str_replace( "