Bugraq ID: 36260 Apache mod_proxy_ftp是一款用于处理FTP代理请求的Apache模块。 当处理FTP服务器的应答时mod_proxy_ftp存在错误,可导致Null指针应用而造成一个用程序崩溃。 使用./configure –enable-proxy –enable-proxy-ftp启用代理支持,并在httpd.conf文件中设置‘ProxyRequests’选项,如下代码的漏洞可导致应用程序崩溃: (modules/proxy/proxy_ftp.c): int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf, char *url, const char *proxyhost, apr_port_t proxyport) { ... { apr_sockaddr_t *data_addr; char *data_ip; apr_port_t data_port; rc = proxy_ftp_command("EPSV" CRLF, r, origin, bb, &ftpmessage); if (rc == -1 || rc == 421) { return ap_proxyerror(r, HTTP_BAD_GATEWAY, "Error reading from remote server"); } if (rc != 229 && rc != 500 && rc != 501 && rc != 502) { return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage); } else if (rc == 229) { char *pstr; char *tok_cntx; ... ... [1] pstr = ftpmessage; pstr = apr_strtok(pstr, " ", &tok_cntx); /* separate result code */ if (pstr != NULL) { if (*(pstr + strlen(pstr) + 1) ==...
Bugraq ID: 36260 Apache mod_proxy_ftp是一款用于处理FTP代理请求的Apache模块。 当处理FTP服务器的应答时mod_proxy_ftp存在错误,可导致Null指针应用而造成一个用程序崩溃。 使用./configure –enable-proxy –enable-proxy-ftp启用代理支持,并在httpd.conf文件中设置‘ProxyRequests’选项,如下代码的漏洞可导致应用程序崩溃: (modules/proxy/proxy_ftp.c): int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf, char *url, const char *proxyhost, apr_port_t proxyport) { ... { apr_sockaddr_t *data_addr; char *data_ip; apr_port_t data_port; rc = proxy_ftp_command("EPSV" CRLF, r, origin, bb, &ftpmessage); if (rc == -1 || rc == 421) { return ap_proxyerror(r, HTTP_BAD_GATEWAY, "Error reading from remote server"); } if (rc != 229 && rc != 500 && rc != 501 && rc != 502) { return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage); } else if (rc == 229) { char *pstr; char *tok_cntx; ... ... [1] pstr = ftpmessage; pstr = apr_strtok(pstr, " ", &tok_cntx); /* separate result code */ if (pstr != NULL) { if (*(pstr + strlen(pstr) + 1) == '=') { pstr += strlen(pstr) + 2; } else { pstr = apr_strtok(NULL, "(", &tok_cntx); /* separate address & * port params */ if (pstr != NULL) pstr = apr_strtok(NULL, ")", &tok_cntx); } } [2] if (pstr) { apr_sockaddr_t *epsv_addr; data_port = atoi(pstr + 3); ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, "proxy: FTP: EPSV contacting remote host on port %d", data_port); ... ... } else { [3] apr_socket_close(data_sock); } ... } #1行解析EPSV FTP服务器应答,如果FTP服务器发送特殊构建的EPSV应答,‘pstr’就会等于Null,行3会使用未初始化‘data_sock’变量执行。 Intevydis公司发布的商业漏洞利用工具已经提供相关的攻击信息。 Apache Software Foundation mod_proxy_ftp Apache Software Foundation Apache 2.2.13 Apache Software Foundation Apache 2.0.63 目前没有解决方案提供: http://httpd.apache.org/docs/2.0/mod/mod_proxy_ftp.html