👮‍♂️

10月追加分 PHP脆弱性

2024/10/16に公開

NVDでIn PHP versions 8.1.* before 8.1.30, 8.2.* before 8.2.24, 8.3.* before 8.3.12 から始まる新しい4件の脆弱性をまとめました。
Undergoing Analysis のためスコアはCNAのものを記載しています。

該当するPHPバージョン

< 8.1.30
< 8.2.24
< 8.3.12

CVE-2024-8925 : 3.1(Low)

multipart/form-data を用いたPOST処理をするときのBoundaryパラメータにおいて、Boundary及びprefixの長さが5Kibより大きい時に正しくBoundaryを認識してくれないという脆弱性です。

CVE-2024-8926 : 8.1(High)

標準的ではない、特定のWindowsのコードページ設定を使用している場合、CVE-2024-4577 を同じコマンドを用いて実行できるという脆弱性です。
肝心の標準的ではない、特定のWindowsのコードページ設定 については非公開です。

CVE-2024-8927 : 7.5(High)

cgi.force_redirect を用いて、http://host.example/cgi-bin/php/secretdir/script.php のように直接phpファイルを呼び出せないようにしているが、
Redirect-Status というヘッダーを付けると、意図せずHTTP_REDIRECT_STATUS環境変数にそれがコンバートされてしまい、以下のif文の!getenv ("HTTP_REDIRECT_STATUS")を満たさなくなることで、cgi.force_redirectをバイパスしてしまうという脆弱性。

		if (!getenv("REDIRECT_STATUS") &&
			!getenv ("HTTP_REDIRECT_STATUS") &&
			/* this is to allow a different env var to be configured
			 * in case some server does something different than above */
			(!CGIG(redirect_status_env) || !getenv(CGIG(redirect_status_env)))
		) {
			zend_try {
				SG(sapi_headers).http_response_code = 400;
				PUTS("<b>Security Alert!</b> The PHP CGI cannot be accessed directly.\n\n\
<p>This PHP CGI binary was compiled with force-cgi-redirect enabled.  This\n\
means that a page will only be served up if the REDIRECT_STATUS CGI variable is\n\
set, e.g. via an Apache Action directive.</p>\n\
<p>For more information as to <i>why</i> this behaviour exists, see the <a href=\"http://php.net/security.cgi-bin\">\
manual page for CGI security</a>.</p>\n\
<p>For more information about changing this behaviour or re-enabling this webserver,\n\
consult the installation file that came with this distribution, or visit \n\
<a href=\"http://php.net/install.windows\">the manual page</a>.</p>\n");
			} zend_catch {
			} zend_end_try();
#if defined(ZTS) && !defined(PHP_DEBUG)
			/* XXX we're crashing here in msvc6 debug builds at
			 * php_message_handler_for_zend:839 because
			 * SG(request_info).path_translated is an invalid pointer.
			 * It still happens even though I set it to null, so something
			 * weird is going on.
			 */
			tsrm_shutdown();
#endif
			free(bindpath);
			return FAILURE;
		}

CVE-2024-9026 : 3.3(Low)

php-fpmでcatch_workers_output = yes としている場合に、最大4文字まで無視され、ログ汚染されてしまう脆弱性。

Discussion