Projeto em Python usado para validar a análise de uma pasta inteira, e não de um arquivo isolado.
A estrutura reproduz deliberadamente a de ProjetoTestC, com os mesmos nomes de função e o mesmo caminho. Isso permite comparar diretamente o analisador de Python, baseado no módulo ast, com o de C, baseado no tree-sitter: os dois devem produzir o mesmo caminho.
A função vulnerável está em src/executor.py, enquanto o ponto de entrada está em src/main.py.
main -> server_start -> router_dispatch -> handler_execute -> run_command -> vulnerable_function
| Função | Arquivo |
|---|---|
main |
src/main.py |
server_start |
src/server.py |
router_dispatch |
src/router.py |
handler_execute |
src/handler.py |
run_command |
src/executor.py |
vulnerable_function |
src/executor.py |
log_init,log_info,log_errorewrite_lineemsrc/logger.py;read_requestemsrc/server.py;handle_unknownemsrc/router.py;parse_payloadepayload_is_emptyemsrc/handler.py.
python analyzer.py \
--source cases/ProjetoTestPython \
--cves data_cves/caseProjetoTestPython.json \
--entry main \
--product projeto-teste-python \
--version 1.0.0 \
--output results/projeto-teste-python-vex.json \
--manualResultado esperado com as respostas s para entrada controlada e n para mitigação:
AFFECTED
python cases/ProjetoTestPython/src/main.pyAssim como no projeto em C, a requisição precisa começar com RUN para chegar à função vulnerável:
RUN 2 + 2
Encerre com Ctrl+D (Linux e macOS) ou Ctrl+Z seguido de Enter (Windows).
A
vulnerable_functionentrega o texto recebido aoeval(), sem validação. Use apenas expressões inofensivas, como no exemplo acima.