Memcached-инъекции - они существуют и работают, Иван...

33
Memcached- инъекции: они существуют и работают Иван Новиков (ONsec)

description

Доклад Ивана Новикова на HighLoad++ 2014.

Transcript of Memcached-инъекции - они существуют и работают, Иван...

Page 1: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Memcached-инъекции: они существуют и работаютИван Новиков (ONsec)

Page 2: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Memcached BIO• Key-value in-memory database

• Very popular for session storagea and caching data/objects

• Supports by all popular platforms and frameworks

Page 3: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Shodan stats

Page 4: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Commands types

Page 5: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

How applications uses memcachedWhat data stored?

• Session storage: serialized data

• Caching data: strings, serialized data

• Commonly to store code (templates, others)

Page 6: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

How applications uses memcachedHow data stored?

• Keys typically contains prefixes (namespaces) “Object\Cache\Templates\”

• Key after prefix commonly depends on user’s data “…\login”

• Arbitrary key writing gain auth bypass by design

Page 7: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Memcached wrappers

• Format protocol packet (input validation, length calculation, etc)

• Send/retrieve results (socket operations)

• Process data (cast to type, unserialize and others)

Page 8: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Scope of research

Page 9: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)
Page 10: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)
Page 11: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Injection types

Page 12: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Memcached wrappers

• Missed validation of commands delimiters (0x0a, 0x0d) at keys

• Inject your command after application’s command

• No other restrictions (no role model on commands)

Page 13: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Memcached wrappers

?key=1%0d%0a1%0d%0aset+injected+0+3600+10%0d%0a1234567890%0d%0a

Page 14: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#1 Command injection

Page 15: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#1 Who is vulnerable

Page 16: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#2 State breaking

• Missed validation of command format (key name, attributes count)

• Send whole packet, doesn’t read first response to first line

• Data will be interpreted as new command

Page 17: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#2 State breaking

?k=aaa…{251}&v=set+injected+0+3600+10%0a%0d1234567890

Page 18: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#2 State breaking

Page 19: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#2 State breaking

• Ruby example

• memcache gem 1.5.1 (https://rubygems.org/gems/memcache)

• This wrapper filtered 0x0a, 0x20, but not 0x00 and 0x0d

Page 20: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#2 State breaking

• Ruby example

• memcache gem 1.5.1 (https://rubygems.org/gems/memcache)

Page 21: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#2 State breaking

Page 22: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#2 Who is vulnerable

Page 23: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#3 Argument injection

• Missed validation of argument delimiters (only 0x20)

• Inject your argument to break length (argument shifting)

• Part of value field will be interpreted as new command

Page 24: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#3 Argument injection

?k=1 0&v=1…{30}%0d%0aset+injected+0+3600+3%0a%0dINJ

Page 25: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#3 Argument injection

Page 26: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

#3 Who is vulnerable

Page 27: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Post exploitation

Right, we can execute arbitrary memcached commands!

For what?

• Write/rewrite/delete arbitrary keys

• Send retrieve commands, but it never been reader by driver

Page 28: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Application level

Right, we can execute arbitrary memcached commands!

• To read data you need application-level driver

• Values deserialize + injection = CWE-502 (http://cwe.mitre.org/data/definitions/502.html)

Page 29: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Deserialization

Page 30: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)
Page 31: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Stats

Page 32: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

StatsI’m a champion!

Page 33: Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)

Thx!

@d0znpp

http://wallarm.com