Программа:
Microsoft Windows 2000 Advanced Server
Microsoft Windows 2000 Datacenter Server
Microsoft Windows 2000 Professional
Microsoft Windows 2000 Server
Microsoft Windows NT 4.0 Server
Microsoft Windows NT 4.0 Server, Terminal Server Edition
Microsoft Windows NT 4.0 Workstation
Microsoft Windows Server 2003 Datacenter Edition
Microsoft Windows Server 2003 Enterprise Edition
Microsoft Windows Server 2003 Standard Edition
Microsoft Windows Server 2003 Web Edition
Microsoft Windows XP Home Edition
Microsoft Windows XP Professional
Три уязвимости обнаружено в Microsoft Windows в DCOM интерфейсе.
Удаленный атакующий может выполнить произвольный код на системе через
135-139, 445, 593 порты и в некоторых случаях через
80 (http) и 443 (https) порты. Уязвимости воздействует на DCOM (Distributed Component Object Model)
интерфейс внутри RPCSS службы и связаны с переполнением буфера и
неопределенной ошибкой при обработке RPC сообщений.
Две из обнаруженных уязвимостей связанны с переполнением буфера. В
результате удаленный атакующий может выполнить произвольный код на уязвимой
системе с root привилегиями. Третья может использоваться для аварийного
завершения работы RPCSS службы. Уязвимость может эксплуатироваться через 135 (tcp/udp), 137
(udp),138 (udp), 139 (tcp), 445 (tcp/udp), 593 (tcp) порты. Также если если на сервере
включена служба COM Internet Services (CIS), то уязвимость может
эксплуатироваться через 80 и 443 TCP порты.
Уязвимость может быть воспроизведена DCERPC "bind" пакетом, за которым
следует специально сформированный DCOM object activation request пакет.
Управляя длиной поля внутри активационного пакета, пользователь может
перезаписать произвольные части динамической памяти и выполнить произвольный
код на уязвимом сервере. Посылая серию пакетов, можно вызвать исключение в пределах обычного
RtlAllocateHeap:
PAGE:77FC8F11 mov [ecx], eax
PAGE:77FC8F13 mov [eax+4], ecx
Контролируя значения eax и ecx, можно записать данные в произвольные части
памяти. Произвольный код может выполнятся различными способами, например
через unhandledexceptionfilter или заблокированный PEB указатель. В этом
случае проще всего перезаписать указатель внутри перезаписываемого .data
раздела внутри RPCSS.DLL.
.data:761BC254 off_761BC254 dd offset loc_761A1AE7 ; DATA XREF:
sub_761A19EF+1C_r
.data:761BC254 ; sub_761A19EF+11D_w
...
.data:761BC258 off_761BC258 dd offset loc_761A1B18 ; DATA XREF:
sub_761A19EF+108_w
.data:761BC258 ; sub_761A1DCF+13_r
Перезаписывая offset x761BC25 нашим выбранным EIP значением, атакующий может
контролировать выполнение программы непосредственно после переполнения.