[Pkg-voip-commits] r9939 - in /asterisk/trunk/debian: changelog patches/AST-2012-012 patches/AST-2012-013 patches/series

tzafrir at alioth.debian.org tzafrir at alioth.debian.org
Fri Aug 31 02:11:09 UTC 2012


Author: tzafrir
Date: Fri Aug 31 02:11:08 2012
New Revision: 9939

URL: http://svn.debian.org/wsvn/pkg-voip/?sc=1&rev=9939
Log:
* Patch AST-2012-012 (CVE-2012-2186): AMI User Shell Access with ExternalIVR
* Patch AST-2012-012 (CVE-2012-4737): ACL rules ignored during calls
  by some IAX2 peers.

Added:
    asterisk/trunk/debian/patches/AST-2012-012
    asterisk/trunk/debian/patches/AST-2012-013
Modified:
    asterisk/trunk/debian/changelog
    asterisk/trunk/debian/patches/series

Modified: asterisk/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-voip/asterisk/trunk/debian/changelog?rev=9939&op=diff
==============================================================================
--- asterisk/trunk/debian/changelog (original)
+++ asterisk/trunk/debian/changelog Fri Aug 31 02:11:08 2012
@@ -3,6 +3,9 @@
   * New upstream release (Closes: #680470):
     - Fixes AST-2012-010 (CVE-2012-3863).
     - Fixes AST-2012-011 (CVE-2012-38612).
+  * Patch AST-2012-012 (CVE-2012-2186): AMI User Shell Access with ExternalIVR
+  * Patch AST-2012-012 (CVE-2012-4737): ACL rules ignored during calls
+    by some IAX2 peers.
 
  -- Tzafrir Cohen <tzafrir at debian.org>  Fri, 31 Aug 2012 00:14:42 +0300
 

Added: asterisk/trunk/debian/patches/AST-2012-012
URL: http://svn.debian.org/wsvn/pkg-voip/asterisk/trunk/debian/patches/AST-2012-012?rev=9939&op=file
==============================================================================
--- asterisk/trunk/debian/patches/AST-2012-012 (added)
+++ asterisk/trunk/debian/patches/AST-2012-012 Fri Aug 31 02:11:08 2012
@@ -1,0 +1,124 @@
+From: Matthew Jordan <mjordan at digium.com>
+Date: Thu, 30 Aug 2012 16:05:23 +0000
+Subject: AST-2012-012: AMI User Shell Access with ExternalIVR
+Origin: http://svnview.digium.com/svn/asterisk?view=rev&rev=371998
+Bug: https://issues.asterisk.org/jira/browse/ASTERISK-20132
+CVE: CVE-2012-2186
+
+The AMI Originate action can allow a remote user to specify information that can
+be used to execute shell commands on the system hosting Asterisk. This can
+result in an unwanted escalation of permissions, as the Originate action, which
+requires the "originate" class authorization, can be used to perform actions
+that would typically require the "system" class authorization. Previous attempts
+to prevent this permission escalation (AST-2011-006, AST-2012-004) have sought
+to do so by inspecting the names of applications and functions passed in with
+the Originate action and, if those applications/functions matched a predefined
+set of values, rejecting the command if the user lacked the "system" class
+authorization. As reported by IBM X-Force Research, the "ExternalIVR"
+application is not listed in the predefined set of values. The solution for
+this particular vulnerability is to include the "ExternalIVR" application in the
+set of defined applications/functions that require "system" class authorization.
+
+Unfortunately, the approach of inspecting fields in the Originate action against
+known applications/functions has a significant flaw. The predefined set of
+values can be bypassed by creative use of the Originate action or by certain
+dialplan configurations, which is beyond the ability of Asterisk to analyze at
+run-time. Attempting to work around these scenarios would result in severely
+restricting the applications or functions and prevent their usage for legitimate
+means. As such, any additional security vulnerabilities, where an
+application/function that would normally require the "system" class
+authorization can be executed by users with the "originate" class authorization,
+will not be addressed. Instead, the README-SERIOUSLY.bestpractices.txt file has
+been updated to reflect that the AMI Originate action can result in commands
+requiring the "system" class authorization to be executed. Proper system
+configuration can limit the impact of such scenarios.
+
+See Also: http://downloads.asterisk.org/pub/security/AST-2012-012.html
+
+Reported by: Zubair Ashraf of IBM X-Force Research
+---
+ README-SERIOUSLY.bestpractices.txt |   51 ++++++++++++++++++++++++++++++++++++
+ main/manager.c                     |    1 +
+ 2 files changed, 52 insertions(+)
+
+diff --git a/README-SERIOUSLY.bestpractices.txt b/README-SERIOUSLY.bestpractices.txt
+index 0e2af3b..b470fd6 100644
+--- a/README-SERIOUSLY.bestpractices.txt
++++ b/README-SERIOUSLY.bestpractices.txt
+@@ -23,6 +23,9 @@ Sections
+ * Reducing Pattern Match Typos: 
+         Using the 'same' prefix, or using Goto()
+ 
++* Manager Class Authorizations:
++        Recognizing potential issues with certain classes of authorization
++
+ ----------------
+ Additional Links
+ ----------------
+@@ -293,3 +296,51 @@ same => n,Hangup()
+ exten => error,1,Verbose(2,Unable to lookup technology or device for extension)
+ same => n,Playback(silence/1&num-not-in-db)
+ same => n,Hangup()
++
++
++============================
++Manager Class Authorizations
++============================
++
++Manager accounts have associated class authorizations that define what actions
++and events that account can execute/receive.  In order to run Asterisk commands
++or dialplan applications that affect the system Asterisk executes on, the
++"system" class authorization should be set on the account.
++
++However, Manager commands that originate new calls into the Asterisk dialplan
++have the potential to alter or affect the system as well, even though the
++class authorization for origination commands is "originate".  Take, for example,
++the Originate manager command:
++
++Action: Originate
++Channel: SIP/foo
++Exten: s
++Context: default
++Priority: 1
++Application: System
++Data: echo hello world!
++
++This manager command will attempt to execute an Asterisk application, System,
++which is normally associated with the "system" class authorication.  While some
++checks have been put into Asterisk to take this into account, certain dialplan
++configurations and/or clever manipulation of the Originate manager action can
++circumvent these checks.  For example, take the following dialplan:
++
++exten => s,1,Verbose(Incoming call)
++same => n,MixMonitor(foo.wav,,${EXEC_COMMAND})
++same => n,Dial(SIP/bar)
++same => n,Hangup()
++
++Whatever has been defined in the variable EXEC_COMMAND will be executed after
++MixMonitor has finished recording the call.  The dialplan writer may have
++intended that this variable to be set by some other location in the dialplan;
++however, the Manager action Originate allows for channel variables to be set by
++the account initiating the new call.  This could allow the Originate action to
++execute some command on the system by setting the EXEC_COMMAND dialplan variable
++in the Variable: header.
++
++In general, you should treat the Manager class authorization "originate" the
++same as the class authorization "system".  Good system configuration, such as
++not running Asterisk as root, can prevent serious problems from arising when
++allowing external connections to originate calls into Asterisk.
++
+diff --git a/main/manager.c b/main/manager.c
+index 6808512..f2dfa32 100644
+--- a/main/manager.c
++++ b/main/manager.c
+@@ -4083,6 +4083,7 @@ static int action_originate(struct mansession *s, const struct message *m)
+ 				strcasestr(app, "agi") ||         /* AGI(/bin/rm,-rf /)
+ 				                                     EAGI(/bin/rm,-rf /)       */
+ 				strcasestr(app, "mixmonitor") ||  /* MixMonitor(blah,,rm -rf)  */
++				strcasestr(app, "externalivr") || /* ExternalIVR(rm -rf)       */
+ 				(strstr(appdata, "SHELL") && (bad_appdata = 1)) ||       /* NoOp(${SHELL(rm -rf /)})  */
+ 				(strstr(appdata, "EVAL") && (bad_appdata = 1))           /* NoOp(${EVAL(${some_var_containing_SHELL})}) */
+ 				)) {
+-- 
+1.7.10.4
+

Added: asterisk/trunk/debian/patches/AST-2012-013
URL: http://svn.debian.org/wsvn/pkg-voip/asterisk/trunk/debian/patches/AST-2012-013?rev=9939&op=file
==============================================================================
--- asterisk/trunk/debian/patches/AST-2012-013 (added)
+++ asterisk/trunk/debian/patches/AST-2012-013 Fri Aug 31 02:11:08 2012
@@ -1,0 +1,56 @@
+From: Matthew Jordan <mjordan at digium.com>
+Date: Thu, 30 Aug 2012 16:21:34 +0000
+Subject: AST-2012-013: ACL rules ignored during calls by some IAX2 peers
+Origin: http://svnview.digium.com/svn/asterisk?view=rev&rev=372015
+Bug: https://issues.asterisk.org/jira/browse/ASTERISK-20186
+CVE: CVE-2012-4737
+
+When an IAX2 call is made using the credentials of a peer defined in a dynamic
+Asterisk Realtime Architecture (ARA) backend, the ACL rules for that peer are
+not applied to the call attempt. This allows for a remote attacker who is aware
+of a peer's credentials to bypass the ACL rules set for that peer.
+
+This patch ensures that the ACLs are applied for all peers, regardless of their
+storage mechanism.
+
+See Also: http://downloads.asterisk.org/pub/security/AST-2012-013.html
+
+Reported by: Alan Frisch
+Tested by: mjordan, Alan Frisch
+---
+ channels/chan_iax2.c |   11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
+index 22b873f..d3ec720 100644
+--- a/channels/chan_iax2.c
++++ b/channels/chan_iax2.c
+@@ -7615,10 +7615,10 @@ static int check_access(int callno, struct sockaddr_in *sin, struct iax_ies *ies
+ 	i = ao2_iterator_init(users, 0);
+ 	while ((user = ao2_iterator_next(&i))) {
+ 		if ((ast_strlen_zero(iaxs[callno]->username) ||				/* No username specified */
+-			!strcmp(iaxs[callno]->username, user->name))	/* Or this username specified */
+-			&& ast_apply_ha(user->ha, &addr) 	/* Access is permitted from this IP */
++			!strcmp(iaxs[callno]->username, user->name))			/* Or this username specified */
++			&& ast_apply_ha(user->ha, &addr) == AST_SENSE_ALLOW		/* Access is permitted from this IP */
+ 			&& (ast_strlen_zero(iaxs[callno]->context) ||			/* No context specified */
+-			     apply_context(user->contexts, iaxs[callno]->context))) {			/* Context is permitted */
++				apply_context(user->contexts, iaxs[callno]->context))) {			/* Context is permitted */
+ 			if (!ast_strlen_zero(iaxs[callno]->username)) {
+ 				/* Exact match, stop right now. */
+ 				if (best)
+@@ -7674,8 +7674,9 @@ static int check_access(int callno, struct sockaddr_in *sin, struct iax_ies *ies
+ 	user = best;
+ 	if (!user && !ast_strlen_zero(iaxs[callno]->username)) {
+ 		user = realtime_user(iaxs[callno]->username, sin);
+-		if (user && !ast_strlen_zero(iaxs[callno]->context) &&			/* No context specified */
+-		    !apply_context(user->contexts, iaxs[callno]->context)) {		/* Context is permitted */
++		if (user && (ast_apply_ha(user->ha, &addr) == AST_SENSE_DENY		/* Access is denied from this IP */
++			|| (!ast_strlen_zero(iaxs[callno]->context) &&					/* No context specified */
++				!apply_context(user->contexts, iaxs[callno]->context)))) {	/* Context is permitted */
+ 			user = user_unref(user);
+ 		}
+ 	}
+-- 
+1.7.10.4
+

Modified: asterisk/trunk/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-voip/asterisk/trunk/debian/patches/series?rev=9939&op=diff
==============================================================================
--- asterisk/trunk/debian/patches/series (original)
+++ asterisk/trunk/debian/patches/series Fri Aug 31 02:11:08 2012
@@ -25,3 +25,6 @@
 menuselect_cflags
 ilbc_disable
 httpd_port
+
+AST-2012-012
+AST-2012-013




More information about the Pkg-voip-commits mailing list