#%NASL_MIN_LEVEL 70300
#
# (C) Tenable Network Security, Inc.
#
include('deprecated_nasl_level.inc');
include('compat.inc');
if (description)
{
script_id(93534);
script_version("1.10");
script_set_attribute(attribute:"plugin_modification_date", value:"2022/04/11");
script_bugtraq_id(92888);
script_name(english:"Asterisk chan_sip Overlap Dialing Feature DoS (AST-2016-007)");
script_set_attribute(attribute:"synopsis", value:
"A telephony application running on the remote host is affected by a
denial of service vulnerability.");
script_set_attribute(attribute:"description", value:
"According to its SIP banner, the version of Asterisk running on the
remote host is 11.x prior to 11.23.1, 13.x prior to 13.11.1,
11.6-certx prior to 11.6-cert15, or 13.8-certx prior to 13.8-cert3. It
is, therefore, affected by a flaw in the overlap dialing feature in
chan_sip due to a failure to release old RTP resources before
allocating new ones. An unauthenticated, remote attacker can exploit
this to exhaust available RTP ports and stop new RTP sessions from
being created, resulting in a denial of service condition. This
vulnerability only affects installations using the overlap dialing
support feature.
Note that Nessus has not tested for this issue but has instead relied
only on the application's self-reported version number.");
script_set_attribute(attribute:"see_also", value:"http://downloads.asterisk.org/pub/security/AST-2016-007.html");
script_set_attribute(attribute:"see_also", value:"https://seclists.org/fulldisclosure/2016/Sep/16");
script_set_attribute(attribute:"see_also", value:"https://issues.asterisk.org/jira/browse/ASTERISK-26272");
script_set_attribute(attribute:"solution", value:
"Upgrade to Asterisk version 11.23.1 / 13.11.1 / 11.6-cert15 /
13.8-cert3 or later. Alternatively, disable the overlap dialing
support feature.");
script_set_cvss_base_vector("CVSS2#AV:N/AC:L/Au:N/C:N/I:N/A:P");
script_set_cvss_temporal_vector("CVSS2#E:U/RL:OF/RC:C");
script_set_cvss3_base_vector("CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H");
script_set_cvss3_temporal_vector("CVSS:3.0/E:U/RL:O/RC:C");
script_set_attribute(attribute:"vuln_publication_date", value:"2016/09/08");
script_set_attribute(attribute:"patch_publication_date", value:"2016/09/08");
script_set_attribute(attribute:"plugin_publication_date", value:"2016/09/15");
script_set_attribute(attribute:"potential_vulnerability", value:"true");
script_set_attribute(attribute:"plugin_type", value:"remote");
script_set_attribute(attribute:"cpe", value:"cpe:/a:digium:asterisk");
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) 2016-2022 Tenable Network Security, Inc.");
script_dependencies("asterisk_detection.nasl");
script_require_keys("asterisk/sip_detected", "Settings/ParanoidReport");
exit(0);
}
include("audit.inc");
include("global_settings.inc");
include("misc_func.inc");
get_kb_item_or_exit("asterisk/sip_detected");
asterisk_kbs = get_kb_list_or_exit("sip/asterisk/*/version");
if (report_paranoia < 2) audit(AUDIT_PARANOID);
is_vuln = FALSE;
not_vuln_installs = make_list();
errors = make_list();
foreach kb_name (keys(asterisk_kbs))
{
vulnerable = 0;
matches = eregmatch(pattern:"/(udp|tcp)/([0-9]+)/version", string:kb_name);
if (isnull(matches))
{
errors = make_list(errors, "Unexpected error parsing port number from '"+kb_name+"'.");
continue;
}
proto = matches[1];
port = matches[2];
version = asterisk_kbs[kb_name];
if (version == 'unknown')
{
errors = make_list(errors, "Unable to obtain version of install on " + proto + "/" + port + ".");
continue;
}
banner = get_kb_item("sip/asterisk/" + proto + "/" + port + "/source");
if (!banner)
{
# We have version but banner is missing;
# log error and use in version-check though.
errors = make_list(errors, "KB item 'sip/asterisk/" + proto + "/" + port + "/source' is missing.");
banner = 'unknown';
}
# Open Source 11.x < 11.23.1
if (version =~ "^11([^0-9]|$)" && "cert" >!< tolower(version))
{
fixed = "11.23.1";
vulnerable = ver_compare(ver:version, fix:fixed, app:"asterisk");
}
# Open Source 13.x < 13.11.1
else if (version =~ "^13([^0-9]|$)" && "cert" >!< tolower(version))
{
fixed = "13.11.1";
vulnerable = ver_compare(ver:version, fix:fixed, app:"asterisk");
}
# Asterisk Certified 11.6-certx < 11.6-cert15
else if (version =~ "^11\.6([^0-9])" && "cert" >< tolower(version))
{
fixed = "11.6-cert15";
vulnerable = ver_compare(ver:version, fix:fixed, app:"asterisk");
}
# Asterisk Certified 13.8-certx < 13.8-cert3
else if (version =~ "^13\.8([^0-9])" && "cert" >< tolower(version))
{
fixed = "13.8-cert3";
vulnerable = ver_compare(ver:version, fix:fixed, app:"asterisk");
}
if (vulnerable < 0)
{
is_vuln = TRUE;
report =
'\n Version source : ' + banner +
'\n Installed version : ' + version +
'\n Fixed version : ' + fixed +
'\n';
security_report_v4(severity:SECURITY_WARNING, port:port, proto:proto, extra:report);
}
else not_vuln_installs = make_list(not_vuln_installs, version + " on port " + proto + "/" + port);
}
if (max_index(errors))
{
if (max_index(errors) == 1) errmsg = errors[0];
else errmsg = 'Errors were encountered verifying installs : \n ' + join(errors, sep:'\n ');
exit(1, errmsg);
}
else
{
installs = max_index(not_vuln_installs);
if (installs == 0)
{
if (is_vuln) exit(0);
else audit(AUDIT_NOT_INST, "Asterisk");
}
else audit(AUDIT_INST_VER_NOT_VULN, "Asterisk", not_vuln_installs);
}
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation