Phorum search.php location Parameter HTTP Response Splitting

2005-03-22T00:00:00
ID PHORUM_RESPONSE_SPLITTING.NASL
Type nessus
Reporter This script is Copyright (C) 2005-2018 Tenable Network Security, Inc.
Modified 2020-08-02T00:00:00

Description

The version of Phorum installed on the remote host does not properly sanitize input used in the Location response header. An attacker can exploit this flaw with a specially crafted request to inject malicious code into HTTP headers, which may allow execution of arbitrary HTML and script code in a user

                                        
                                            #
# (C) Tenable Network Security, Inc.
#



include("compat.inc");

if (description) {
  script_id(17596);
  script_version("1.17");

  script_cve_id("CVE-2005-0843");
  script_bugtraq_id(12869);

  script_name(english:"Phorum search.php location Parameter HTTP Response Splitting");

 script_set_attribute(attribute:"synopsis", value:
"The remote web server contains a PHP application that is prone to a
cross-site scripting attack." );
 script_set_attribute(attribute:"description", value:
"The version of Phorum installed on the remote host does not properly
sanitize input used in the Location response header.  An attacker can
exploit this flaw with a specially crafted request to inject malicious
code into HTTP headers, which may allow execution of arbitrary HTML
and script code in a user's browser within the context of the remote
host." );
 script_set_attribute(attribute:"see_also", value:"https://www.securityfocus.com/archive/1/393953" );
 script_set_attribute(attribute:"see_also", value:"https://www.phorum.org/story.php?48" );
 script_set_attribute(attribute:"solution", value:
"Upgrade to Phorum 5.0.15 or later." );
 script_set_cvss_base_vector("CVSS2#AV:N/AC:M/Au:N/C:N/I:P/A:N");
 script_set_cvss_temporal_vector("CVSS2#E:POC/RL:OF/RC:C");
 script_set_attribute(attribute:"exploitability_ease", value:"No exploit is required");
 script_set_attribute(attribute:"exploit_available", value:"false");
 script_cwe_id(20, 74, 79, 442, 629, 711, 712, 722, 725, 750, 751, 800, 801, 809, 811, 864, 900, 928, 931, 990);

 script_set_attribute(attribute:"plugin_publication_date", value: "2005/03/22");
 script_set_attribute(attribute:"vuln_publication_date", value: "2005/03/22");
 script_cvs_date("Date: 2018/11/15 20:50:18");
 script_set_attribute(attribute:"plugin_type", value:"remote");
 script_set_attribute(attribute:"cpe", value:"cpe:/a:phorum:phorum");
 script_end_attributes();


  script_summary(english:"Checks for HTTP response splitting vulnerability in Phorum");
  script_category(ACT_ATTACK);
  script_copyright(english:"This script is Copyright (C) 2005-2018 Tenable Network Security, Inc.");
  script_family(english:"CGI abuses");
  script_dependencies("phorum_detect.nasl");
  script_exclude_keys("Settings/disable_cgi_scanning");
  script_require_ports("Services/www", 80);
  script_require_keys("www/PHP");
  exit(0);
}

include("global_settings.inc");
include("misc_func.inc");
include("http.inc");


port = get_http_port(default:80);
if (!can_host_php(port:port)) exit(0);


# Test an install.
install = get_kb_item(string("www/", port, "/phorum"));
if (isnull(install)) exit(0);
matches = eregmatch(string:install, pattern:"^(.+) under (/.*)$");
if (!isnull(matches)) {
  dir = matches[2];

  # A vulnerable system will output a redirect along with the
  # "response" in its body.
  xss = "<html><script>alert('Nessus was here');</script></html>";
  # nb: the url-encoded version is what we need to pass in.
  exss = "%3Chtml%3E%3Cscript%3Ealert('Nessus%20was%20here')%3B%3C%2Fscript%3E%3C%2Fhtml%3E";
  r = http_send_recv3(method:"GET",
    item:string(
      dir, "/search.php?",
      "forum_id=0&",
      "search=1&",
      "match_forum=ALL&",
      "body=%0d%0a",
        "Content-Length:%200%0d%0a%0d%0a",
        "HTTP/1.0%20200%20OK%0d%0a",
        "Content-Type:%20text/html%0d%0a",
        "Content-Length:%20", strlen(xss), "%0d%0a",
        "%0d%0a",
        exss, "%0d%0a",
        "&",
      "match_type=ALL&",
      "author=1&",
      "match_dates=30",
      "subject=1&"
    ),
    port:port
  );

  if (isnull(r)) exit(0);
  # If we get back our text, there's a problem.
  if (xss >< r[1] )
  {
   security_warning(port);
   set_kb_item(name: 'www/'+port+'/XSS', value: TRUE);
  }
}