CVE-2023-25690 以降、Apache httpdでクエリー文字列を削除する際に RewriteRule が URL の末尾に %3f を追加するリグレッションの問題
Issue
-
CVE-2023-25690 以降の Apache httpd でクエリー文字列を削除するときに、RewriteRule が URL の末尾に
%3f
を追加するリグレッションの問題。 -
mod_rewrite ドキュメント で次のように説明されています。
クエリー文字列の変更
デフォルトでは、クエリー文字列は変更せずに渡されます。 ただし、クエリー文字列の部分が含まれる置換文字列で URL を作成できます。 置換文字列内で疑問符を使用するだけで、次のテキストをクエリー文字列に再挿入する必要があることを示します。 既存のクエリー文字列を消去する場合は、疑問符のみで置換文字列を終了します。 新しいクエリー文字列と古いクエリー文字列を組み合わせるには、 [QSA] フラグを使用します。
RewriteRule
の置換文字列を疑問符だけで終わらせると、既存のクエリー文字列が消去されます。 そのため、次のように、ユーザーが送信したリクエスト内の既存のクエリーパラメーターを削除する mod_rewriteRewriteRule
があります。RewriteRule ^/example/(.*)$ /example.html? [R,L]
RewriteRule ^/test/(.*)$ http://www.example.com/test.html? [R,L]
RewriteRule ^/(.*)$ /$1? [R,L]
たとえば、ユーザーがリクエスト
/test/test?query=12345
を上記の設定で httpd に送信する場合は、http://www.example.com/test.html
にリダイレクトされます。また、これは、RHEL 7 の httpd-2.4.6-98.el7_9.6 rpm
まで正しく機能します。ただし、httpd-2.4.6-98.el7_9.7 rpm にアップグレードした後、http://www.example.com/test.html%3f
のように、URL の末尾に%3f
を追加して、リダイレクトするように変更されました。そのため、404 Not Found
が生成されます。
Environment
- CVE-2023-25690 の修正を含む Apache httpd 2.4.x
- RHEL 7 の httpd-2.4.6-98.el7_9.7 rpm
- RHEL 8 の httpd-2.4.37-51 rpm
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.