Kohana < 3.3.0 任意代码执行漏洞

不得不说Kohna 官方对安全漏洞反应迟钝。
这个漏洞在上次 3.2.1 发布之前就已经有人报告了。
见:
http://dev.kohanaframework.org/issues/4593

http://dev.kohanaframework.org/issues/4591
不过官方对此的处理并不是马上修复,而是把修复任务放到了下一个版本(3.3.0)中。

3.3.0 于 October 23 发布。
这次终于把这个漏洞给补上了(见 https://github.com/kohana/core/commit/e2bba180ad3923700a134ce358252a0e3238e3f1

漏洞的产生缘于 PCRE 的e (PREG_REPLACE_EVAL)修饰符。
此修饰符仅对preg_replace()生效
Note:
Only preg_replace() uses this modifier; it is ignored by other PCRE functions.

而Kohana core 中恰巧就用到了preg_replace和e修饰符。
在classes/kohana/url.php中,一句:

1
$path = preg_replace('~([^/]+)~e', 'rawurlencode("$1")', $path);

而$path变量是取自url的,因此,这个漏洞可谓非常严重。Kohana中有了这一句代码的存在,任何人都可以构造特殊的url执行任何php代码。

测试:
$_SERVER['KOHANA_ENV'] = 'PRODUCTION';

访问:

1
http://my-domain.com/中文(${@file_put_contents(test.txt,hello)})

php会报错:

1
ErrorException [ 8 ]: Undefined variable: 3 ~ APPPATH\classes\kohana\url.php(115) : regexp code [ 1 ]

但是代码实际上是会执行的。
查看下,在根目录下成功生成了test.txt

不过我网站的代码我在很久以前就修复了。

更多
2 Responses Post a comment
  1. 茶话汇

    怎么感觉你博客的速度比我的快很多啊,虽然都是衡天的。。。汗

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS