Asterisk Project Security Advisory - AST-2008-005 +------------------------------------------------------------------------+ | Product | Asterisk | |----------------------+-------------------------------------------------| | Summary | HTTP Manager ID is predictable | |----------------------+-------------------------------------------------| | Nature of Advisory | An attacker could hijack a manager session | |----------------------+-------------------------------------------------| | Susceptibility | All users using the HTTP manager port | |----------------------+-------------------------------------------------| | Severity | Minor | |----------------------+-------------------------------------------------| | Exploits Known | No | |----------------------+-------------------------------------------------| | Reported On | February 25, 2008 | |----------------------+-------------------------------------------------| | Reported By | Dino A. Dai Zovi < ddz AT theta44 DOT org > | |----------------------+-------------------------------------------------| | Posted On | March 18, 2008 | |----------------------+-------------------------------------------------| | Last Updated On | March 18, 2008 | |----------------------+-------------------------------------------------| | Advisory Contact | Tilghman Lesher < tlesher AT digium DOT com > | |----------------------+-------------------------------------------------| | CVE Name | CVE-2008-1390 | +------------------------------------------------------------------------+ +------------------------------------------------------------------------+ | Description | Due to the way that manager IDs are calculated, this | | | 32-bit integer is likely to have a much larger than | | | average number of 1s, which greatly reduces the number | | | of guesses an attacker would have to make to | | | successfully predict the manager ID, which is used | | | across multiple HTTP queries to hold manager state. | | | | | | "The issue is the generation of session ids in the | | | AsteriskGUI HTTP server. | | | | | | When using Glibc, the implementation and state of rand() | | | and random() is | | | | | | shared. Asterisk uses random() to issue MD5 digest | | | authentication | | | | | | challenges and rand() bitwise-ORed with a malloc'd | | | pointer to generate | | | | | | AsteriskGUI session identifiers. An attacker can | | | synchronize with | | | | | | random() by retrieving 32 successive challenges and | | | predict all subsequent | | | | | | output of calls to random() and rand(). Because a | | | pointer returned by | | | | | | malloc has at best 21 bits of entropy, the attacker will | | | on average only | | | | | | need to guess 1448 session identifiers in order to steal | | | an established | | | | | | session. | | | | | | "The crux of the problem is that under Glibc, the | | | implementation of rand() | | | | | | and random() is shared. rand() is just an alias to | | | random(). This means | | | | | | that they all come from the same randomizer with the | | | same state. | | | | | | "A remote attacker can synchronize with all subsequent | | | output of a remote | | | | | | system's random() state by just observing or retrieving | | | 32 successive | | | | | | outputs. They can easily do this by generating 32 MD5 | | | digest | | | | | | authentication challenges. At this point, they will be | | | able to predict | | | | | | all subsequent output of random() and rand(). | | | | | | "The memory address returned by calloc() is also not | | | sufficiently random. | | | | | | In practice, it will be in low memory, immediately | | | following the executable. | | | | | | In addition, the buffer returned will be 8-byte aligned. | | | This means that | | | | | | the high order 8 bits and low order 3 bits will always | | | be zero. Finally, | | | | | | this value is bitwise ORed with the output of random(), | | | so any bits that | | | | | | are set will be preserved. | | | | | | "An attacker will only have to guess 2^N session ids, | | | where N is the number | | | | | | of zeros in the number return by random() between bit | | | positions 3 and 24. | | | | | | On average, this will be 1448 guesses. | | | | | | "However, an attacker can do better than this by | | | consuming challenges until | | | | | | the following number output by random() has many 1's in | | | those significant | | | | | | bit positions." | +------------------------------------------------------------------------+ +------------------------------------------------------------------------+ | Resolution | To mitigate this attack, the two values are now XORed | | | together. This will increase the entropy to approximately | | | 2^21, which is far more difficult to predict, especially | | | given that the random number generator is used for other | | | purposes in Asterisk, not just manager HTTP session ID | | | generation. | | | | | | Upgrade to SVN revision 104704 or greater, or upgrade to | | | one of the releases below. That the random number | | | generator is used for other things makes this attack | | | extremely difficult and unlikely, so we will not produce | | | a separate release for this security advisory. | +------------------------------------------------------------------------+ +------------------------------------------------------------------------+ | Affected Versions | |------------------------------------------------------------------------| | Product | Release | | | | Series | | |----------------------------+-------------+-----------------------------| | Asterisk Open Source | 1.0.x | Not affected | |----------------------------+-------------+-----------------------------| | Asterisk Open Source | 1.2.x | Not affected | |----------------------------+-------------+-----------------------------| | Asterisk Open Source | 1.4.x | All versions prior to | | | | 1.4.19-rc3 | |----------------------------+-------------+-----------------------------| | Asterisk Open Source | 1.6.x | All versions prior to | | | | 1.6.0-beta6 | |----------------------------+-------------+-----------------------------| | Asterisk Business Edition | A.x.x | Not affected | |----------------------------+-------------+-----------------------------| | Asterisk Business Edition | B.x.x | Not affected | |----------------------------+-------------+-----------------------------| | Asterisk Business Edition | C.x.x | All versions prior to C.1.6 | |----------------------------+-------------+-----------------------------| | AsteriskNOW | pre-release | All versions prior to 1.0.2 | |----------------------------+-------------+-----------------------------| | Asterisk Appliance | SVN | All revisions prior to | | Developer Kit | | 104704 | |----------------------------+-------------+-----------------------------| | s800i (Asterisk Appliance) | 1.0.x | All versions prior to | | | | 1.1.0.2 | +------------------------------------------------------------------------+ +------------------------------------------------------------------------+ | Corrected In | |------------------------------------------------------------------------| | Product | Release | |--------------------------------------+---------------------------------| | Asterisk Open Source | 1.4.19-rc3, 1.6.0-beta6 | |--------------------------------------+---------------------------------| | Asterisk Business Edition | C.1.6 | |--------------------------------------+---------------------------------| | AsteriskNOW | 1.0.2 | |--------------------------------------+---------------------------------| | Asterisk Appliance Developer Kit | Asterisk 1.4 revision 104704 | |--------------------------------------+---------------------------------| | s800i (Asterisk Appliance) | 1.1.0.2 | +------------------------------------------------------------------------+ +------------------------------------------------------------------------+ | Links | | +------------------------------------------------------------------------+ +------------------------------------------------------------------------+ | Asterisk Project Security Advisories are posted at | | http://www.asterisk.org/security | | | | This document may be superseded by later versions; if so, the latest | | version will be posted at | | http://downloads.digium.com/pub/security/AST-2008-005.pdf and | | http://downloads.digium.com/pub/security/AST-2008-005.html | +------------------------------------------------------------------------+ +------------------------------------------------------------------------+ | Revision History | |------------------------------------------------------------------------| | Date | Editor | Revisions Made | |-----------------+------------------------+-----------------------------| | 2008-03-18 | Tilghman Lesher | Initial release | +------------------------------------------------------------------------+ Asterisk Project Security Advisory - AST-2008-005 Copyright (c) 2008 Digium, Inc. All Rights Reserved. Permission is hereby granted to distribute and publish this advisory in its original, unaltered form.