運用ネタ(FreeBSD) phpのバージョンアップに失敗する件

Pocket

php5 を portupgrade でバージョンアップしようとすると転ける件への対処。

php-5.3.7 には重篤なセキュリティホールがあるらしく、近日リリース予定の 5.3.8 までバージョンアップをするな、というアナウンスとともに 5.3.8 がリリースされていてワロタ。ports では php5-5.3.7_2 でこの問題に対応済みの模様。ところが、バージョンアップで転ける。

# portupgrade -a
--->  Upgrading 'php5-5.3.7_1' to 'php5-5.3.7_2' (lang/php5)
--->  Building '/usr/ports/lang/php5' with make flags: WITHOUT_X11=yes
===>  Cleaning for php5-5.3.7_2
===>  Vulnerability check disabled, database not found
===>  License check disabled, port has not defined LICENSE
===>  Found saved configuration for php5-5.3.6_1
===>  Extracting for php5-5.3.7_2
=> SHA256 Checksum OK for php-5.3.7.tar.bz2.
=> SHA256 Checksum mismatch for suhosin-patch-5.3.7-0.9.10.patch.gz.
===>  Refetch for 1 more times files: suhosin-patch-5.3.7-0.9.10.patch.
gz
===>  Vulnerability check disabled, database not found
===>  License check disabled, port has not defined LICENSE
===>  Found saved configuration for php5-5.3.6_1
=> suhosin-patch-5.3.7-0.9.10.patch.gz doesn't seem to exist in /usr/
ports/distfiles/.
=> Attempting to fetch http://download.suhosin.org/suhosin-patch-5.3.7-0.9.10.patch.gz
fetch: http://download.suhosin.org/suhosin-patch-5.3.7-0.9.10.patch.gz: 
Requested Range Not Satisfiable
=> Attempting to fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/suhosin-patch-5.3.7-0.9.10.patch.gz
fetch: ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/suhosin-patch-5.3.7-0.9.10.patch.gz: File unavailable (e.g., file not found, no access)
=> Couldn't fetch it - please try to retrieve this
=> port manually into /usr/ports/distfiles/ and try again.
*** Error code 1

Stop in /usr/ports/lang/php5.
*** Error code 1

Stop in /usr/ports/lang/php5.
*** Error code 1

Stop in /usr/ports/lang/php5.

■確認

# cd /usr/ports/distfiles
# ls -l | grep suho
-rw-r--r--   1 root  wheel      41175 Aug 19 20:18 suhosin-patch-5.3.7-0.
9.10.patch.gz

ファイルは存在するが、SHA256 Checksum mismatch というメッセージがあるので、ファイルが破損している可能性がある。ftp.FreeBSD.org には当該ファイルが存在しないことを確認。改めて配布元から取得することとする。念のため、古いファイルはリネームして保持する。

■対処

# cd /usr/ports/distfiles
# mv suhosin-patch-5.3.7-0.9.10.patch.gz suhosin-patch-5.3.7-0.9.10.
patch.gz2
# wget http://download.suhosin.org/suhosin-patch-5.3.7-0.9.10.patch.gz
# portupgrade -a

インストールは特に問題なく完了したので割愛。問題のファイルの検証をば。

■ファイルサイズ、タイプスタンプ比較

# ls -l | grep suho
-rw-r--r--   1 root  wheel      41175 Aug 19 20:18 suhosin-patch-5.3.7-0.
9.10.patch.gz
-rw-r--r--   1 root  wheel      41175 Aug 19 20:18 suhosin-patch-5.3.7-0.
9.10.patch.gz2

ファイルサイズとタイムスタンプは同一。

■チェックサムの比較

# sha256 suhosin-patch-5.3.7-0.9.10.patch.gz
SHA256 (suhosin-patch-5.3.7-0.9.10.patch.gz) = 
0a0dac0e4343596f2bfcef27dcf7180524b78bb1d2d2ca878370a7d0f8313d26
# sha256 suhosin-patch-5.3.7-0.9.10.patch.gz2
SHA256 (suhosin-patch-5.3.7-0.9.10.patch.gz2) = 
e99edcd6d169a8a578af35b9360429cadee640a1f2b665b088e9956237680150

全く異なる。やはり、ファイルが壊れているのか?

■内容比較

# diff suhosin-patch-5.3.7-0.9.10.patch.gz2 suhosin-patch-5.3.7-0.9.10.
patch.gz
Files suhosin-patch-5.3.7-0.9.10.patch.gz2 and suhosin-patch-5.3.7-0.9.
10.patch.gz differ

