Inyección, XSS, CSRF en ChelaJS
-
Upload
superserch -
Category
Technology
-
view
201 -
download
5
Transcript of Inyección, XSS, CSRF en ChelaJS
![Page 1: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/1.jpg)
Los 10 principales riesgos en aplicaciones
web(OWASP Top 10 2013)
@SuperSerch
![Page 2: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/2.jpg)
OWASP Top Ten 2013 Edition
A1: Inyección
A2: Fallos de Autenticación y
manejo de sessiones
A3: Cross-Site Scripting (XSS)
A4: Referencias inseguras a
objetos directos
A5: Mala configuración
de la seguridad
A6: Exposición de datos sensibles
A7: Falta de controles de acceso por
función
A8: Cross Site Request
Forgery (CSRF)
A9: Usar componentes
con vulnerabilidades
conocidas
A10: Redirecciones sin validación
![Page 3: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/3.jpg)
OWASP Top Ten 2013 Edition
A1: Inyección
A2: Fallos de Autenticación y
manejo de sessiones
A3: Cross-Site Scripting (XSS)
A4: Referencias inseguras a
objetos directos
A5: Mala configuración
de la seguridad
A6: Exposición de datos sensibles
A7: Falta de controles de acceso por
función
A8: Cross Site Request Forgery (CSRF)
A9: Usar componentes
con vulnerabilidades
conocidas
A10: Redirecciones sin validación
![Page 4: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/4.jpg)
A1: Inyección
• Una falla de inyección ocurre cuando se envían datos no confiables a un interprete como parte de una instrucción o una consulta.
• Los datos no confiables del atacante pueden engañar al interprete para ejecutar instrucciones no esperadas o entregar información no autorizada.
![Page 5: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/5.jpg)
A1: Inyecciónquery="SELECT * FROM users WHERE username = '" + req.query.username + "' AND password = '" + req.query.password + "'"
//… connection.query(query, function (error, results, fields) {
//… }
![Page 6: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/6.jpg)
A1: Inyecciónquery="SELECT * FROM users WHERE username = '" + req.query.username + "' AND password = '" + req.query.password + "'"
//… connection.query(query, function (error, results, fields) {
//… }
![Page 7: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/7.jpg)
A1: Inyecciónquery="SELECT * FROM users WHERE username = '" + req.query.username + "' AND password = '" + req.query.password + "'"
//… connection.query(query, function (error, results, fields) {
//… }
admin' or 1=1--
![Page 8: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/8.jpg)
A1: Inyecciónquery="SELECT * FROM users WHERE username = '" + req.query.username + "' AND password = '" + req.query.password + "'"
//… connection.query(query, function (error, results, fields) {
//… }
![Page 9: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/9.jpg)
A1: Inyección Mitigación en SQL
• No mezclar datos provenientes del usuario en la construcción de queries
• Utilizar queries parametrizados
• Sanitizar y parsear los datos antes de mezclarlos
![Page 10: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/10.jpg)
A1: Inyecciónquery="SELECT * FROM users WHERE username = ? AND password = ?"
//… connection.query(query, [req.query.username, req.query.password], function (error, results, fields) {
//… }
![Page 11: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/11.jpg)
A1: Inyecciónapp.post('/login', function (req, res) { db.users.find({username: req.body.username, password: req.body.password}, function (err, users) {
//… }) })
![Page 12: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/12.jpg)
A1: Inyecciónapp.post('/login', function (req, res) { db.users.find({username: req.body.username, password: req.body.password}, function (err, users) {
//… }) })
![Page 13: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/13.jpg)
A1: Inyecciónapp.post('/login', function (req, res) { db.users.find({username: req.body.username, password: req.body.password}, function (err, users) {
//… }) })
{ "username": {"$gt": ""}, "password": {"$gt": ""} }
![Page 14: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/14.jpg)
A1: Inyección Mitigación en MongoDB
• No mezclar datos provenientes del usuario en la construcción de queries
• Sanitizar y parsear los datos antes de mezclarlos
• Validar los datos contra valores esperados
• Usar cuentas con mínimos privilegios según la acción a realizar
![Page 15: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/15.jpg)
A1: Inyección
• eval()
• setTimeout()
• setInterval()
• new Function()
![Page 16: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/16.jpg)
A1: Inyección
• eval("…….")
• setTimeout("…….", x)
• setInterval("…….", x)
• new Function("…….")
![Page 17: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/17.jpg)
A1: Inyección
• while(1){}
• process.exit()
• process.kill(process.pid)
![Page 18: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/18.jpg)
A1: Inyección• res.end(require('fs').
readdirSync('.').toString())
• res.end(require('fs').readdirSync('..').toString())
• res.end(require('fs').readFileSync(filename))
![Page 19: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/19.jpg)
A1: Inyección Mitigación en javascript
• Validar los datos antes de procesarlos en el servidor
• No usar eval() para parsear los datos
• Evitar usar las eval, setTimeout, setInterval y Function
• Para parsear usar JSON.parse()
• Usar "use strict" al inicio de la función para limitar lo que puede hacer
![Page 20: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/20.jpg)
A3: Cross-Site Scripting (XSS)
• Ocurre cuando una aplicación toma datos de un usuario y los manda a un navegador sin una adecuada validación o escape.
• Permite que un atacante utilice nuestro sitio para ejecutar código en el navegador de la víctima.
• Existe en dos modalidades: Reflejado y Almacenado
![Page 21: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/21.jpg)
A3: Cross-Site Scripting (XSS)
app.post('/', function( req, res) { res.end("hola " + req.body.nombre) })
![Page 22: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/22.jpg)
A3: Cross-Site Scripting (XSS)
app.post('/', function( req, res) { res.end("hola " + req.body.nombre) })
<script>alert('Hola')</script>
![Page 23: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/23.jpg)
A3: Cross-Site Scripting (XSS)áreas a vigilar
Código HTML <span>DATOS<span>
Atributos HTML <input type="text" name="pnombre" value="DATOS">
URIs <a href="/site/search?value="DATOS" >Más Info</a>
JavaScript <script> var currentValue='DATOS' </script> <script> algunaFuncion('DATOS')</script>
CSS <div style="width:DATOS;">encabezado</div>
![Page 24: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/24.jpg)
A3: Cross-Site Scripting (XSS)Mitigación
• Sanitizar y Validar los datos
• Codificar la salida de forma adecuada
• Usar la opción HTTPOnly para las cookies
• Aplicar estas reglas tanto en el cliente como en el server
![Page 25: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/25.jpg)
A3: Cross-Site Scripting (XSS)Mitigación
Código HTML convertir & en & < en < > en > " en " ' en  y / en /
Atributos HTML Excepto para caracteres alfanuméricos convertir todo a entidades HTML &#xHH; (HH valor hexadecimal)
URIs Excepto para caracteres alfanuméricos convertir todo a entidades HTML &#xHH; (HH valor hexadecimal)
JavaScriptAsegurar que todas las variables tienen " y todo caracter ASCII abajo de 256 codificarlo como
unicode \uXXXX (X -> entero) ó \uxHH
CSS Excepto para caracteres alfanuméricos convertir todo caracter ASCII abajo de 256 en \HH
![Page 26: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/26.jpg)
A3: Cross-Site Scripting (XSS)Mitigación en NodeJS
swig.init({ root: __dirname + "/app/views", autoescape: true //valor por defecto })
app.use(express.session({ secret: "s3creT0", cookie: { httpOnly: true, secure: true } }))
![Page 27: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/27.jpg)
A8: Cross Site Request Forgery (CSRF)
• Consiste en forzar al navegador, autenticado, de la víctima a enviar una petición HTTP falsificada, dado que los valores de autenticación se incluyen automáticamente a cada petición, la aplicación atacada ve la petición como una solicitud autentica
![Page 28: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/28.jpg)
A8: Cross Site Request Forgery (CSRF)
Sitio vulnerable a CSRF
1. El usuario se firma a su aplicación
Sitio usado para distribuir el
ataque
2. El usuario entra a un sitio trampa
3. En el código del sitio trampa existe una llamada al sitio
vulnerable
4. El sitio vulnerable recibe la petición y la
procesa como una petición normal
![Page 29: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/29.jpg)
A8: Cross Site Request Forgery (CSRF)
Sitio vulnerable a CSRF
1. El usuario se firma a su aplicación
Sitio usado para distribuir el
ataque
2. El usuario entra a un sitio trampa
3. En el código del sitio trampa existe una llamada al sitio
vulnerable
4. El sitio vulnerable recibe la petición y la
procesa como una petición normal
<img src=”https://www.bancoenlinea/usuario/transfiere?ctaDestino=A113&cantidad=1000" />
![Page 30: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/30.jpg)
A8: Cross Site Request Forgery (CSRF)Mitigación
• Agregar un “secreto” (token) que no se envíe automáticamente a todas las peticiones sensibles
• Los Tokens deben ser criptográficamente fuertes o completamente aleatorios
• No permitas que los atacantes coloquen ataques en tus sitios
• Codifica adecuadamente todo dato que recibas de los usuarios
![Page 31: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/31.jpg)
A8: Cross Site Request Forgery (CSRF)Mitigación
app.use(express.csrf())
app.use(function(req, res.next) { res.locals.csrftoken = res.csrfToken() next() })
<input type="hidden" name="_csrf" value="{{ csrftoken }}">
![Page 32: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/32.jpg)
Referencias• OWASP Top Ten
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
• OWASP NodeGoathttps://github.com/OWASP/NodeGoat
• Server-Side JavaScript Injection https://media.blackhat.com/bh-us-11/Sullivan/BH_US_11_Sullivan_Server_Side_WP.pdf
• Node.js Securityhttps://www.owasp.org/images/3/31/Node.js_Security_Old_vulnerabilities_in_new_bottles_-
_Sven_Vetsch.pdf
![Page 33: Inyección, XSS, CSRF en ChelaJS](https://reader034.fdocuments.ec/reader034/viewer/2022042506/55c543edbb61eb1c398b4820/html5/thumbnails/33.jpg)
Gracias!