Network Management SPAM Rejected ***ALERT******ALERT******ALERT******ALERT******ALERT*** If you have received this message, your email has been marked SPAM by NETMAN.COM. The message has not been forwarded on to the intended user. We do NOT ALLOW unsolicited emailing on this domain.
Please remove this email address from your lists. If your email was NOT unsolicited, please contact the Email user for futher options. You can also check the HEADER of the message to see if your mail server is listed on our Relay Black Lists. We use SPAMCOP, RELAYS.VISI.COM and ORDB.ORG. You should see an X-HEADER (see below) with the relay list that listed your server. Contact the relay list provider for further removal instructions. Network Management, Inc. Original Message: Received: from SMTP32-FWD by sbnets.com (SMTP32) id AB05CA8CE0080182A; Sat, 18 Nov 2006 19:18:13 -0600 Received: from master.debian.org [70.103.162.29] by mail.netman.com with ESMTP (SMTPD32-8.15) id A05CA8CE0080; Sat, 18 Nov 2006 19:16:12 -0600 Received: from qa by master.debian.org with local (Exim 4.50) id 1GlbI2-0000qe-9z for [EMAIL PROTECTED]; Sun, 19 Nov 2006 01:16:10 +0000 Received: from spohr.debian.org ([140.211.166.43]) by master.debian.org with esmtp (Exim 4.50) id 1Glalp-0006CP-Rn for [EMAIL PROTECTED]; Sun, 19 Nov 2006 00:42:54 +0000 Received: from debbugs by spohr.debian.org with local (Exim 4.50) id 1GlacL-0003h6-6l; Sat, 18 Nov 2006 16:33:05 -0800 X-Loop: [EMAIL PROTECTED] Subject: Bug#395080: CVE-2006-5445: Denial of service in chan_sip Reply-To: Ben Hutchings <[EMAIL PROTECTED]>, [EMAIL PROTECTED] Resent-From: Ben Hutchings <[EMAIL PROTECTED]> Resent-To: debian-bugs-dist@lists.debian.org Resent-CC: Debian VoIP Team <[EMAIL PROTECTED]> Resent-Date: Sun, 19 Nov 2006 00:33:04 +0000 Resent-Message-Id: <[EMAIL PROTECTED]> X-Debian-PR-Message: report 395080 X-Debian-PR-Package: asterisk X-Debian-PR-Keywords: security X-Debian-PR-Source: asterisk Received: via spool by [EMAIL PROTECTED] id=B395080.116389617328043 (code B ref 395080); Sun, 19 Nov 2006 00:33:04 +0000 Received: (at 395080) by bugs.debian.org; 19 Nov 2006 00:29:33 +0000 Received: from shadbolt.e.decadent.org.uk ([88.96.1.126]) by spohr.debian.org with esmtp (Exim 4.50) id 1GlaYv-0007HP-4C for [EMAIL PROTECTED]; Sat, 18 Nov 2006 16:29:33 -0800 Received: from [192.168.4.138] (helo=deadeye.i.decadentplace.org.uk) by shadbolt.decadent.org.uk with esmtp (Exim 4.50) id 1GlaYl-0008N4-Kp for [EMAIL PROTECTED]; Sun, 19 Nov 2006 00:29:29 +0000 Received: from womble by deadeye.i.decadentplace.org.uk with local (Exim 4.63) (envelope-from <[EMAIL PROTECTED]>) id 1GlaYx-0008Sz-D0 for [EMAIL PROTECTED]; Sun, 19 Nov 2006 00:29:35 +0000 From: Ben Hutchings <[EMAIL PROTECTED]> To: [EMAIL PROTECTED] Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-P2fnCnnG9WVR+A50K/+E" Date: Sun, 19 Nov 2006 00:29:35 +0000 Message-Id: <[EMAIL PROTECTED]> MIME-Version: 1.0 X-Mailer: Evolution 2.6.3 X-Sa-Exim-Connect-Ip: 192.168.4.138 X-Sa-Exim-Mail-From: [EMAIL PROTECTED] X-Sa-Exim-Version: 4.2 (built Thu, 03 Mar 2005 10:44:12 +0100) X-Sa-Exim-Scanned: Yes (on shadbolt.decadent.org.uk) X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2005_01_02 (1.212-2003-09-23-exp) on spohr.debian.org X-Spam-Level: X-Spam-Status: No, hits=-3.0 required=4.0 tests=BAYES_00 autolearn=no version=2.60-bugs.debian.org_2005_01_02 Resent-Sender: Debian BTS <[EMAIL PROTECTED]> Resent-Date: Sat, 18 Nov 2006 16:33:05 -0800 Delivered-To: [EMAIL PROTECTED] Precedence: list X-Loop: [EMAIL PROTECTED] X-PTS-Package: asterisk X-PTS-Keyword: bts X-Unsubscribe: echo 'unsubscribe asterisk' | mail [EMAIL PROTECTED] X-IMAIL-SPAM-DNSBL: (SpamCop,b05ca8ce0080182a,127.0.0.2) --=-P2fnCnnG9WVR+A50K/+E Content-Type: text/plain Content-Transfer-Encoding: quoted-printable The fix for CVE-2006-5445 in the 1.2 branch appears to be: http://svn.digium.com/view/asterisk/branches/1.2/channels/chan_sip.c?r1=3D4= 5306&r2=3D45380 There's no corresponding fix in the 1.0 branch. Here's my attempt at backporting it. This is untested, since I don't run Asterisk myself. The initialisation of the SIP context (sip_pvt) is a bit different in 1.0 and I've copied what looks like the corresponding code from sip_alloc() into transmit_response_using_temp(). I added a call to build_contact() because __send_response() indirectly uses the our_contact member. In 1.0 there's no validate commands before the call find_call() and there's no sip_method array. Therefore I wrote string comparisons against all the commands that are allowed to create a new SIP context based on the flags in the 1.2 code, minus "PUBLISH" because that isn't supported at all (I'm not sure this is correct; we may end up sending the wrong error message). Ben. --- asterisk-1.0.7.dfsg.1/channels/chan_sip.c.orig 2006-11-18 20:25:43.0000= 00000 +0000 +++ asterisk-1.0.7.dfsg.1/channels/chan_sip.c 2006-11-18 23:22:41.000000000= +0000 @@ -557,6 +557,7 @@ static struct ast_ha *localaddr; =20 static struct ast_frame *sip_read(struct ast_channel *ast); +static int transmit_response_using_temp(char *callid, struct sockaddr_in *= sin, int useglobal_nat, struct sip_request *req, char *msg); static int transmit_response(struct sip_pvt *p, char *msg, struct sip_requ= est *req); static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct= sip_request *req, int retrans); static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struc= t sip_request *req, char *rand, int reliable, char *header); @@ -2364,7 +2365,7 @@ char *callid; char tmp[256] =3D ""; char iabuf[INET_ADDRSTRLEN]; - char *cmd; + const char *cmd =3D req->rlPart1; char *tag =3D "", *c; =20 callid =3D get_header(req, "Call-ID"); @@ -2378,11 +2379,6 @@ SIP implementations, and thus Asterisk does not enable this behavior by default. Short version: You'll need this option to support confere= ncing on the pingtel */ - strncpy(tmp, req->header[0], sizeof(tmp) - 1); - cmd =3D tmp; - c =3D strchr(tmp, ' '); - if (c) - *c =3D '\0'; if (!strcasecmp(cmd, "SIP/2.0")) strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1); else @@ -2414,9 +2410,19 @@ p =3D p->next; } ast_mutex_unlock(&iflock); - p =3D sip_alloc(callid, sin, 1); - if (p) - ast_mutex_lock(&p->lock); + + if (strcasecmp(cmd, "REGISTER") + && strcasecmp(cmd, "OPTIONS") + && strcasecmp(cmd, "INVITE") + && strcasecmp(cmd, "SUBSCRIBE") + && strcasecmp(cmd, "MESSAGE")) { + if (strcasecmp(cmd, "RESPONSE")) + transmit_response_using_temp(callid, sin, 1, req, "481 Call leg/transac= tion does not exist"); + } else { + p =3D sip_alloc(callid, sin, 1); + if (p) + ast_mutex_lock(&p->lock); + } return p; } =20 @@ -3218,6 +3224,45 @@ return send_response(p, &resp, reliable, seqno); } =20 +/*--- transmit_response_using_temp: Transmit response, no retransmits, usi= ng temporary pvt */ +static int transmit_response_using_temp(char *callid, struct sockaddr_in *= sin, int useglobal_nat, struct sip_request *req, char *msg) +{ + struct sip_pvt *p =3D alloca(sizeof(*p)); + char iabuf[INET_ADDRSTRLEN]; + + memset(p, 0, sizeof(*p)); + + if (sin) { + memcpy(&p->sa, sin, sizeof(p->sa)); + if (ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip)) + memcpy(&p->ourip, &__ourip, sizeof(p->ourip)); + } else + memcpy(&p->ourip, &__ourip, sizeof(p->ourip)); + p->branch =3D rand(); + p->tag =3D rand(); + p->ocseq =3D 101; + + if (useglobal_nat && sin) { + /* Setup NAT structure according to global settings if we have an addres= s */ + p->nat =3D global_nat; + memcpy(&p->recv, sin, sizeof(p->recv)); + } + + strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1); + /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */ + if (p->nat !=3D SIP_NAT_NEVER) + snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=3Dz9hG4bK%08x= ;rport", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch)= ; + else + snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=3Dz9hG4bK%08x= ", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch); + strncpy(p->callid, callid, sizeof(p->callid) - 1); + + build_contact(p); + + __transmit_response(p, msg, req, 0); + + return 0; +} + /*--- transmit_response: Transmit response, no retransmits */ static int transmit_response(struct sip_pvt *p, char *msg, struct sip_requ= est *req)=20 { -- END -- --=20 Ben Hutchings Reality is just a crutch for people who can't handle science fiction. --=-P2fnCnnG9WVR+A50K/+E Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) iD8DBQBFX6Vv79ZNCRIGYgcRAsZeAJ4lC0tX3UdP2HVf4jlti+PpIti1tQCbB/2m m7IYohGCKFNDQ5/XwXNga3w= =CLSC -----END PGP SIGNATURE----- --=-P2fnCnnG9WVR+A50K/+E-- -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]