zeronights 2019 — zeronights 2019 - cisco asa: from 0 to id=0 · 2019-12-12 · •cve-2016-1287...

76
CISCO ASA: FROM 0 TO ID=0 Kaiyi.Xu (a.k.a md4) Dbappsecurity HAT Lab

Upload: others

Post on 05-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

CISCO ASA: FROM 0 TO ID=0Kaiyi.Xu (a.k.a md4)

Dbappsecurity HAT Lab

Page 2: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

About us

• Dbappsecurity Co.,Ltd• http://www.dbappsecurity.com/• Security Services and enterprise products

• Dbappsecurity HAT lab• Hack any thing• IOT、Pentesting …

2

Page 3: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Agenda

• Introduce to Cisco ASA• Hunt in Cisco ASA• Exploit the vulnerability• How to patch

3

Page 4: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Cisco ASA

• Wiki: “Cisco ASA is one of the most widely used firewall/VPN solutions for small to medium businesses”• A unified threat management device• Several network security functions

• ASA vs IOS• Similar Interface• Different Arch: ASA based on x86-64 (lina)

4

Page 5: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Cisco ASA

• ASA = Lina + Linux• Lina• The main process including most services ( Webvpn, ASDM,

SNMP etc. )• 80M+ binary and 900M+ .i64

5

Page 6: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Cisco ASA

• Lina_monitor: daemon process• Check syscalls called in lina• Monitor subprocess forked in lina• Send segment fault signal and reboot the device when

triggered

6

Page 7: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Cisco ASA

• All Traffic are blocked except those generated by Lina.

7

Page 8: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Known Attacks on ASA

• CVE-2016-1287• A heap overflow in IKE Cisco fragmentation by Exodus

Intel rewarded as best server-side bug in the Pwnie2016.

• CVE-2018-0101• Double Free when handing the host-scan-reply tag in

the Webvpn aggregateAuthEndHandler

8

Page 9: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Known Attacks on ASA• EPICBANANA• Takes advantage of default Cisco credentials (password:

cisco) to gain root privilege• ASA before 9.0

• EXTRABACON• Exploits an overflow vulnerability using the Simple

Network Management Protocol (SNMP)• Knowing the target’s uptime and software version.• ASA before 9.0

9

Page 10: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Checksec Lina• From asa 9.5.3, all security mechanisms are enabled

including PIE, ALSR, NX

10

*Reference from: https://github.com/nccgroup/asafw/tree/1e05a3500c2ad8c9fd77f67fa93cc17d7d4a703c#mitigation-summary

Page 11: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Checksec Lina

11

Page 12: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

WHERE IS THE VULNERABILITY

12

Page 13: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lina : Webvpn

• Web Interface of ASA vpn• AnyConnect Service

13

Page 14: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lina : Webvpn

• Webvpn is written in lua

• A whole lua compiler is embedded in the Lina binary

• The lua version is 5.0.2

14

Page 15: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lina : Webvpn

• All the lua source code and lua bytecode is available in the lina!

15

Page 16: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lina : Webvpn

• aware_webvpn_content• Load the Lua Source Code into

virtual file system• A huge function

16

Page 17: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lina : Webvpn

• Dump All the Lua Source Code!• Decompile the Bytecode• About 130+ lua files• More than 50000 lines

17

Page 18: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

AFTER A LONG TIME OF AUDITING

18

Page 19: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

We Found

• Several Vulnerabilities:

• Arbitrary Lua Execute with an authenticated user

• …

• …

19

Page 20: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

STORY STARTS FROM HERE

22

Page 21: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lua Sandbox

• Limited functions• Nopped execute or popen

23

Page 22: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lua Sandbox

• A key function available: loadstring()

• Load and execute the lua bytecode

24

Page 23: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lua Opcode Examples

• LOADK: load a variable into stack• JMP: lua vm pc jump to a new PC• FORPREP: starts of for loop• FORLOOP: ends of for loop

25

Page 24: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lua Sandbox

• 5.0.2 A Old Version of Lua

26

Page 25: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lua Bytecode Verifier

• Lua used to have a bytecode verifier before lua 5.2 but abandoned later• Lua 5.0.2 still have a bytecode verifier

27

Page 26: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lua Bytecode Verifier

