Master's Thesis
ExplodeQ.js: a library of queries to detect injection vulnerabilities in Node.js applications
— 2023
Key information
Authors:
Supervisors:
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:
Miguel Alexandre Figueiredo Monteiro
ist192526
Supervisors of this institution:
Nuno Miguel Carvalho dos Santos
ist14261
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