# cmp suhosin-patch-5.3.7-0.9.10.patch.gz2 suhosin-patch-5.3.7-0.9.10.
patch.gz
suhosin-patch-5.3.7-0.9.10.patch.gz2 suhosin-patch-5.3.7-0.9.10.patch.gz 
differ: char 5, line 1

どうも、違うらしい。

■無理矢理viで開いてみた

# vi suhosin-patch-5.3.7-0.9.10.patch.gz
^_\x8b^H^HQ^NN^@^Csuhosin-patch-5.3.7-0.9.10.patch^@\xec=kw\xdaH\xb2\x9f
\xf19


# vi suhosin-patch-5.3.7-0.9.10.patch.gz2
^_\x8b^H^H\xd7\x8d\x82M^@^Csuhosin-patch-5.3.6-0.9.10.patch^@\xec}\xfb{^
Z9\xb2\

。。。。。ん?

■展開して中身を確認してみた
○古い方=portsが勝手に拾ってきたファイル

# gzip -d suhosin-patch-5.3.7-0.9.10.patch.gz
gzip: suhosin-patch-5.3.7-0.9.10.patch.gz: trailing garbage ignored

なんかエラー出た。展開はできたからよしとしよう。

# head suhosin-patch-5.3.7-0.9.10.patch
diff -ruN php-5.3.6/Zend/Makefile.am php-5.3.6-suhosin-0.9.10/Zend/
Makefile.am
--- php-5.3.6/Zend/Makefile.am  2009-03-18 11:18:10.000000000 +0100
+++ php-5.3.6-suhosin-0.9.10/Zend/Makefile.am   2011-03-17 23:37:33.
000000000 +0100
@@ -17,7 +17,7 @@
        zend_objects_API.c zend_ts_hash.c zend_stream.c \
        zend_default_classes.c \
        zend_iterators.c zend_interfaces.c zend_exceptions.c \
-       zend_strtod.c zend_closures.c zend_float.c
+       zend_strtod.c zend_closures.c zend_float.c zend_canary.c 
zend_alloc_canary.c

。。。 中身は 5.3.6 のパッチ??
なんか、FreeBSDの中の人が間違えてリリースしてしまったとか?

○新しい方=配布元から落としてきたファイル

# gzip -d suhosin-patch-5.3.7-0.9.10.patch.gz
# head suhosin-patch-5.3.7-0.9.10.patch
diff -Nura php-5.3.7/Zend/Makefile.am suhosin-patch-5.3.7-0.9.10/Zend/
Makefile.am
--- php-5.3.7/Zend/Makefile.am  2009-03-18 11:18:10.000000000 +0100
+++ suhosin-patch-5.3.7-0.9.10/Zend/Makefile.am 2011-08-19 12:39:28.
000000000 +0200
@@ -17,7 +17,7 @@
        zend_objects_API.c zend_ts_hash.c zend_stream.c \
        zend_default_classes.c \
        zend_iterators.c zend_interfaces.c zend_exceptions.c \
-       zend_strtod.c zend_closures.c zend_float.c
+       zend_strtod.c zend_closures.c zend_float.c zend_canary.c 
zend_alloc_canary.c

こちらは正しいバージョンのパッチらしい。

■おまけ
php-5.3.7 で報告されている脆弱性が存在するかどうかの確認。

$ php -v 
PHP 5.3.7 with Suhosin-Patch (cli) (built: Aug 23 2011 11:18:25) 
Copyright (c) 1997-2011 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies 

$ pkg_info | grep php 
php5-5.3.7_2        PHP Scripting Language 
(以下略)

■検証
参考:https://bugs.php.net/bug.php?id=55439

検証用スクリプト

[test] 
#!/usr/local/bin/php 
<?php 
printf("MD5: %s\n", crypt('password', '$1$U7AjYB.O$')); 
?> 

$ chmod 755 test 
$ ./test 

MD5: $1$U7AjYB.O$L1N7ux7twaMIMw0En8UUR1 

脆弱性がある場合の出力は

MD5: $1$U7AjYB.O 

となるとのことなので、問題なかろうと判断。

取り急ぎ。

※追記。。。
翌日には 5.3.8 のportsが用意されてた。。。今回、仕事早いなぁ。。。
それだけやばかった、ってことね。

この記事にコメントする

Powered by WordPress, WP Theme designed by WSC Project. ログイン