首页 -> 安全研究

安全研究

安全漏洞
RaXnet Cacti graph_image.php远程变形命令执行漏洞

发布日期:2005-07-04
更新日期:2005-07-04

受影响系统:
Raxnet Cacti <= 0.8.6e
不受影响系统:
Raxnet Cacti 0.8.6f
描述:
BUGTRAQ  ID: 14129

Cacti是一款轮循数据库(RRD)工具,可帮助从数据库信息创建图形,有多个Linux版本。

Cacti实现上存在输入验证漏洞,远程攻击者可能利用此漏洞在服务器上执行任意命令。

Cacti的graph_image.php代码中:

  /* ================= input validation ================= */
   input_validate_input_number(get_request_var("graph_start"));
   input_validate_input_number(get_request_var("graph_end"));
   input_validate_input_number(get_request_var("graph_height"));
   input_validate_input_number(get_request_var("graph_width"));
   input_validate_input_number(get_request_var("local_graph_id"));
   input_validate_input_number(get_request_var("rra_id"));
   /* ==================================================== */
  
   ...
  
   /* override: graph start time (unix time) */
   if (!empty($_GET["graph_start"])) {
     $graph_data_array["graph_start"] = $_GET["graph_start"];
   }

   ...
  
   print rrdtool_function_graph($_GET["local_graph_id"],
                             $_GET["rra_id"], $graph_data_array);    

这段代码看起来是安全的,因为它在将“graph_*”请求参数传送给rrdtool之前要求这些参数是数字。

但在get_request_var()实现中:
  
   function get_request_var($name, $default = "")
   {
     if (isset($_REQUEST[$name]))
     {
       return $_REQUEST[$name];
     } else
     {
       return $default;
     }
   }
  
这意味着实际上是对$_REQUEST["graph_start"]而不是$_GET["graph_start"]的内容应用了过滤。$_REQUEST是$_GET,$_POST和$_COOKIE数组合并的版本,因此相同名称的数组key会在$_REQUEST中相互覆盖。

在PHP的默认配置中合并顺序是GPC,这意味着如果请求中同时包含$_GET["graph_start"]和$_POST["graph_start"]的话,仅有张贴的值会在$_REQUEST数组中结束,因此攻击者可以通过在URL中提供攻击字符串以及通过POST或COOKIE提供特制字符串注入shell命令。

<*来源:Stefan Esser (s.esser@ematters.de
        Alberto Trivero (trivero@jumpy.it
  
  链接:http://marc.theaimsgroup.com/?l=bugtraq&m=112033752807353&w=2
*>

建议:
厂商补丁:

Raxnet
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载0.8.6f版本:

http://www.cacti.net/download_cacti.php

浏览次数:5076
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障