查看文章
 
再谈漏洞
2011-09-30 21:14

很高兴阿里的文学青年之一的大风又开始写blog了,写blog分享技术的都是好青年。文学青年就是有激情,饭都可以不吃忙着写blog一下就是n篇,其中《关于PHP的is_a()函数执行代码的问题》《谁来为漏洞买单?》都是与php的is_a()有关的。“对于is_a()调用__autoload()导致的安全问题”是不是php的is_a()的漏洞?在大风文章里可以看得出来,他是认为是php的漏洞,只是说得比较“和谐”[不知道我有没有理解错 :)]。

但是在微薄及hi群里讨论及博客留言来看,还有很大一部分人是为php官方喊冤的!其实我认为php官方并没有被冤枉,他们是有“漏洞"的!

在我前不久发布的ppt《WEB代码审计与渗透测试》里有一句话:"什么样的函数导致什么样的漏洞!"这个针对与应用层来说,“漏洞”与”函数的功能”是不分的。

从功能角度来说,先看看php手册关于is_a()的描叙:

is_a

(PHP 4 >= 4.2.0, PHP 5)

is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE

而在早期的php的版本里并且没有提到会调用__autoload(),但是到了PHP 5.3.7里的is_a()突然可以自动调用__autoload(),但是手册里并没有说明!!! 这个和药物的不良反应有点类似,就是说给你带来治疗效果的同时也带来的一个不良副作用,并且这个不良反应并没有在说明说上标明!

可能有人说自动调用__autoload()不是“副作用”,是有计划有意识的功能升级!对于这个我可以举一个很好的列子:那就是“伟哥”的诞生[具体科普自行搜索:)]

另外很多人把exec(),system()等函数抬出来了,从上面的角度去看的话,你就可以看到区别了! exec(),system()这些的功能本来就是他们存在的理由,程序员们都知道!但是is_a()的这个问题,在漏洞公告发布前,估计也没啥子人知道!

所以php官方是有责任的,是有漏洞的!如果是正常功能升级,你应该及时准确的说明[特别是在程序员宝典:php手册里标明!],如果这个不是函数设计的“功能”,那就可以说这个就是is_a()的漏洞了。不管怎么样,两者结果都是php官方的“漏洞”。

在hi群讨论这个问题的时候,提到了一个php本身无法改变的问题,那就是php的“SB化”带来的安全风险.php的函数丰富、复杂、开发门槛低是php的特点也是他生存发展之道,这个就是说"SB化",php的发展其中一个重要的部分就是把以前app实现的一些功能,php自己本身去实现一个函数,然后app开发可以直接调用。 但是在这个"SB化"的过程里,在他对本身函数“封装”的过程里,缺少了对应的安全防御体系!这个也就是为什么php会出现那么多独特的漏洞,或者容易导致安全风险的“特性”!

最后还说说防御的问题,对于web应用程序的开发的安全问题我一直提创“《web app安全的独立性》”,所以我们开发的时候不要依靠php官方来解决这个问题!对于"is_a()函数执行代码",根据《那“一刹那”的防御》里提到的,最终导致导致代码执行的是__autoload()函数里的包含函数导致的问题,所以说is_a()甚至包括__autoload()都只属于变量提交的过程的一部分,所以防御还是在最终导致代码执行的包含函数里面!

对于《谁来为漏洞买单?》里提到了“如果PHP在源头修补了这个问题,才真正是善莫大焉。”这样的美好愿望!我有也这么认为,这个符合“最短距离,解决问题 ,才是王道。”[另外对于上面提到的《那“一刹那”的防御》的思路也是属于这个“最短距离”的 :)]。不过一切都是美好的愿望,如果这个世界真的有一个唯一的“上帝”,那么这个唯一的“上帝”一句话,就可以让从源头搞定了。记得某牛人说过MSSQL注射应该是MS的漏洞,可惜MS不这么认为,而且这个唯一的上帝也没有出来说句话~~~~

http://seclists.org/fulldisclosure/2011/Nov/43

 _______________________________________________________________________

 Mandriva Linux Security Advisory                         MDVSA-2011:166
 http://www.mandriva.com/security/
 _______________________________________________________________________

 Package : php
 Date    : November 3, 2011
 Affected: 2010.1, 2011.
 _______________________________________________________________________

 Problem Description:

 A vulnerability has been identified and fixed in php:
 
 The is_a function in PHP 5.3.7 and 5.3.8 triggers a call to the
 __autoload function, which makes it easier for remote attackers to
 execute arbitrary code by providing a crafted URL and leveraging
 potentially unsafe behavior in certain PEAR packages and custom
 autoloaders (CVE-2011-3379).
 
 The php-ini-5.3.8 package was missing with the MDVSA-2011:165 advisory
 and is now being provided, the php-timezonedb package was upgraded
 to the latest version (2011.14) for 2011.
 
 The updated packages have been patched to correct this issue.
 ___________________________________________________________________


类别:默认分类||添加到搜藏 |分享到i贴吧|浏览(1381)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu