PHP在5.4發佈的時候, 引入了一個新的配置項:

max_input_vars

攻擊的原理很簡單, 目前很多語言, 使用hash來存儲k-v資料, 包括常用的來自使用者的POST資料, 攻擊者可以通過構造請求頭, 並伴隨POST大量的特殊的”k”值(根據每個語言的Hash演算法不同而定制), 使得語言底層保存POST資料的Hash表因為”衝突”(碰撞)而退化成鏈表.這個預防的攻擊, 就是”通過調用Hash衝突實現各種語言的拒絕服務攻擊漏洞”(multiple implementations denial-of-service via hash algorithm collision).

hash

這樣一來, 如果資料量足夠大, 那麼就可以使得語言在計算, 查找, 插入的時候, 造成大量的CPU佔用, 從而實現拒絕服務攻擊.

PHP5.4是通過增加一個限制來儘量避免被此類攻擊影響:

  1. - max_input_vars – specifies how many GET/POST/COOKIE input variables may be
  2. accepted. default value 1000.

目前已知的受影響的語言以及版本有::

Java, 所有版本

JRuby <= 1.6.5

PHP <= 5.3.8, <= 5.4.0RC3

Python, 所有版本

Rubinius, 所有版本

Ruby <= 1.8.7-p356

Apache Geronimo, 所有版本

Apache Tomcat <= 5.5.34, <= 6.0.34, <= 7.0.22

Oracle Glassfish <= 3.1.1

Jetty, 所有版本

Plone, 所有版本

Rack, 所有版本

V8 JavaScript Engine, 所有版本

不受此影響的語言或者修復版本的語言有::

PHP >= 5.3.9, >= 5.4.0RC4

JRuby >= 1.6.5.1

Ruby >= 1.8.7-p357, 1.9.x

Apache Tomcat >= 5.5.35, >= 6.0.35, >= 7.0.23

Oracle Glassfish, N/A (Oracle reports that the issue is fixed in the main codeline and scheduled for a future CPU)

目前PHP官方已經發佈5.2的補丁:

補丁使用方法:

1. cd 到 php src,運行: patch -p1 < php-5.2.*-max-input-vars.patch

2.重新編譯php。

PHP 5.3.9和PHP 5.4.0已經包含了針對此漏洞的補丁,但由於兩個版本目前仍然在RC狀態,無法用於生產伺服器升級。

如果您不想更新到一個RC版本,那麼也可以很簡單的修改上面這個補丁,應用到 5.3 的相應版本上。

微軟也針對這一漏洞發佈了緊急更新補丁,自己去找就好。

CVECVE-2011-4885 (PHP), CVE-2011-4461 (Jetty), CVE-2011-4838 (JRuby), CVE-2011-4462 (Plone), CVE-2011-4815 (Ruby)

 

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料