#
# Written by Michael Scheidell <scheidell at secnap.net>
# based on a script written by Hendrik Scholz <hendrik@scholz.net> 
#
# See the Nessus Scripts License for details
#
#

if(description)
{
 script_id(10925);
 script_version("$Revision: 1.7 $");
 script_cve_id("CAN-2001-0307");
 
 name["english"] = "Oracle Jserv Executes outside of doc_root";
 script_name(english:name["english"]);
 
 desc["english"] = "

Detects Vulnerability in the execution of JSPs outside
doc_root.

A potential security vulnerability has been discovered in
Oracle JSP releases 1.0.x through 1.1.1 (in
Apache/Jserv). This vulnerability permits access to and
execution of unintended JSP files outside the doc_root in
Apache/Jserv. For example, accessing
http://www.example.com/a.jsp//..//..//..//..//..//../b.jsp
will execute b.jsp outside the doc_root instead of a.jsp
if there is a b.jsp file in the matching directory.

Further, Jserv Releases 1.0.x - 1.0.2 have additional
vulnerability:

Due to a bug in Apache/Jserv path translation, any
URL that looks like:
http://host:port/servlets/a.jsp, makes Oracle JSP
execute 'd:\servlets\a.jsp' if such a directory
path actually exists. Thus, a URL virtual path, an
actual directory path and the Oracle JSP name
(when using Oracle Apache/JServ) must match for
this potential vulnerability to occur.

Vulnerable systems:
Oracle8i Release 8.1.7, iAS Release version 1.0.2
Oracle JSP, Apache/JServ Releases version 1.0.x - 1.1.1

Solution:
Upgrade to OJSP Release 1.1.2.0.0, available on Oracle
Technology Network's OJSP web site.

Risk factor : High";

 script_description(english:desc["english"]);
 
 summary["english"] = "Oracle Jserv Server type and version";
 script_summary(english:summary["english"]);
 
 script_category(ACT_GATHER_INFO);
 
 script_copyright(english:"This script is Copyright (C) 2002 Michael Scheidell");
 family["english"] = "General";
 script_family(english:family["english"]);

 script_dependencie("find_service.nes", "httpver.nasl", "no404.nasl",  "http_version.nasl");
 script_require_ports("Services/www", 80);
 script_require_keys("www/apache");
 exit(0);
}

#
# The script code starts here
#
include("http_func.inc");

 port = get_http_port(default:80);


 if (get_port_state(port))
 {
  soctcp80 = open_sock_tcp(port);

  if (soctcp80)
  {
   data = http_get(item:"/", port:port);
   resultsend = send(socket:soctcp80, data:data);
   resultrecv = http_recv_headers(soctcp80);
   str = egrep(pattern:"apachejserv/1\.",string:tolower(resultrecv));


   if(ereg(pattern:".*apachejserv/1\.(0|1\.[0-1])",string:str))
      security_hole(port);
  close(soctcp80);
  }
 }
