Top Banner
Rails (In)Security
21

Smau Milano 2102 Maurizio Del Corno

Dec 01, 2014

Download

Technology

Smau

Rails In Security
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Smau Milano 2102 Maurizio Del Corno

Rails (In)Security

Page 2: Smau Milano 2102 Maurizio Del Corno

$ whoami

Maurizio Del Corno

Security Consultant

Developer

Page 3: Smau Milano 2102 Maurizio Del Corno

DAFAQ IS RAILS?

• Rails è un Framework

• Creato da @dhh

• Costruito su Ruby

Page 4: Smau Milano 2102 Maurizio Del Corno

INSTALL @ WINDOWS

http://railsinstaller.org/

Page 5: Smau Milano 2102 Maurizio Del Corno

SECURE BY DESIGN

• CSRF Protection

• SQLi praticamente impossibili

• Tutto escapato

Page 6: Smau Milano 2102 Maurizio Del Corno

MA QUESTO NON CI SALVA DEL TUTTO!

Page 7: Smau Milano 2102 Maurizio Del Corno

REGULAR EXPRESSION IN RUBY ovvero come RTFM ci avrebbe potuto salvare

UOT?

Page 8: Smau Milano 2102 Maurizio Del Corno

STOP! HAMMER TIME!

Page 9: Smau Milano 2102 Maurizio Del Corno
Page 10: Smau Milano 2102 Maurizio Del Corno

MATCH vs #{HTTP_VERB}

Page 11: Smau Milano 2102 Maurizio Del Corno

Rails implementa una protezione contro il CSRF…

…ma solo su POST (e giustamente!)

Page 12: Smau Milano 2102 Maurizio Del Corno

Per definire una rotta possiamo usare il verbo HTTP

post ‘/path/che/vogliamo’ => ‘controller#method’

match ‘/path/che/vogliamo’ => ‘controller#method’

Oppure possiamo usare la funzione “match”

Page 13: Smau Milano 2102 Maurizio Del Corno

RISULTATO:

POST

POST

POST

GET

U MAD BRO?

Page 14: Smau Milano 2102 Maurizio Del Corno

ENCODERS

Rails fa escaping di tutto di default… o quasi!

JSON, Javascript & CSS vengono passati “as is”!

Page 15: Smau Milano 2102 Maurizio Del Corno

HACKERS

MASS ASSIGNMENT

Page 16: Smau Milano 2102 Maurizio Del Corno

C’era una volta

E il suo grande amico…

…BENDER?!?!

Page 17: Smau Milano 2102 Maurizio Del Corno
Page 18: Smau Milano 2102 Maurizio Del Corno

MA COME E’ POSSIBILE?

Abuso della funzione Model.update_attributes(*args)

In questo modo il nostro controller accetta parametri del tipo:

=> /path?model[attr1]=val&model[attr1]=val&model[attr1]=val

E possiamo aggiornali come:

=> Model.update_attributes(params[:model])

…e se tra i parametri inseriamo qualcosa che nel form non c’è?

Page 19: Smau Milano 2102 Maurizio Del Corno

Come per esempio inserire tra le chiavi pubbliche la nostra?

<input type=“hidden” value=“USER_ID” name=“public_key[user_id]”>

L’avete messo attr_accessible vero??

Page 20: Smau Milano 2102 Maurizio Del Corno

ALL’INIZIO AVEVO DETTO CHE LE SQLi ERANO

“PRATICAMENTE” IMPOSSIBILI

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-2695

Page 21: Smau Milano 2102 Maurizio Del Corno

GRAZIE DELL’ATTENZIONE