28

Page 27: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Public Attack against Lua Bytecode Verifier

29

• Opcode `LOADK` index out of bound

Page 28: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Public Attack against Lua Bytecode Verifier

30

• Opcode `LOADK` index out of bound• Not available in 5.0.2

Page 29: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Public Attack against Lua Bytecode Verifier

31

• Opcode `FORLOOP` type confusion

Reference: https://apocrypha.numin.it/talks/lua_bytecode_exploitation.pdf

Page 30: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Public Attack against Lua Bytecode Verifier

32

• Opcode `FORLOOP` type confusion• Not available in 5.0.2

Page 31: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

SADLY NO PUBLIC EXPLOIT AVAILABLE

33

Page 32: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

HUNTING FOR A NEW ESCAPE…

34

Page 33: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lua Bytecode Escape

35

• Opcode `FORPREP`• In pairs with `FORLOOP`

by default• For compatibility only

Page 34: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lua Bytecode Escape

36

• Opcode `FORPREP`• Type iAsBx

Page 35: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Lua Bytecode Escape

37

• Opcode `FORPREP`• Awesome ! No check in the verifier !• Arbitrary PC in lua VM

Page 36: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

FROM ARBITRARY PC IN LUA VM

TO ARBITRARY CODE EXECUTION

38

Page 37: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Exploit the leak

39

• Exploit Lua 5.0.2 Ubuntu 16.04 first• Arbitrary Address Read• Arbitrary Address Write• Arbitrary Code Execution

Page 38: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Arbitrary Address Read

40

Lua

ByteCode

Lua

Page 39: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

PC Chunk

41

Lua

• 0x0 – 0x10: Linux Heap Meta0 PRVE_SIZE SIZE

0x10 PC1 PC20x20 PC3 PC40x30 … …

Page 40: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Constant Chunk

42

Lua

0 PRVE_SIZE SIZE0x10 TYPE1 VALUE10x20 TYPE2 VALUE20x30 … …

Page 41: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Arbitrary Address Read

43

Lua

• How to control some chunks?• Where is our controlled chunks?• Where is current lvm->pc?

Page 42: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Info Leak

44

Lua

Page 43: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Glibc Heap

45

Lua

Chunk size 0x50 => Fastbin => LIFO (Last In First Out)

Page 44: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Glibc Heap

46

Lua

Page 45: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Heap Fengshui

47

Lua

Page 46: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Arbitrary Address Read

48

Lua• How to control some chunks? DONE• Where is our controlled chunks? DONE• Where is current lvm->pc?

Page 47: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Heap Fengshui again

49

Lua

• Constant Chunk• PC Chunk• …

Page 48: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

Heap Fengshui again

50

Lua• PC Chunk

• Constant Chunk

0 PRVE_SIZE SIZE0x10 PC1 PC20x20 PC3 PC40x30 … …

0 PRVE_SIZE SIZE0x10 TYPE1 VALUE10x20 TYPE2 VALUE20x30 … …

Page 49: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

51

Lua

• Size of {} = 0x50• assert constant foo == 4• assert instruct foo == 8 or 9

Arbitrary Address Read

Page 50: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

52

Lua

Arbitrary Address Read

Page 51: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

53

Page 52: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

54

Page 53: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

55

Page 54: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

• Opcode `SETTABLE`

• Set table[index] = value

56

Arbitrary Address Write

Page 55: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

• Opcode `SETTABLE`• assert type == LUA_TTABLE• assert metatable valid ptr

57

Arbitrary Address Write

Page 56: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

• assert constant foo == 4• assert instruct foo == 8 or 9

58

Arbitrary Address Write

Constant Table

1 TNUMBER 12 TNUMBER 0x414141413 TSTRING “string”4 TSTRING “len”

Page 57: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

59

Arbitrary Address Write

1 TNUMBER 12 TNUMBER 0x414141413 TSTRING “string”4 TSTRING “len”

Replaced

Origin

1 TNUMBER 12 TNUMBER New Value3 TSTRING “string”4 TSTRING “len”

Page 58: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

60

Arbitrary Address Write

1 TNUMBER 1

2 TNUMBER New Value

3 TSTRING “string”

4 TSTRING “len”

Lua_TTABLE Table Pointer

