CVE:CVE-2007-2218
CNNVD:CNNVD-200706-195
Microsoft Windows是美国微软（Microsoft）公司发布的一系列操作系统。
Windows的安全通道(SChannel)库在实现客户端SSLv3握手协议时存在单字节堆溢出漏洞，远程攻击者可能利用此漏洞控制服务器或造成拒绝服务。
具体来讲，在处理服务器密钥交换SSL握手记录时没有充分地检查长度字段设置为0的畸形服务器端数字签名，导致在有效的堆地址上分配0长度的堆缓冲区，然后执行的逆向内存拷贝将0长度减1拷贝数字签名，这会触发整数下溢，导致堆缓冲区指针退到起始地址之前，最终导致将1字节的用户控制值覆盖到堆控制块。
漏洞代码位于_ReverseMemCopy()函数中，可从Ssl3ParseServerKeyExchange()通过SPProcessHandshake()->PkcsGenerateClientExchangeValue()访问：
; On WinXP-SP1, the code below is located at 0x767FF976 (no symbols 
available)
Ssl3ParseServerKeyExchange()
...                                                           
.text:767FFFC8                 movzx   ebx, byte ptr [esi]      ; 
MSB-byte of malformed signature length field               
.text:767FFFCB                 movzx   eax, byte ptr [esi+1]    ; 
LSB-byte of malformed signature length field
.text:767FFFCF                 shl     ebx, 8
.text:767FFFD2                 add     ebx, eax
.text:767FFFD4                 push    ebx                      ; size=0
.text:767FFFD5                 call    _SPExternalAlloc@4       ; HeapAlloc will return a valid 0-length heap buffer address
.text:767FFFDA                 test    eax, eax
.text:767FFFDC                 mov     [ebp+pbSignature], eax
.text:767FFFDF                 jz      loc_768000B9
.text:767FFFE5                 push    ebx                      ; size=0
.text:767FFFE6                 lea     ecx, [esi+2]             ; 
address of the signature data in our malformed record
                                                                ; 
containing 0xFF,0x41,0x41...
.text:767FFFE9                 push    ecx
.text:767FFFEA                 push    eax                      ; 
0-length heap buffer
.text:767FFFEB                 call    _ReverseMemCopy@12
        _ReverseMemCopy()
        .text:767FF46F                 mov     edi, edi
        .text:767FF471                 push    ebp
        .text:767FF472                 mov     ebp, esp
        .text:767FF474                 mov     eax, [ebp+arg_8]
        .text:767FF477                 mov     ecx, [ebp+arg_4]
        .text:767FF47A                 push    esi
        .text:767FF47B                 mov     esi, [ebp+arg_0]
        .text:767FF47E                 lea     eax, [esi+eax-1]         
; EAX=0, ESI which points to 0-length heap buffer
; is decremented to, before start of heap buffer
        .text:767FF482                 mov     dl, [ecx]
        .text:767FF484                 mov     [eax], dl                
; Off-by-one overwrite with 0xFF from our signature data
        .text:767FF486                 dec     eax
        .text:767FF487                 inc     ecx
        .text:767FF488                 cmp     eax, esi
        .text:767FF48A                 jnb     short loc_767FF482       
; Just one-byte overwrite!     
        .text:767FF48C                 pop     esi
        .text:767FF48D                 pop     ebp
        .text:767FF48E                 retn    0Ch
如果用户使用Internet Web浏览器查看特制网页或使用利用SSL/TLS的应用程序，则此漏洞可能允许远程执行代码。 但是，利用此漏洞的尝试最有可能导致Internet Web浏览器或应用程序退出。重新启动系统之前，系统不能使用SSL或TLS连接到网站或资源。
solution:Upgrade microsoft windows_2000 to a higher version than *:sp4,and avoid the version *:sp4; Upgrade microsoft windows_2003_server to a higher version than sp1,sp2,and avoid the version sp1,sp2; Upgrade microsoft windows_xp to a higher version than *:sp2,and avoid the version *:sp2