[memo] WordPress に patch を当てる Update PHPMailer 暫定
「なんか大変そうな感じですが、WordPress に patch を当てるって具体的にどうするんですか」って聞かれたので手順だけメモしときます。
以下の patch 自体 final fix ではないので状況に応じて適時追いかけて下さい。
patch を当てる手順であって脆弱性対策ではないので要注意。 (このメモの公開時点)
適用する前にテスト環境で動作チェックしてね。
恐らく WordPress PHPMailer 絡みの更新が来ると思うので自信がなければ自己責任で対応しましょう。
https://core.trac.wordpress.org/ticket/39397
https://core.trac.wordpress.org/ticket/37210
https://isc.sans.edu/forums/diary/Critical+security+update+PHPMailer+5218+CVE201610033/21855/
https://github.com/PHPMailer/PHPMailer/blob/master/changelog.md
バージョニングしていないなら、
必要に応じて事前に元ファイルをコピーしておいて、
[wpuser@example ~]# cp /var/www/vhosts/example.com/public_html/wordpress/wp-includes/class-smtp.php /var/www/vhosts/example.com/public_html/wordpress/wp-includes/class-smtp.php.`date +%Y%m%d`
[wpuser@example ~]# cp /var/www/vhosts/example.com/public_html/wordpress/wp-includes/class-phpmailer.php /var/www/vhosts/example.com/public_html/wordpress/wp-includes/class-phpmailer.php.`date +%Y%m%d`
とか。
例えば以下のパッチを取得
[wpuser@example ~]# cd /var/www/vhosts/example.com/public_html/wordpress/wp-includes/
[wpuser@example wp-includes]# wget https://core.trac.wordpress.org/raw-attachment/ticket/39397/39397.patch
--2016-12-27 18:49:14-- https://core.trac.wordpress.org/raw-attachment/ticket/39397/39397.patch
core.trac.wordpress.org をDNSに問いあわせています... 66.155.40.248
core.trac.wordpress.org|66.155.40.248|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 Ok
長さ: 43332 (42K) [text/x-diff]
`39397.patch' に保存中
100%[======================================>] 43,332 199K/s 時間 0.2s
2016-12-27 18:49:15 (199 KB/s) - `39397.patch' へ保存完了 [43332/43332]
取得したパッチを適用
[wpuser@example wp-includes]# patch -u < 39397.patch
(Stripping trailing CRs from patch.)
patching file class-smtp.php
(Stripping trailing CRs from patch.)
patching file class-phpmailer.php
[wpuser@example wp-includes]# diff -s -u class-smtp.php.20161227 class-smtp.php | less
[wpuser@example wp-includes]# diff -s -u class-phpmailer.php.20161227 class-phpmailer.php | less
問題がありそうだったら
[wpuser@example wp-includes]# patch -u -R < 39397.patch
[wpuser@example wp-includes]# rm -f 39397.patch
[wpuser@example wp-includes]# rm -f class-smtp.php.20161227
[wpuser@example wp-includes]# rm -f class-phpmailer.php.20161227
で patch を当てる前の状態に戻せます。
ユーザーでなく root で作業していた場合は、
[root@example ]# chown -R uid:gid /var/www/vhosts/example.com/public_html/wordpress/wp-includes/
しておかないと更新できないかな。
WordPress のアップデートを適用する際にはリバースパッチで副作用のないようにしましょう。
バックアップ関連のプラグインで巻き戻す手もあるけれど。
以下の patch 自体 final fix ではないので状況に応じて適時追いかけて下さい。
patch を当てる手順であって脆弱性対策ではないので要注意。 (このメモの公開時点)
適用する前にテスト環境で動作チェックしてね。
恐らく WordPress PHPMailer 絡みの更新が来ると思うので自信がなければ自己責任で対応しましょう。
https://core.trac.wordpress.org/ticket/39397
https://core.trac.wordpress.org/ticket/37210
https://isc.sans.edu/forums/diary/Critical+security+update+PHPMailer+5218+CVE201610033/21855/
https://github.com/PHPMailer/PHPMailer/blob/master/changelog.md
バージョニングしていないなら、
必要に応じて事前に元ファイルをコピーしておいて、
[wpuser@example ~]# cp /var/www/vhosts/example.com/public_html/wordpress/wp-includes/class-smtp.php /var/www/vhosts/example.com/public_html/wordpress/wp-includes/class-smtp.php.`date +%Y%m%d`
[wpuser@example ~]# cp /var/www/vhosts/example.com/public_html/wordpress/wp-includes/class-phpmailer.php /var/www/vhosts/example.com/public_html/wordpress/wp-includes/class-phpmailer.php.`date +%Y%m%d`
とか。
例えば以下のパッチを取得
[wpuser@example ~]# cd /var/www/vhosts/example.com/public_html/wordpress/wp-includes/
[wpuser@example wp-includes]# wget https://core.trac.wordpress.org/raw-attachment/ticket/39397/39397.patch
--2016-12-27 18:49:14-- https://core.trac.wordpress.org/raw-attachment/ticket/39397/39397.patch
core.trac.wordpress.org をDNSに問いあわせています... 66.155.40.248
core.trac.wordpress.org|66.155.40.248|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 Ok
長さ: 43332 (42K) [text/x-diff]
`39397.patch' に保存中
100%[======================================>] 43,332 199K/s 時間 0.2s
2016-12-27 18:49:15 (199 KB/s) - `39397.patch' へ保存完了 [43332/43332]
取得したパッチを適用
[wpuser@example wp-includes]# patch -u < 39397.patch
(Stripping trailing CRs from patch.)
patching file class-smtp.php
(Stripping trailing CRs from patch.)
patching file class-phpmailer.php
[wpuser@example wp-includes]# diff -s -u class-smtp.php.20161227 class-smtp.php | less
[wpuser@example wp-includes]# diff -s -u class-phpmailer.php.20161227 class-phpmailer.php | less
問題がありそうだったら
[wpuser@example wp-includes]# patch -u -R < 39397.patch
[wpuser@example wp-includes]# rm -f 39397.patch
[wpuser@example wp-includes]# rm -f class-smtp.php.20161227
[wpuser@example wp-includes]# rm -f class-phpmailer.php.20161227
で patch を当てる前の状態に戻せます。
ユーザーでなく root で作業していた場合は、
[root@example ]# chown -R uid:gid /var/www/vhosts/example.com/public_html/wordpress/wp-includes/
しておかないと更新できないかな。
WordPress のアップデートを適用する際にはリバースパッチで副作用のないようにしましょう。
バックアップ関連のプラグインで巻き戻す手もあるけれど。
コメント