… … …0x18 metatable addr to modify

… … …

Page 59: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

61

Arbitrary Address Write

1 TNUMBER 1

2 TNUMBER New Value

3 TSTRING “string”

4 TSTRING “len”

Page 60: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

62

Arbitrary Address Write

• Disadvantage:• 2 bytes will be affected

o1->tt o2->value

Page 61: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

63

Arbitrary Code Execution

• Ubuntu 16.04 without PIE• Leak the Libc base• Hijack the GOT

Page 62: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

THINGS BECOME DIFFERENT IN ASA

64

Page 63: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

65

Cisco Specific Heap Metadata

• 0x0 - 0x10 Linux Heap Metadata• 0x10 - 0x50 Cisco ASA heap Metadata• Luckily, allocator_pc is pointed in ELF (Bypass PIE Later)

0x0 PRVE_SIZE SIZE0x10 Prev_foot head0x20 mh_magic mh_len0x30 mh_refcount mh_unused0x40 mh_fd_link mh_bk_link0x50 allocator_pc free_pc0x60 chunk content

Page 64: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

66

Cisco Specific Heap Metadata

• The size of struct LUA_TTABLE( {} ) change from 0x50 to 0x90 • From fastbin to smallbin• Smallbin will be consolidated if previous or next chunk is

freed.0x0 PRVE_SIZE SIZE

0x10 Prev_foot head0x20 mh_magic mh_len0x30 mh_refcount mh_unused0x40 mh_fd_link mh_bk_link0x50 allocator_pc free_pc0x60 chunk content

Page 65: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

67

Cisco Specific Heap Metadata

• Thousands of malloc or free will be called in ASA• Make Heap fengshui extremely unstable• Solution:• Heap Spray• Allocate all fengshui continuous in avoid of consolidation

Page 66: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

68

• `dump` in the LUA will trigger the `malloc_consolidate`

• Solution:• use hex format

Page 67: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

69

Bypass Protection mechanisms

• Step1. Leak a heap address of LUA_TTABLE `{}`

• Step2: Leak the allocator_pc to get an address in ELF

• Step3: Leak the GOT of memset and got Libc_base

• Step4: Leak the `environ` in Libc_base and got stack address

Page 68: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

70

Bypass Lina Monitor

• system(‘/bin/sh’) is unavailable here.• Lina Monitor will reboot the devices when

subprocess or sensitive syscall is called.

• Solution:• Execute the shell as the Lina do• Internal Function `shell_execute`• ROP is necessary

Page 69: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

71

Bypass Network Constrains

• Traffic Constrain

• Solution:• socks_proxy_init• A out-date function• Still useful to open a

proxy in 1080 port• ROP is necessary

again!

Page 70: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

72

Then how to ROP?

• All the thread will return from `pthread_cond_timedwait`• Pre: Already known stack base• Step1: Search in the Stack to find the return address of

`pthread_cond_timedwait`• Step2: Stack Pivot to heap (leave; ret )

Page 71: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

73

How to keep ASA Stable after ROP?

• Because the current rsp point to Heap, the Lina will turn down after shell

• Solution :• Save the origin RSP, RIP and RBP• Pivot the stack back

Page 72: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

74

Combine Above ALL

• 0x1: Arbitrary address read• 0x2: Arbitrary address write• 0x3: Leak ELF_base, Libc_base and stack base• 0x4: Search in stack for ret of `pthread_cond_timedwait`• 0x5: Put ROP in the Heap• 0x6: Modify rbp=> ROP address

Page 73: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

75

Combine Above ALL

• 0x7: Modify ret => leave ret• 0x8: wait any process to trigger (5-10 seconds)• 0x9: Call socks_proxy_init by ROP• 0xA: Call shell_execute by ROP• 0xB: Pivot back from heap to stack• 0xC: ASA keep stable!

Page 74: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

76

Page 75: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

77

How to patch

• Disable loadstring of lua bytecode

Page 76: ZeroNights 2019 — ZeroNights 2019 - CISCO ASA: FROM 0 TO ID=0 · 2019-12-12 · •CVE-2016-1287 •A heap overflow in IKE Cisco fragmentation by Exodus Intel rewarded as best server-side

@author

THANKS FOR ATTENTION