
Herramienta de pruebas de seguridad estática de aplicaciones (SAST) en PHP que realiza análisis de taint para detectar XSS, inyección SQL y otras vulnerabilidades utilizando reglas y configuración personalizables.
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
phar-composer.phar debe estar ubicado en un directorio listado en la variable de entorno $PATH:
git clone https://github.com/designsecurity/progpilot
cd progpilot
./build.sh
El archivo phar resultante se ubicará en la carpeta builds en la raíz de este proyecto.
Instala el paquete con composer, típicamente cuando uses progpilot como una biblioteca de tu proyecto PHP:
composer require --dev designsecurity/progpilot
Usa un archivo de configuración yaml (mira este ejemplo) para configurar y personalizar el análisis de progpilot; de lo contrario se usará la configuración predeterminada con, en particular, los datos de configuración de taint estándar.
El comando progpilot toma como argumentos la ruta a los archivos y carpetas a analizar y opcionalmente un archivo de configuración:
# sin archivo de configuración
progpilot example1.php example2.php folder1/ folder2/
# con un archivo de configuración
progpilot --configuration configuration.yml example1.php example2.php folder1/ folder2/
Si lo instalaste con composer, el programa se ubicará en vendor/bin/progpilot.
También es posible usar progpilot dentro de código PHP. Para más información mira la documentación de la API.
Usa este código para analizar 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);
Cuando source_code1.php contiene este código:
<?php
$var7 = $_GET["p"];
$var4 = $var7;
echo "$var4";
La salida 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 los archivos (composer.json, example1.php, source_code1.php) usados en este ejemplo están en la carpeta projects/example. Para más ejemplos mira también esta página.
Se recomienda encarecidamente personalizar la configuración del análisis de taint (las definiciones de sinks, sources, sanitizers y validators) según el contexto de la aplicación a analizar. En la siguiente especificación, las variables superglobales _GET, _POST o _COOKIE se definen como no confiables y también el retorno de la función 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"}
]
}
Consulta las configuraciones disponibles en el capítulo correspondiente sobre especificar un análisis.
También se pueden crear reglas personalizadas, consulta el capítulo correspondiente sobre reglas personalizadas.
Aprende más sobre el desarrollo de Progpilot.