Slide 1

Slide 1 text

Firefox Exploitation Patroklos Argyroudis Chariton Karamitas AthCon 2013 census

Slide 2

Slide 2 text

• Patroklos Argyroudis, argp • Researcher at Census, Inc. • Kernel/heap exploitation, source/binary auditing • Chariton Karamitas, huku • Researcher at Census, Inc. • Compilers, reversing, exploitation, formal methods Who we are

Slide 3

Slide 3 text

• High level overview of the jemalloc allocator • Attack techniques against jemalloc and Firefox • UAF a.k.a. use after free() • XMLSerializer() UAF vulnerability (CVE-2013-0753) • Demonstration of unmask_jemalloc Outline

Slide 4

Slide 4 text

• Several flavors (Mozilla Firefox, FreeBSD, standalone, Linux port and probably more?) • Used by: • NetBSD & FreeBSD C library • Mozilla Firefox (pretty much everywhere) • Facebook • DefCon CTF Yummy jemalloc

Slide 5

Slide 5 text

• Minimal page utilization is not important anymore • You can buy few gigabytes of RAM with a few drachm... euros! • Major design goal: Enhanced performance in retrieving data from RAM • Principle of locality • Allocated together, used together (temporal and spatial locality) • Effort to situate allocations contiguously in memory Allocator principles

Slide 6

Slide 6 text

• Firefox switched to jemalloc for dynamic memory management • On all its supported platforms: Windows, Linux, OS X, Android • Used for: DOM objects, JS objects (strings, array elements, function arguments, other JS API objects, etc) Firefox

Slide 7

Slide 7 text

jemalloc architecture

Slide 8

Slide 8 text

jemalloc architecture

Slide 9

Slide 9 text

unmask_jemalloc demo https://github.com/argp/unmask_jemalloc

Slide 10

Slide 10 text

• Adjacent region corruption [BlackHat] • Run header corruption [BlackHat] • Chunk header corruption [Phrack] • Magazine (thread cache) corruption [Phrack] • Double free - future work (maybe ;) • Use after free - our focus for this presentation Exploitation techniques

Slide 11

Slide 11 text

Adjacent region corruption

Slide 12

Slide 12 text

Run header corruption

Slide 13

Slide 13 text

Chunk header corruption

Slide 14

Slide 14 text

• One of the most prevalent vulnerability classes in the past few years • Quoting http://cwe.mitre.org/data/definitions/ 416.html: • “The use of previously-freed memory can have any number of adverse consequences, ranging from the corruption of valid data to the execution of arbitrary code, depending on the instantiation and timing of the flaw.” Use after free()

Slide 15

Slide 15 text

• Heap region gets allocated (usually holds C++ class instance), call it A • A is referenced in object B (probably a C++ container object) • A gets free()’ed but dangling references (B) remain • Attacker gains control of free()’ed region contents by manipulating the heap (e.g. using heap spraying) • A is dereferenced via the reference we hold (B), e.g. calling its functions, accessing its attributes • Code execution :) Use after free()

Slide 16

Slide 16 text

Use after free()

Slide 17

Slide 17 text

• Quoting https://developer.mozilla.org/en-US/ docs/XMLSerializer: • “XMLSerializer can be used to convert DOM subtree or DOM document into text. XMLSerializer is available to unprivileged scripts.” • XMLSerializer traverses the DOM tree to figure out which node to serialize and how to serialize it • Shit happens when the DOM tree is modified while Firefox serializes it CVE-2013-0753

Slide 18

Slide 18 text

CVE-2013-0753 Original mStream = aStream; ... rv = EncodeToString(buf); ... FlushText(buf, true); Patched rv = EncodeToString(buf); ... mStream = aStream; ... FlushText(buf, true);

Slide 19

Slide 19 text

XMLSerializer exploit demo

Slide 20

Slide 20 text

• [BlackHat] https://www.blackhat.com/html/bh- us-12/bh-us-12-archives.html#Argyroudis • [Phrack] http://phrack.org/issues.html? issue=68&id=10#article • [unmask_jemalloc] https://github.com/argp/ unmask_jemalloc References

Slide 21

Slide 21 text

Questions?