Vulnerabilities > CVE-2002-1644 - Privilege Escalation vulnerability in SSH Communications SSH Server

047910
CVSS 7.2 - HIGH
Attack vector
LOCAL
Attack complexity
LOW
Privileges required
NONE
Confidentiality impact
COMPLETE
Integrity impact
COMPLETE
Availability impact
COMPLETE
local
low complexity
ssh
nessus

Summary

SSH Secure Shell for Servers and SSH Secure Shell for Workstations 2.0.13 through 3.2.1, when running without a PTY, does not call setsid to remove the child process from the process group of the parent process, which allows attackers to gain certain privileges.

Nessus

NASL familyMisc.
NASL idSSH_SETSID.NASL
descriptionAccording to its banner, the version of SSH Secure Shell running on the remote host is between 2.0.13 and 3.2.1. There is a bug in such versions that may allow a non-interactive shell session, such as used in scripts, to obtain higher privileges due to a flaw in the way setsid() is used.
last seen2020-06-01
modified2020-06-02
plugin id11169
published2002-11-25
reporterThis script is Copyright (C) 2002-2018 Tenable Network Security, Inc.
sourcehttps://www.tenable.com/plugins/nessus/11169
titleSSH Secure Shell without PTY setsid() Function Privilege Escalation
code
#
# (C) Tenable Network Security, Inc.
#

#
# Note: This is about SSH.com's SSH, not OpenSSH !!
#

include("compat.inc");

if (description)
{
 script_id(11169);
 script_version("1.22");
 script_cvs_date("Date: 2018/07/30 15:31:32");

 script_cve_id("CVE-2002-1644");
 script_bugtraq_id(6247);

 script_name(english:"SSH Secure Shell without PTY setsid() Function Privilege Escalation");
 script_summary(english:"Checks for the remote SSH version");

 script_set_attribute(attribute:"synopsis", value:
"The remote SSH server is affected by a privilege escalation
vulnerability.");
 script_set_attribute(attribute:"description", value:
"According to its banner, the version of SSH Secure Shell running on
the remote host is between 2.0.13 and 3.2.1. There is a bug in such
versions that may allow a non-interactive shell session, such as used
in scripts, to obtain higher privileges due to a flaw in the way
setsid() is used.");
 # http://web.archive.org/web/20021207091314/http://www.ssh.com/company/newsroom/article/286/
 script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?a7fe1d74");
 script_set_attribute(attribute:"solution", value:"Upgrade to SSH Secure Shell 3.1.5 / 3.2.2 or later.");
 script_set_cvss_base_vector("CVSS2#AV:N/AC:H/Au:S/C:C/I:C/A:C");
 script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
 script_set_attribute(attribute:"exploitability_ease", value:"No known exploits are available");
 script_set_attribute(attribute:"exploit_available", value:"false");

 script_set_attribute(attribute:"vuln_publication_date", value:"2002/11/26");
 script_set_attribute(attribute:"plugin_publication_date", value:"2002/11/25");

 script_set_attribute(attribute:"plugin_type", value:"remote");
 script_end_attributes();

 script_category(ACT_GATHER_INFO);
 script_copyright(english:"This script is Copyright (C) 2002-2018 Tenable Network Security, Inc.");
 script_family(english:"Misc.");

 script_dependencie("ssh_detect.nasl", "os_fingerprint.nasl");
 script_require_ports("Services/ssh", 22);
 exit(0);
}

include("audit.inc");
include("backport.inc");
include("global_settings.inc");
include("misc_func.inc");

port = get_service(svc:"ssh", default:22, exit_on_fail:TRUE);

banner = get_kb_item_or_exit("SSH/banner/"+port);
bp_banner = tolower(get_backport_banner(banner:banner));

if (
  !ereg(pattern:"^ssh-[0-9]+\.[0-9]+-[0-9]", string:bp_banner) ||

  "f-secure" >< bp_banner ||
  "tru64 unix" >< bp_banner ||
  "windows" >< bp_banner
) audit(AUDIT_NOT_LISTEN, "SSH Secure Shell", port);

type = get_kb_item("Host/OS/Type");
if (isnull(type) || type != "general-purpose") exit(0, "The host's type is not general-purpose.");

item = eregmatch(pattern:"^ssh-[0-9]\.[0-9]+-([0-9][^ ]+)", string:banner);
if (isnull(item)) exit(1, 'Failed to parse the banner from the SSH server listening on port ' + port + '.');
version = item[1];

if (
  (
    ereg(pattern:"^2\..*$", string:version) &&
    !ereg(pattern:"^2\.0\.([0-9]|0[0-9]|1[0-2])([^0-9]|$)", string:version)
  ) ||
  ereg(pattern:"^3\.(0\..*|1\.[0-4]|2\.[0-1])([^0-9]|$)", string:version)
)
{
  if (report_verbosity > 0)
  {
    report = '\n  Version source    : ' + banner +
             '\n  Installed version : ' + version +
             '\n  Fixed version     : 3.1.5 / 3.2.2' +
             '\n';
    security_hole(port:port, extra:report);
  }
  else security_hole(port);
}
else audit(AUDIT_LISTEN_NOT_VULN, "SSH", port);