Estoy tratando de solucionar el problema informado de la herramienta de escaneo Checkmarx, traté de desinfectar el error y el requerimiento en el siguiente módulo de ruta. Sin embargo, todavía se queja del mismo error.
índice.js
const express = require('express') const router = express.Router() const fs = require('fs') const config = require('config') var _require = require('jsdom'), JSDOM = _require.JSDOM; var window = new JSDOM('').window; var DOMPurify = createDOMPurify(window); function sanitizeError(value){ return DOMPurify.sanitize(value); } function sanitizeObject(obj) { var sanitizedObject = {}; Object.keys(obj).forEach(function (key) { sanitizedObject[key] = sanitizeValue(obj[key]); }); return sanitizedObject; }; //error handler route router.use('/error',(err, req, res, next) => { //sanitizeObject(req) req.logger.error('uncaught error page', sanitizeError(err)) res.redirect('/toanotehrerror page') }) module.exports = routerError de Checkmarx:
Error reflejado_XSS. Se refiere a la línea req.logger.error en el módulo anterior
El router.use de la aplicación incrusta datos que no son de confianza en la salida generada con error, en la línea x de \routes\index.js. Estos datos no confiables se incrustan directamente en la salida sin la desinfección o codificación adecuadas, lo que permite a un atacante inyectar código malicioso en la salida.
El atacante podría alterar la página web devuelta simplemente proporcionando datos modificados en el error de entrada del usuario, que lee el método router.use en la línea x de \routes\index.js. Esta entrada luego fluye a través del código directamente a la página web de salida, sin desinfección.
Esto puede habilitar un ataque de secuencias de comandos cruzadas reflejadas (XSS).
Checkmarx no tiene DOMPurify en la lista de sus desinfectantes reconocidos. Lo que sí reconoce son la librería ESAPI, xss-filters y paquetes htmlescape
https://www.npmjs.com/package/xss-filters
https://www.npmjs.com/package/node-esapi
https://www.npmjs.com/package/htmlescape
Si bien técnicamente su código puede evitar XSS, lo reescribiría usando cualquiera de los paquetes anteriores. Por ejemplo, si vamos a usar xss-filters :
var xssFilters = require('xss-filters'); function sanitizeError(value){ return xssFilters.inHTMLData(value); }