<?xml version="1.0"?>
<?xml-stylesheet href="../fma_report_en.xslt" type="text/xsl" ?>

<advisory xml:space="preserve">
	<meta>
		<description>IrfanView (4.27 - 4.32) JPEG 2000 Multi-Layer Image Format (JPM) Multiple Vulnerabilities</description>
		<keywords>fuzzing, security, blackbox, tests, i_view32.exe, DoS, JPM</keywords>
	</meta>

	<title>IrfanView (4.27 - 4.32) JPEG 2000 Multi-Layer Image Format (JPM) Multiple Vulnerabilities</title>
	<id>FMA-2011-001</id>
	
	<application>
		<name>IrfanView</name>
		<version>4.27 - 4.32</version>
		<url>http://www.irfanview.com</url>
		<files>
			<file>
				<name>i_view32.exe</name>
				<version>4.32</version>
				<md5>89804B494D19D98BF54F9365909E626A</md5>
			</file>
		</files>		
		<verified>
			<os>
				<name>Windows XP SP3 Home Edition</name>
			</os>
			<os>
				<name>Windows XP SP3 Professional Edition</name>
			</os>
			<os>
				<name>Windows 7 SP1 Home Premium</name>
			</os>
		</verified>
	</application>
	
	<discovery>
		<found>2011.01.13</found>
		<vendor_notified>2012.02.22</vendor_notified>
		<published>2012.03.11</published>
	</discovery>
	
	<vulnerabilities>
		<vulnerability>
			<name>Integer division by zero in JPM.dll module (version 4.32) during processing of malformed JPM file.</name>
			<type>DoS</type>
			<description>Integer division by zero in module JPM.dll at address 0x10056886 (JPM.dll is loaded at 0x10000000).</description>
			<exception>Integer division by zero exception.</exception>
<disasm>10056872   33D2             XOR EDX,EDX
10056874   8A1430           MOV DL,BYTE PTR DS:[EAX+ESI]
10056877   8B4424 24        MOV EAX,DWORD PTR SS:[ESP+24]
1005687B   8BFA             MOV EDI,EDX
1005687D   8B50 20          MOV EDX,DWORD PTR DS:[EAX+20]
10056880   8D4417 FF        LEA EAX,DWORD PTR DS:[EDI+EDX-1]
10056884   33D2             XOR EDX,EDX
10056886   F7F7             DIV EDI                                  ; Integer division by zero
10056888   33D2             XOR EDX,EDX</disasm>
			<images>
				<image>
					<thumbnail>
						<src>image01s.png</src>
						<width>100</width>
						<height>68</height>
					</thumbnail>
					<src>image01.png</src>
					<alt>Integer division by zero at address 0x10056886</alt>
					<text>Integer division by zero at address 0x10056886</text>
				</image>
			</images>
		</vulnerability>	
		
		<vulnerability>
			<name>Integer division by zero in JPM.dll module (version 4.32) during processing of malformed JPM file.</name>
			<type>DoS</type>
			<description>Integer division by zero in module JPM.dll at address 0x100568A2 (JPM.dll is loaded at 0x10000000).</description>
			<exception>Integer division by zero exception.</exception>
<disasm>10056888   33D2             XOR EDX,EDX
1005688A   8941 F8          MOV DWORD PTR DS:[ECX-8],EAX
1005688D   8B43 30          MOV EAX,DWORD PTR DS:[EBX+30]
10056890   8A1430           MOV DL,BYTE PTR DS:[EAX+ESI]
10056893   8B4424 24        MOV EAX,DWORD PTR SS:[ESP+24]
10056897   8BFA             MOV EDI,EDX
10056899   8B50 24          MOV EDX,DWORD PTR DS:[EAX+24]
1005689C   8D4417 FF        LEA EAX,DWORD PTR DS:[EDI+EDX-1]
100568A0   33D2             XOR EDX,EDX
100568A2   F7F7             DIV EDI                                  ; Integer division by zero
100568A4   33D2             XOR EDX,EDX</disasm>
			<images>
				<image>
					<thumbnail>
						<src>image02s.png</src>
						<width>100</width>
						<height>68</height>
					</thumbnail>
					<src>image02.png</src>
					<alt>Integer division by zero at address 0x100568A2</alt>
					<text>Integer division by zero at address 0x100568A2</text>
				</image>
			</images>
		</vulnerability>
		
		<vulnerability>
			<name>Access violation when reading in JPM.dll module (version 4.32) during processing of malformed JPM file.</name>
			<type>DoS</type>
			<description>Exception is caused by reading DWORD value from address 0xF00DBAAD, which is not valid.</description>
			<exception>Access violation exception at address 0x100503B6.</exception>
<disasm>100503AC   8BF2             MOV ESI,EDX
100503AE   8B4C24 18        MOV ECX,DWORD PTR SS:[ESP+18]
100503B2   8B43 1C          MOV EAX,DWORD PTR DS:[EBX+1C]
100503B5   51               PUSH ECX
100503B6   8B0CA8           MOV ECX,DWORD PTR DS:[EAX+EBP*4]         ; Read from invalid pointer
100503B9   8D5424 34        LEA EDX,DWORD PTR SS:[ESP+34]
100503BD   52               PUSH EDX
100503BE   8B53 20          MOV EDX,DWORD PTR DS:[EBX+20]</disasm>
			<images>
				<image>
					<thumbnail>
						<src>image03s.png</src>
						<width>100</width>
						<height>68</height>
					</thumbnail>
					<src>image03.png</src>
					<alt>Access violation exception at address 0x100503B6</alt>
					<text>Access violation exception at address 0x100503B6</text>
				</image>
			</images>
		</vulnerability>
		
		<vulnerability>
			<name>Access violation when writing in JPM.dll module (version 4.32) during processing of malformed JPM file.</name>
			<type>MEM</type>
			<description>Exception is caused by writing BYTE value at invalid offset calculated in allocated buffer.</description>
			<exception>Access violation exception at address 0x10013C96</exception>
