ajinabraham.njsscan.eval.eval_vm_injection.vm_compilefunction_injection

profile photo of ajinabrahamajinabraham
Author
unknown
Download Count*
License

Untrusted user input in vm.compileFunction() can result in code injection.

Run Locally

Run in CI

Defintion

rules:
  - id: vm_compilefunction_injection
    patterns:
      - pattern-inside: |
          require('vm')
          ...
      - pattern-either:
          - pattern-inside: function ($REQ, $RES, ...) {...}
          - pattern-inside: function $FUNC($REQ, $RES, ...) {...}
          - pattern-inside: $X = function $FUNC($REQ, $RES, ...) {...}
          - pattern-inside: var $X = function $FUNC($REQ, $RES, ...) {...};
          - pattern-inside: $APP.$METHOD(..., function $FUNC($REQ, $RES, ...) {...})
      - pattern-either:
          - pattern: >
              $VM.compileFunction($CODE,$PARAMS,{parsingContext: <...
              $REQ.$QUERY.$FOO ...>},...)
          - pattern: >
              $CONTEXT = <... $REQ.$QUERY.$FOO ...>; ...
              $VM.compileFunction($CODE,$PARAMS,{parsingContext: <... $CONTEXT
              ...>},...)
          - pattern: >
              $CONTEXT = <... {$NAME:$REQ.$QUERY.$FOO} ...>; ...
              $VM.compileFunction($CODE,$PARAMS,{parsingContext: <... $CONTEXT
              ...>},...)
          - pattern: >
              $CONTEXT = {$NAME: <... $REQ.$QUERY.$FOO ...>}; ...
              $VM.compileFunction($CODE,$PARAMS,{parsingContext: <... $CONTEXT
              ...>},...)
          - pattern: >
              $VAR = <... $REQ.$QUERY.$FOO ...>; ... $CONTEXT = {$NAME: <...
              $VAR ...>}; ... $VM.compileFunction($CODE,$PARAMS,{parsingContext:
              <... $CONTEXT ...>},...)
          - pattern: |
              $OPTS = {parsingContext: <... $REQ.$QUERY.$FOO ...>};
              ...
              $VM.compileFunction($CODE,$PARAMS,$OPTS,...)
          - pattern: |
              $CONTEXT = <... $REQ.$QUERY.$FOO ...>;
              ...
              $OPTS = {parsingContext: <... $CONTEXT ...>};
              ...
              $VM.compileFunction($CODE,$PARAMS,$OPTS,...)
          - pattern: |
              $CONTEXT = {$NAME: <... $REQ.$QUERY.$FOO ...>};
              ...
              $OPTS = {parsingContext: <... $CONTEXT ...>};
              ...
              $VM.compileFunction($CODE,$PARAMS,$OPTS,...)
          - pattern: |
              $VAR = <... $REQ.$QUERY.$FOO ...>;
              ...
              $CONTEXT = {$NAME: <... $VAR ...>};
              ...
              $OPTS = {parsingContext: <... $CONTEXT ...>};
              ...
              $VM.compileFunction($CODE,$PARAMS,$OPTS,...)
          - pattern: >
              $VM.compileFunction($CODE,$PARAMS,{parsingContext: <... $REQ.$BODY
              ...>},...)
          - pattern: >
              $CONTEXT = <... $REQ.$BODY ...>; ...
              $VM.compileFunction($CODE,$PARAMS,{parsingContext: <... $CONTEXT
              ...>},...)
          - pattern: >
              $CONTEXT = <... {$NAME:$REQ.$BODY} ...>; ...
              $VM.compileFunction($CODE,$PARAMS,{parsingContext: <... $CONTEXT
              ...>},...)
          - pattern: >
              $CONTEXT = {$NAME: <... $REQ.$BODY ...>}; ...
              $VM.compileFunction($CODE,$PARAMS,{parsingContext: <... $CONTEXT
              ...>},...)
          - pattern: >
              $VAR = <... $REQ.$BODY ...>; ... $CONTEXT = {$NAME: <... $VAR
              ...>}; ... $VM.compileFunction($CODE,$PARAMS,{parsingContext: <...
              $CONTEXT ...>},...)
          - pattern: |
              $OPTS = {parsingContext: <... $REQ.$BODY ...>};
              ...
              $VM.compileFunction($CODE,$PARAMS,$OPTS,...)
          - pattern: |
              $CONTEXT = <... $REQ.$BODY ...>;
              ...
              $OPTS = {parsingContext: <... $CONTEXT ...>};
              ...
              $VM.compileFunction($CODE,$PARAMS,$OPTS,...)
          - pattern: |
              $CONTEXT = {$NAME: <... $REQ.$BODY ...>};
              ...
              $OPTS = {parsingContext: <... $CONTEXT ...>};
              ...
              $VM.compileFunction($CODE,$PARAMS,$OPTS,...)
          - pattern: |
              $VAR = <... $REQ.$BODY ...>;
              ...
              $CONTEXT = {$NAME: <... $VAR ...>};
              ...
              $OPTS = {parsingContext: <... $CONTEXT ...>};
              ...
              $VM.compileFunction($CODE,$PARAMS,$OPTS,...)
    message: Untrusted user input in `vm.compileFunction()` can result in code
      injection.
    severity: ERROR
    languages:
      - javascript
    metadata:
      owasp-web: a1
      cwe: cwe-94
      license: LGPL-3.0-or-later
      vulnerability_class:
        - Other