[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4] xen/tools: Introduce QNX IFS loader
Oleksandr Tyshchenko writes ("[PATCH v4] xen/tools: Introduce QNX IFS loader"): > This patch was developed according to instruction: > http://www.qnx.com/developers/docs/6.4.1/neutrino/building/load_process.html ... > +static int xc_dom_probe_qnx_ifs(struct xc_dom_image *dom) > +{ ... > + /* Performs a checksums on the startup and the OS image filesystem */ > + if ( (calc_checksum((uint32_t *)startup_hdr, startup_hdr->startup_size) > != 0) || > + (calc_checksum((uint32_t *)startup_hdr + > startup_hdr->startup_size/4, > + startup_hdr->stored_size - startup_hdr->startup_size) != 0) ) Suppose that the incoming image is corrupt or malicious and startup_header.startup_size and dom->kernel_size are both equal to sizeof(startup_header)+1. (By hand I count startup_header to have size 64, so assuming that's right, and writing things in hex:) Then the first call to calc_checksum looks like this: calc_checksum( dom->kernel_blob, 0x41 ) For the first 0x10 iterations calc_checksum will read successive uint32_t's from kernel_blob (for a total of 0x40 bytes) and reduce size to 0x01. The next iteration of calc_checksum will read a uint32_t from dom->kernel_blob+0x40. But kernel_size==0x41 so this is a 3-byte buffer read overrun - a vulnerability, technically, I think. But worse happens next. calc_checksum then has size=0x01 and does size -= 4; leaving size with the value 0xfffffffd. Because size is a uint32_t this is positive, not negative, and satisfies the test in the loop. I.e. calc_checksum will continue to iterate forever. It will keep reading memory at ever increasing addresses until it hits an invalid address, and then crash. I'm afraid I think this is a readily exploitable denial of service vulnerability. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |