Aller au contenu principal

JavaScript / TypeScript · SAST

SAST JavaScript & TypeScript hors-ligne

Auditez vos backends Node.js et frameworks front-end (React, Vue, Angular, Svelte) contre XSS, prototype pollution, failles d'injection et risques supply-chain — sans téléverser une seule ligne dans le cloud.

Frameworks & bibliothèques scannés

Nous testons la couverture sur ces frameworks via fixtures. De nouveaux patterns sont ajoutés à chaque release de règles builtin.

Express Fastify Next.js Nuxt NestJS Hapi React Vue Angular Svelte Mongoose Sequelize Prisma TypeORM Knex jsonwebtoken cookie-parser

Principales classes CWE détectées

Ces classes CWE apparaissent le plus souvent dans les codebases modernes de ce langage. StaticCodeAudit livre des règles dédiées pour chacune, mappées à OWASP Top 10 / ISO 27001 / ASVS quand pertinent.

CWE-79

Cross-Site Scripting (XSS)

innerHTML, dangerouslySetInnerHTML en React, v-html en Vue, Angular bypassSecurityTrust* avec des données utilisateur. Variantes stored, reflected et DOM-based couvertes.

Détecté par la règle SCA : xss_innerhtml

CWE-1321

Prototype Pollution

Object.assign récursif, _.merge, ou obj[key] = value non protégé quand key vient de l'utilisateur. Une seule clé __proto__ peut casser tous les objets en aval.

Détecté par la règle SCA : prototype_pollution

CWE-89

Injection SQL

Sequelize.literal(), requêtes raw en Prisma $queryRaw\`${input}\`, Mongoose $where avec strings, Knex .raw() avec concat.

Détecté par la règle SCA : sql_injection_concat

CWE-918

SSRF

axios.get(url), fetch(url), http.get sur URLs utilisateur. Particulièrement dangereux en serverless via les endpoints metadata internes.

Détecté par la règle SCA : taint_ssrf

CWE-798

Identifiants en dur

Clés API committées dans .env.example, config.js, ou React process.env.REACT_APP_* exposé au bundle client.

Détecté par la règle SCA : hardcoded_secret

CWE-915

Mass Assignment

User.update(req.body) sans allow-list de champs. Permet de monter en privilèges (isAdmin: true) via body JSON.

Détecté par la règle SCA : mass_assignment

Vulnérable vs. sain — trois exemples rapides

CWE-79 Détecté par la règle SCA : xss_innerhtml
❌ Vulnérable
// Vulnérable — React dangerouslySetInnerHTML
function Bio({ user }) {
    return <div dangerouslySetInnerHTML={{ __html: user.bio }} />;
}
✅ Sain
// Sain — contenu texte, pas d'interprétation HTML
function Bio({ user }) {
    return <div>{user.bio}</div>;
}
CWE-1321 Détecté par la règle SCA : prototype_pollution
❌ Vulnérable
// Vulnérable — deep merge sans guard proto
function merge(target, source) {
    for (const key in source) {
        if (typeof source[key] === "object") {
            merge(target[key] = target[key] || {}, source[key]);
        } else { target[key] = source[key]; }
    }
}
✅ Sain
// Sain — bloque __proto__/constructor
function merge(target, source) {
    for (const key of Object.keys(source)) {
        if (key === "__proto__" || key === "constructor") continue;
        if (typeof source[key] === "object") {
            merge(target[key] = target[key] || {}, source[key]);
        } else { target[key] = source[key]; }
    }
}
CWE-89 Détecté par la règle SCA : sql_injection_concat
❌ Vulnérable
// Vulnérable — concat dans Sequelize.literal
const users = await User.findAll({
    where: sequelize.literal(`name = \'${req.query.name}\'`)
});
✅ Sain
// Sain — paramètre lié
const users = await User.findAll({
    where: { name: req.query.name }
});

Ce que StaticCodeAudit détecte (ce langage)

  • XSS en React dangerouslySetInnerHTML, Vue v-html, Angular trust bypass, vanilla innerHTML
  • Prototype pollution via deep merge, assignation de clé dynamique
  • Injection SQL dans Sequelize, Mongoose, Prisma, TypeORM, Knex raw queries
  • Injection NoSQL (Mongoose $where avec strings, opérateurs Mongo dans entrée user)
  • SSRF via axios, fetch, http avec URLs utilisateur
  • Secrets en dur (clés API, secrets JWT, AWS, Stripe, GitHub, tokens Slack)
  • Mass assignment dans Sequelize/Mongoose sans allow-list de champs
  • Cookies non sécurisés (flags httpOnly, secure, sameSite)
  • Token CSRF manquant dans les formulaires Express
  • Path traversal dans fs.readFile avec entrée user
  • Crypto non sécurisée (MD5 dans crypto, IV en dur, random faible)
  • Open redirect (res.redirect(req.query.url))
  • Dépendances obsolètes via patterns package.json
  • Misconfigurations CI/CD (.gitlab-ci, GitHub Actions, scripts npm)

Auditez votre code

Auditez vos backends Node.js et frameworks front-end (React, Vue, Angular, Svelte) contre XSS, prototype pollution, failles d'injection et risques supply-chain — sans téléverser une seule ligne dans le cloud.

Télécharger le binaire démo Réserver une démo guidée