<disasm>10013C82    8D0440          LEA EAX,DWORD PTR DS:[EAX+EAX*2]         ; offset
10013C85    03C2            ADD EAX,EDX                              ; buffer address
10013C87    3BE9            CMP EBP,ECX
10013C89    8BD5            MOV EDX,EBP
10013C8B    73 1A           JNB SHORT 10013CA7
10013C8D    8A4E 10         MOV CL,BYTE PTR DS:[ESI+10]
10013C90    8808            MOV BYTE PTR DS:[EAX],CL
10013C92    8A4E 11         MOV CL,BYTE PTR DS:[ESI+11]
10013C95    40              INC EAX
10013C96    8808            MOV BYTE PTR DS:[EAX],CL                 ; write byte at calculated address
10013C98    8A4E 12         MOV CL,BYTE PTR DS:[ESI+12]</disasm>
			<images>
				<image>
					<thumbnail>
						<src>image04s.png</src>
						<width>100</width>
						<height>68</height>
					</thumbnail>
					<src>image04.png</src>
					<alt>Access violation exception at address 0x10013C96</alt>
					<text>Access violation exception at address 0x10013C96</text>
				</image>
			</images>
		</vulnerability>
		
		<vulnerability>
			<name>Access violation when writing in JPM.dll module (version 4.32) during processing of malformed JPM file.</name>
			<type>MEM</type>
			<description>Exception is caused by writing BYTE value at invalid offset calculated in allocated buffer.</description>
			<exception>Access violation exception at address 0x10013C9C</exception>
<disasm>10013C82    8D0440          LEA EAX,DWORD PTR DS:[EAX+EAX*2]         ; offset
10013C85    03C2            ADD EAX,EDX                              ; buffer address
10013C87    3BE9            CMP EBP,ECX
10013C89    8BD5            MOV EDX,EBP
10013C8B    73 1A           JNB SHORT 10013CA7
10013C8D    8A4E 10         MOV CL,BYTE PTR DS:[ESI+10]
10013C90    8808            MOV BYTE PTR DS:[EAX],CL
10013C92    8A4E 11         MOV CL,BYTE PTR DS:[ESI+11]
10013C95    40              INC EAX
10013C96    8808            MOV BYTE PTR DS:[EAX],CL
10013C98    8A4E 12         MOV CL,BYTE PTR DS:[ESI+12]
10013C9B    40              INC EAX
10013C9C    8808            MOV BYTE PTR DS:[EAX],CL                 ; write byte at calculated address
</disasm>
			<images>
				<image>
					<thumbnail>
						<src>image05s.png</src>
						<width>100</width>
						<height>68</height>
					</thumbnail>
					<src>image05.png</src>
					<alt>Access violation exception at address 0x10013C9C</alt>
					<text>Access violation exception at address 0x10013C9C</text>
				</image>
			</images>
		</vulnerability>
		
		<vulnerability>
			<name>Access violation when reading in JPM.dll module (version 4.32) during processing of malformed JPM file.</name>
			<type>DoS</type>
			<description>Exception is caused by reading DWORD value at invalid address.</description>
			<exception>Access violation exception at address 0x1001F759</exception>
<disasm>1001F751    8B4424 10       MOV EAX,DWORD PTR SS:[ESP+10]            ; get buffer pointer
1001F755    85C0            TEST EAX,EAX
1001F757    74 09           JE SHORT 1001F762
1001F759    8338 00         CMP DWORD PTR DS:[EAX],0                 ; cmp</disasm>
			<images>
				<image>
					<thumbnail>
						<src>image06s.png</src>
						<width>100</width>
						<height>68</height>
					</thumbnail>
					<src>image06.png</src>
					<alt>Access violation exception at address 0x1001F759</alt>
					<text>Access violation exception at address 0x1001F759</text>
				</image>
			</images>
		</vulnerability>
		
		<vulnerability>
			<name>Access violation when writing in JPM.dll module (version 4.32) during processing of malformed JPM file.</name>
			<type>DoS</type>
			<description>Exception is caused by writing DWORD value at invalid address.</description>
			<exception>Access violation exception at address 0x1001EBA7</exception>
<disasm>1001EBA4    8B56 04         MOV EDX,DWORD PTR DS:[ESI+4]             ; pointer to output buffer
1001EBA7    890482          MOV DWORD PTR DS:[EDX+EAX*4],EAX         ; calculate offset in buffer and write DWORD</disasm>
			<images>
				<image>
					<thumbnail>
						<src>image07s.png</src>
						<width>100</width>
						<height>68</height>
					</thumbnail>
					<src>image07.png</src>
					<alt>Access violation exception at address 0x1001EBA7</alt>
					<text>Access violation exception at address 0x1001EBA7</text>
				</image>
			</images>
		</vulnerability>
		
		<vulnerability>
			<name>Code execution in JPM.dll module (version 4.32) during processing of malformed JPM file.</name>
			<type>LCE</type>
			<description>Code execution is redirected to the heap, and execution starts there.</description>
			<exception>Access violation exception at address 0x007F0069</exception>
<disasm></disasm>
			<images>
				<image>
					<thumbnail>
						<src>image08s.png</src>
						<width>100</width>
						<height>68</height>
					</thumbnail>
					<src>image08.png</src>
					<alt>Access violation exception at address 0x007F0069</alt>
					<text>Access violation exception at address 0x007F0069</text>
				</image>
			</images>
		</vulnerability>
		
	</vulnerabilities>
</advisory>