
Ferramenta de teste de segurança de aplicação estática (SAST) em PHP que realiza análise de taint para detectar XSS, injeção de SQL e outras vulnerabilidades usando regras e configurações personalizáveis.
chmod +x progpilot_vX.Y.Z.phar
sudo mv progpilot_vX.Y.Z.phar /usr/local/bin/progpilot
docker build -t progpilot .
docker run -v $(pwd):/workspace progpilot /workspace/path/to/your/file.php
O phar-composer.phar deve estar localizado em um diretório listado na variável de ambiente $PATH:
git clone https://github.com/designsecurity/progpilot
cd progpilot
./build.sh
O arquivo phar resultante estará localizado na pasta builds na raiz deste projeto.
Instale o pacote com composer, tipicamente ao usar o progpilot como uma biblioteca do seu projeto PHP:
composer require --dev designsecurity/progpilot
Use um arquivo de configuração yaml (veja este exemplo) para configurar e personalizar a análise do progpilot, caso contrário, a configuração padrão será usada com, em particular, os dados de configuração de taint padrão.
O comando progpilot recebe como argumentos o caminho para os arquivos e pastas a serem analisados e opcionalmente um arquivo de configuração:
# sem arquivo de configuração
progpilot example1.php example2.php folder1/ folder2/
# com um arquivo de configuração
progpilot --configuration configuration.yml example1.php example2.php folder1/ folder2/
Se você o instalou com composer, o programa estará localizado em vendor/bin/progpilot.
Também é possível usar o progpilot dentro de código PHP. Para mais informações, consulte a documentação da API.
Use este código para analisar source_code1.php:
<?php
require_once './vendor/autoload.php';
$context = new \progpilot\Context;
$analyzer = new \progpilot\Analyzer;
$context->inputs->setFile("source_code1.php");
try {
$analyzer->run($context);
} catch (Exception $e) {
echo "Exception : ".$e->getMessage()."\n";
}
$results = $context->outputs->getResults();
var_dump($results);
Quando source_code1.php contém este código:
<?php
$var7 = $_GET["p"];
$var4 = $var7;
echo "$var4";
A saída simplificada será:
array(1) {
[0]=>
array(11) {
["source_name"]=>
array(1) {
[0]=>
string(5) "$var4"
}
["source_line"]=>
array(1) {
[0]=>
int(4)
}
["sink_name"]=>
string(4) "echo"
["sink_line"]=>
int(5)
["vuln_name"]=>
string(3) "xss"
}
}
Todos os arquivos (composer.json, example1.php, source_code1.php) usados neste exemplo estão na pasta projects/example. Para mais exemplos, veja também esta página.
É fortemente recomendado personalizar a configuração da análise de taint (as definições de sinks, sources, sanitizers e validators) de acordo com o contexto da aplicação a ser analisada. Na especificação a seguir, as variáveis superglobals _GET, _POST ou _COOKIE são definidas como não confiáveis e também o retorno da função shell_exec():
{
"sources": [
{"name": "_GET", "is_array": true, "language": "php"},
{"name": "_POST", "is_array": true, "language": "php"},
{"name": "_COOKIE", "is_array": true, "language": "php"},
{"name": "shell_exec", "is_function": true, "language": "php"}
]
}
Veja as configurações disponíveis no capítulo correspondente sobre especificar uma análise.
Regras personalizadas também podem ser criadas, veja o capítulo correspondente sobre regras personalizadas.
Saiba mais sobre o desenvolvimento do Progpilot.