UNPKG

mcp-server-semgrep

Version:

MCP Server for Semgrep Integration - static code analysis with AI

350 lines (349 loc) 8.56 kB
rules: - id: vm2-context-injection message: >- Make sure that unverified user data can not reach `vm2`. metadata: owasp: - A03:2021 - Injection cwe: - "CWE-94: Improper Control of Generation of Code ('Code Injection')" category: security technology: - vm2 cwe2022-top25: true subcategory: - audit likelihood: LOW impact: HIGH confidence: LOW references: - https://owasp.org/Top10/A03_2021-Injection languages: - javascript - typescript severity: WARNING patterns: - pattern-inside: | $VM = require('vm2'); ... - pattern-either: - pattern: | function (...,$INPUT,...) { ... new VM({sandbox: <... $INPUT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = <... $INPUT ...>; ... new VM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = <... {$NAME:$INPUT} ...>; ... new VM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = {$NAME: <... $INPUT ...>}; ... new VM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $VAR = <... $INPUT ...>; ... $CONTEXT = {$NAME: <... $VAR ...>}; ... new VM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $OPTS = {sandbox: <... $INPUT ...>}; ... new VM($OPTS,...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = <... $INPUT ...>; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new VM($OPTS,...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = {$NAME: <... $INPUT ...>}; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new VM($OPTS,...); ... } - pattern: | function (...,$INPUT,...) { ... $VAR = <... $INPUT ...>; ... $CONTEXT = {$NAME: <... $VAR ...>}; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new VM($OPTS,...); ... } - pattern: | function $F(...,$INPUT,...) { ... new VM({sandbox: <... $INPUT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = <... $INPUT ...>; ... new VM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = <... {$NAME:$INPUT} ...>; ... new VM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = {$NAME: <... $INPUT ...>}; ... new VM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $VAR = <... $INPUT ...>; ... $CONTEXT = {$NAME: <... $VAR ...>}; ... new VM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $OPTS = {sandbox: <... $INPUT ...>}; ... new VM($OPTS,...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = <... $INPUT ...>; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new VM($OPTS,...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = {$NAME: <... $INPUT ...>}; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new VM($OPTS,...); ... } - pattern: | function $F(...,$INPUT,...) { ... $VAR = <... $INPUT ...>; ... $CONTEXT = {$NAME: <... $VAR ...>}; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new VM($OPTS,...); ... } - pattern: | function (...,$INPUT,...) { ... new NodeVM({sandbox: <... $INPUT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = <... $INPUT ...>; ... new NodeVM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = <... {$NAME:$INPUT} ...>; ... new NodeVM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = {$NAME: <... $INPUT ...>}; ... new NodeVM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $VAR = <... $INPUT ...>; ... $CONTEXT = {$NAME: <... $VAR ...>}; ... new NodeVM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function (...,$INPUT,...) { ... $OPTS = {sandbox: <... $INPUT ...>}; ... new NodeVM($OPTS,...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = <... $INPUT ...>; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new NodeVM($OPTS,...); ... } - pattern: | function (...,$INPUT,...) { ... $CONTEXT = {$NAME: <... $INPUT ...>}; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new NodeVM($OPTS,...); ... } - pattern: | function (...,$INPUT,...) { ... $VAR = <... $INPUT ...>; ... $CONTEXT = {$NAME: <... $VAR ...>}; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new NodeVM($OPTS,...); ... } - pattern: | function $F(...,$INPUT,...) { ... new NodeVM({sandbox: <... $INPUT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = <... $INPUT ...>; ... new NodeVM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = <... {$NAME:$INPUT} ...>; ... new NodeVM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = {$NAME: <... $INPUT ...>}; ... new NodeVM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $VAR = <... $INPUT ...>; ... $CONTEXT = {$NAME: <... $VAR ...>}; ... new NodeVM({sandbox: <... $CONTEXT ...>},...); ... } - pattern: | function $F(...,$INPUT,...) { ... $OPTS = {sandbox: <... $INPUT ...>}; ... new NodeVM($OPTS,...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = <... $INPUT ...>; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new NodeVM($OPTS,...); ... } - pattern: | function $F(...,$INPUT,...) { ... $CONTEXT = {$NAME: <... $INPUT ...>}; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new NodeVM($OPTS,...); ... } - pattern: |- function $F(...,$INPUT,...) { ... $VAR = <... $INPUT ...>; ... $CONTEXT = {$NAME: <... $VAR ...>}; ... $OPTS = {sandbox: <... $CONTEXT ...>}; ... new NodeVM($OPTS,...); ... }