このブログで使用しているApache 2.4.58に脆弱性勧告があったので、アップデートを行った。
脆弱性の内容
Apache 2.4.58で以下の脆弱性が確認されている。
- CVE-2024-27316
- CVSS: 7.5
HTTP/2 の受信ヘッダが制限を超えると、情報量の多い HTTP 413 レスポンスを生成するために nghttp2 に一時的にバッファリングされる。クライアントがヘッダの送信を止めない場合、これはメモリの枯渇につながります。
- CVE-2024-38474
- CVSS: 9.8
Apache HTTP Server 2.4.59 以前のバージョンでは、mod_rewrite における置換エンコーディングの問題により、攻撃者は設定で許可されたディレクトリにあるスクリプトを実行することができます。この問題を修正したバージョン 2.4.60 へのアップグレードを推奨します。安全でないキャプチャと置換を行ういくつかの RewriteRules は、書き換えフラグ 「UnsafeAllow3F」 が指定されない限り失敗するようになりました。
- CVE-2024-38475
- CVSS: 9.1
Apache HTTP Server 2.4.59 以前の mod_rewrite における出力の不適切なエスケープにより、 攻撃者が URL をサーバによって提供されることは許可されているが、 どの URL からも意図的/直接的に到達可能ではないファイルシステムの場所に マップすることが可能となり、コードの実行やソースコードの漏洩を 引き起こす可能性があります。サーバコンテキストの置換で、置換の最初のセグメントとして後方参照または変数を使用しているものが影響を受けます。 いくつかの安全でない RewiteRules は、この変更によって破壊され、書き換えフラグ 「UnsafePrefixStat」 を使用することで、置換が適切に制約されていることを確認した上で、元に戻すことができます。
- CVE-2024-38476
- CVSS: 9.8
Apache HTTP Server 2.4.59 およびそれ以前のバージョンには、バックエンドアプリケーションを経由した情報漏洩、SSRF、ローカルスクリプト実行の脆弱性が存在します。この問題を修正したバージョン 2.4.60 へのアップグレードを推奨します。
- CVE-2024-38477
- CVSS: 7.5
Apache HTTP サーバ 2.4.59 以前のバージョンでは、mod_proxy のヌルポインタ参照により、攻撃者が悪意のあるリクエストを経由してサーバをクラッシュさせる可能性があります。この問題を修正したバージョン 2.4.60 へのアップグレードを推奨します。
- CVE-2024-40898
- CVSS: 7.5
Windows 上の Apache HTTP サーバにおいて、mod_rewrite を server/vhost コンテキストに設定した場合に SSRF が発生し、悪意のあるリクエストを経由して NTML ハッシュが悪意のあるサーバに漏洩する可能性があります。この問題を修正したバージョン 2.4.62 へのアップグレードを推奨します。
※CVE:共通脆弱性識別子。個別製品中の脆弱性を対象として、MITRE社が採番している脆弱性の識別子。
※CVSS:緊急度の評価。0.0~10.0まであり、0~3.9が注意、4.0~6.9が警告、7.0以上が危険とされる。
各脆弱性の簡易説明
脆弱性 | 攻撃の影響 |
CVE-2024-38474 | mod_rewriteによる任意コード実行 / スクリプト漏洩 |
CVE-2024-38475 | mod_rewriteの不正なマッピングによりコード実行 |
CVE-2024-38476 | レスポンスヘッダー改ざんによる情報漏洩 / SSRF |
CVE-2024-38477 | mod_proxyにおけるDoS(クラッシュ) |
CVE-2024-27316 | HTTP/2におけるメモリ枯渇DoS |
CVE-2024-40898 | Windows環境でのSSRFによるNTLMハッシュ漏洩 |
アップデート手順
現行バージョン確認
apache2 -v
Apacheのビルドアップ
必要パッケージのインストール
sudo apt install -y build-essential libpcre3-dev libssl-dev libapr1-dev libaprutil1-dev
Apacheのダウンロードとインストール
cd /usr/local/src
wget https://downloads.apache.org/httpd/httpd-2.4.63.tar.gz
tar xzf httpd-2.4.63.tar.gz
cd httpd-2.4.63
./configure --enable-so --enable-ssl --enable-rewrite --with-mpm=prefork
make
sudo make install
動作確認
/usr/local/apache2/bin/httpd -v
httpd.conf 設定
cd /usr/local/apache2/conf/
vi httpd.conf
Listen 80
<VirtualHost *:80>
ServerName blogontec.com
Redirect permanent / https://blogontec.com/
</VirtualHost>
Listen 443
<VirtualHost *:443>
ServerName blogontec.com
DocumentRoot "/var/www/wordpress"
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/blogontec.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/blogontec.com/privkey.pem
<Directory "/var/www/wordpress">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
PHPのビルドとApache連携
依存パッケージのインストール
sudo apt install -y libjpeg-dev libpng-dev libwebp-dev libxpm-dev libfreetype-dev libzip-dev libcurl4-openssl-dev libonig-dev libicu-dev
PHPのダウンロードとビルド
cd /usr/local/src
wget https://www.php.net/distributions/php-8.2.18.tar.gz
tar xzf php-8.2.18.tar.gz
cd php-8.2.18
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-openssl \
--with-zlib \
--with-mysqli \
--with-pdo-mysql \
--with-curl \
--enable-mbstring \
--enable-exif \
--enable-intl \
--enable-gd \
--with-external-gd \
--with-jpeg \
--with-webp \
--with-xpm \
--with-freetype \
--with-zip
make -j$(nproc)
sudo make install
Apache設定への組み込み(httpd.conf 追記)
cd /usr/local/apache2/conf/
vi httpd.conf
LoadModule php_module modules/libphp.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
AddType application/x-httpd-php .php
WordPressの再動作確認
.htaccess
確認
ls -l /var/www/wordpress/.htaccess
# => パーミッションが 644、所有者がApacheのユーザー(daemon)であること
phpinfo()
でモジュール確認
echo "<?php phpinfo(); ?>" > /var/www/wordpress/phpinfo.php
管理画面でサイトヘルスからエラーが解消されたことを確認
最後に
Apache 2.4.63はUbuntuの公式リポジトリではまだ提供されていないため、aptでのアップグレードができず、ビルドして実行するやり方を取った。
そのため、これまで設定していたコンフィグや権限関係などのデグレが発生し、だいぶトライアンドエラーを繰り返す大仕事になった。
今後もアップデート関連をインストールしてビルドして~って考えると辛い。。。
コメント