Master's Thesis

ExplodeQ.js: a library of queries to detect injection vulnerabilities in Node.js applications

Miguel Alexandre Figueiredo Monteiro — 2023

Key information

Authors:

Miguel Alexandre Figueiredo Monteiro (Miguel Alexandre Figueiredo Monteiro)

Supervisors:

José Faustino Fragoso Femenin dos Santos (José Faustino Fragoso Femenin dos Santos); Nuno Miguel Carvalho dos Santos (Nuno Miguel Carvalho dos Santos)

Published in

November 9, 2023

Abstract

O Node.js é um ambiente de servidor de código aberto que executa código JavaScript. Com o Node.js no seu fulcro, o npm permite que programadores partilhem pacotes de código. Em aplicações Node.js, é bastante comum haver um elevado número de dependências em pacotes de terceiros, o que torna difícil para os programdores de analisar cada um deles. Este facto, combinado com as propriedades dinâmicas do JavaScript, pode facilitar a introdução de vulnerabilidades de segurança no código. Recentemente, análise estática tem sido utilizada para detetar vulnerabilidades. Contudo, algumas das suas limitações, como a elevada taxa de falsos positivos, realçam a importância do desenvolvimento de novos métodos automatizados. Esta tese faz contribuições significativas para o desenvolvimento do Explode.js, a primeira ferramenta a combinar análise estática e execução simbólica para identificar automaticamente vulnerabilidades de injeção em aplicações Node.js e confirmar estas vulnerabilidades ao produzir um exploit funcional. Apresentamos o ExplodeQ.js: uma biblioteca de pesquisas (queries) para detetar vulnerabilidades de injeção e reconstruir dados controlados por atacantes em aplicações Node.js. Integradas dentro do Explode.js, as pesquisas são realizadas contra uma representação gráfica do código da aplicação analisada e extraem as informações necessárias para permitir execução simbólica e criar um exploit. O ExplodeQ.js foi avaliado como um componente integral do Explode.js. O Explode.js foi avaliado tendo como base dois conjuntos de dados compostos por pacotes npm do mundo real com vulnerabilidades confirmadas. Além disso, o Explode.js foi executado em 430 pacotes npm, onde detetou 31 vulnerabilidades zero-day, com 1 CVE atribuído até ao momento. Node.js is an open-source server environment that executes JavaScript code. Pivoted around Node.js, the Node Package Manager (npm) allows developers to create and share code packages. Node.js applications typically have a high number of dependencies on third-party packages, which makes it hard for maintainers to examine every single one they directly or indirectly include. This fact, combined with JavaScript's dynamic properties, can make it rather easy for Node.js developers to introduce security vulnerabilities into their code. Recently, static analysis has been employed to detect vulnerabilities. However, some of its limitations, like the high false-positive rate, increase the importance of developing new and improved automated vulnerability analysis methods. This thesis makes significant contributions to the development of Explode.js, the first tool to combine static analysis and symbolic execution to automatically identify injection vulnerabilities in Node.js applications and confirm them by producing a functional exploit. We present ExplodeQ.js: a library of queries to detect injection vulnerabilities and reconstruct attacker-controlled data in Node.js applications. Integrated within Explode.js, the queries are run against a code property graph representation of the analyzed application and extract the information needed to enable symbolic execution and generate an exploit. ExplodeQ.js was thoroughly evaluated as an integral component of Explode.js. Explode.js was evaluated against two datasets composed of hundreds of real-world npm packages with confirmed vulnerabilities. Furthermore, Explode.js was executed against 430 real-world new npm packages, where it detected 31 zero-day vulnerabilities with 1 CVE being assigned so far as of the time of the writing of this thesis.

Publication details

Authors in the community:

Supervisors of this institution:

RENATES TID

203837266

Degree Name

Mestrado em Engenharia Informática e de Computadores

Fields of Science and Technology (FOS)

electrical-engineering-electronic-engineering-information-engineering - Electrical engineering, electronic engineering, information engineering

Keywords

  • Static Analysis
  • Graph Queries
  • Vulnerability Detection
  • Node.js
  • Análise Estática
  • Consulta de Grafos
  • Deteção de Vulnerabilidades

Publication language (ISO code)

eng - English

Rights type:

Embargo lifted

Date available:

September 16, 2024

Institution name

Instituto Superior Técnico

Financing entity

Fundação para a Ciência e a Tecnologia

Title of the project, award or grant: DIVINA project

Number for the project, award or grant: CMU/TIC/0053/2021