Lucene search

K
nessusThis script is Copyright (C) 2003-2022 Tenable Network Security, Inc.ICMP_LEAK.NASL
HistoryJun 09, 2003 - 12:00 a.m.

Linux Kernel IP Stack ICMP Error Response Arbitrary Memory Information Disclosure

2003-06-0900:00:00
This script is Copyright (C) 2003-2022 Tenable Network Security, Inc.
www.tenable.com
30

The remote host is vulnerable to an ‘icmp leak’ of potentially confidential data. That is, when the host generates an ICMP error packet other than ‘destination unreachable’, the error packet is supposed to only contain the original message or a portion of the original message.

Due to a bug in the remote TCP/IP stack, these ICMP error messages will also contain fragments of the content of the remote kernel memory.

An attacker may use this flaw to remotely sniff what is going into the host’s memory, especially network packets that it sees, and obtain useful information such as POP passwords, HTTP authentication fields, and so on.

#%NASL_MIN_LEVEL 70300
#
# (C) Tenable Network Security, Inc.
#
# Thanks to Philippe Biondi <[email protected]> for his help.
#
# See the Nessus Scripts License for details
#
# Ref: http://web.archive.org/web/20050414193949/http://www.cartel-securite.fr/pbiondi/adv/CARTSA-20030314-icmpleak.txt
# Ref: VU#471084 (http://www.kb.cert.org/vuls/id/471084)
#
# Refs:
#  Date: Mon, 9 Jun 2003 08:56:55 +0200 (CEST)
#  From: Philippe Biondi <[email protected]>
#  To: [email protected], <[email protected]>,
#        <[email protected]>
#  Subject: Linux 2.0 remote info leak from too big icmp citation

include('deprecated_nasl_level.inc');
include('compat.inc');

if (description)
{
  script_id(11704);
  script_version("1.32");
  script_set_attribute(attribute:"plugin_modification_date", value:"2022/04/11");

  script_cve_id("CVE-2003-0418");
  script_xref(name:"CERT", value:"471084");

  script_name(english:"Linux Kernel IP Stack ICMP Error Response Arbitrary Memory Information Disclosure");

  script_set_attribute(attribute:"synopsis", value:
"The remote host is affected by an information disclosure 
vulnerability.");
  script_set_attribute(attribute:"description", value:
"The remote host is vulnerable to an 'icmp leak' of
potentially confidential data.  That is, when the 
host generates an ICMP error packet other than 
'destination unreachable', the  error packet is 
supposed to only contain the original message or 
a portion of the original message. 

Due to a bug in the remote TCP/IP stack, these ICMP
error messages will also contain fragments of the content 
of the remote kernel memory.

An attacker may use this flaw to remotely sniff what is going into
the host's memory, especially network packets that it sees, and
obtain useful information such as POP passwords, HTTP authentication
fields, and so on.");
  # http://web.archive.org/web/20050414193949/http://www.cartel-securite.fr/pbiondi/adv/CARTSA-20030314-icmpleak.txt
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?a7b08d5e");
  # http://web.archive.org/web/20050430054913/http://www.cartel-securite.fr/pbiondi/python/icmpleaktest.py
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?9eeb958c");
  # http://web.archive.org/web/20050422102918/http://www.cartel-securite.fr/pbiondi/adv/CARTSA-20030314-icmpleak
  script_set_attribute(attribute:"see_also", value:"http://www.nessus.org/u?5ac5b22d");
  script_set_attribute(attribute:"solution", value:
"Contact your vendor for a fix. If the remote host is running
Linux 2.0, upgrade to Linux 2.0.40.");
  script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:N");

  script_set_attribute(attribute:"vuln_publication_date", value:"2003/06/09");
  script_set_attribute(attribute:"plugin_publication_date", value:"2003/06/09");

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

  script_category(ACT_GATHER_INFO);
  script_family(english:"Misc.");

  script_copyright(english:"This script is Copyright (C) 2003-2022 Tenable Network Security, Inc.");

  script_dependencies("os_fingerprint.nasl");
  script_require_keys("Settings/ThoroughTests");

  exit(0);
}




#
# The script code starts here
# 

include('global_settings.inc');


if ( TARGET_IS_IPV6 ) exit(0);
if(islocalhost())exit(0);
if ( !thorough_tests) exit(0);

os = get_kb_item("Host/OS");
if ( os && !egrep(pattern:"Linux 2\.[0-2]", string:os) ) exit(0);


# Sends a fragmented ping packet
function send_frag_ping()
{
	local_var filter, i, ip, icmp, rep;

	ip = forge_ip_packet(ip_hl : 5, ip_v : 4, ip_tos: 0, ip_len : 46,
ip_id: rand(), ip_off: IP_MF, ip_ttl: 64, ip_p : IPPROTO_ICMP, ip_src : compat::this_host(), ip_dst:get_host_ip());

	icmp = forge_icmp_packet(ip:ip, icmp_type:8, icmp_code:0, icmp_seq:0, icmp_id:0, data:crap(length:18, data:"X"));

	filter = string("icmp and src ", get_host_ip(), " and icmp[0] = 11 and icmp[1] = 1 and icmp[36]=88 and icmp[37]=88");
	
	for(i=0;i<5;i++)
	{
	 send_packet(icmp, pcap_active:FALSE);
	 sleep(1);
	}
	
	rep = send_packet(icmp, pcap_active:TRUE, pcap_filter:filter, pcap_timeout:31);
	if(rep) return(rep);
	else return NULL;
}


rep = send_frag_ping();
if( rep != NULL )
{
 start = 20 + 8 + 28;
 end   = strlen(rep);
 for(i = start ; i < end ; i ++)
 {
  if(rep[i] != "X" )
  {
    security_warning(proto:"icmp", port:0);
    exit(0);
  }
 }
}
Related for ICMP_LEAK.NASL