njsscan es una herramienta de prueba de aplicaciones estáticas (SAST) que puede encontrar patrones de código inseguros en tus aplicaciones node.js usando un simple comparador de patrones de libsast y la herramienta de búsqueda de patrones de código semántico syntax-aware, semgrep.
Instalación
pip install njsscan
Requiere Python 3.6+ y sólo soporta Mac y Linux
Opciones de la Línea de Comando
$ njsscan
usage: njsscan [-h] [--json] [--sonarqube] [-o OUTPUT] [--missing-controls]
[-w] [-v]
[path [path …]]
positional arguments:
path Path can be file(s) or directories with source code
optional arguments:
-h, --help show this help message and exit
--json set output format as JSON
--sonarqube set output format compatible with SonarQube
-o OUTPUT, --output OUTPUT
output filename to save the result
--missing-controls enable missing security controls check
-w, --exit-warning non zero exit code on warning
-v, --version show njsscan version
Ejemplo de Uso
$ njsscan xss_node.js
Pattern Match ████████████████████████████████████████████████████████████ 1
Semantic Grep ████████████████████████████████████████████████████████████ 53
======================================================================================================
RULE ID: express_xss
OWASP: A1: Injection
CWE: CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
DESCRIPTION: Untrusted User Input in Response will result in Reflected Cross Site Scripting Vulnerability.
SEVERITY: ERROR
____________FILES_____________________
File: xss_node.js
Match Position: 5 - 37
Line Number(s): 5: 6
Match String: var html = "Hello" + req.query.name + ". How are you?"
res.write('Response</br>' + html);
SAST nodejsscan
nodejsscan, construido sobre njsscan, proporciona una interfaz de usuario de gestión de la vulnerabilidad completa junto con otras integraciones ingeniosas.

Python API
Configurar njsscan
Un archivo .njsscan
en la raíz del directorio del código fuente te permite configurar njsscan.
---
- nodejs-extensions:
.js
template-extensions:
.new
.hbs
''
ignore-filenames:
skip.js
ignore-paths:
__MACOSX
skip_dir
node_modules
ignore-extensions:
.jsx
ignore-rules:
regex_injection_dos
pug_jade_template
Suprimir Hallazgos
Puede suprimir los hallazgos de los archivos fuente de javascript añadiendo el comentario //ignore: rule_id1, rule_id2
a la línea que desencadena los hallazgos.
Ejemplo:
app.get('/some/redirect', function (req, res) {
var target = req.param("target");
res.redirect(target); //ignore: express_open_redirect
});
Integraciones CI/CD
Puedes habilitar njsscan en tus pipelines CI/CD o DevSecOps.
Acción Github
Añade lo siguiente al archivo .github/workflows/njsscan.yml
.
name: njsscan
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
njsscan:
runs-on: ubuntu-latest
name: njsscan check
steps:
- uses: actions/checkout@v1
- name: njsscan
id: njsscan
uses: ajinabraham/njsscan-action@v5
with:
args: '.'
Ejemplo: dvna with njsscan github action
Gitlab CI/CD
Añade lo siguiente al archivo .gitlab-ci.yml
.
stages:
- test
njsscan:
image: python
before_script:
- pip3 install --upgrade njsscan
script:
- njsscan .
Ejemplo: dvna with njsscan gitlab
Añade lo siguiente al archivo .travis.yml
.
language: python
install:
- pip3 install --upgrade njsscan
script:
- njsscan .
njsscan (este enlace se abre en una nueva ventana) por ajinabraham (este enlace se abre en una nueva ventana)
njsscan is a semantic aware SAST tool that can find insecure code patterns in your Node.js applications.