
Escáner CLI impulsado por YAML que detecta servicios, archivos y carpetas expuestos en endpoints web. Diseñado para que los desarrolladores integren comprobaciones de seguridad en pipelines CI/CD con firmas personalizables.

ChopChop es una herramienta de línea de comandos para pruebas dinámicas de seguridad de aplicaciones web, inicialmente escrita por el Michelin CERT.
Su objetivo es escanear varios puntos finales e identificar la exposición de servicios/archivos/carpetas a través de la raíz web. Las verificaciones/firmas se declaran en un archivo de configuración (por defecto: chopchop.yml), totalmente configurable, y especialmente por los desarrolladores.

«Chop chop» es una frase de origen cantonés. «Chop chop» significa «date prisa» y sugiere que algo debe hacerse ahora y sin demora.
Intentamos que el proceso de compilación sea sencillo y, con suerte, debería ser tan fácil como:
$ go mod download
$ go build .
Debería haber un binario gochopchop resultante en la carpeta.
¡Gracias a Github Container Registry, podemos proporcionarle algunas imágenes Docker recién compiladas!
docker run ghcr.io/michelin/gochopchop scan https://foobar.com -v debug
Pero si lo prefieres, también puedes compilarlo localmente, mira a continuación:
docker build -t gochopchop .
Continuamente intentamos hacer goChopChop lo más fácil posible. Escanear un host con esta utilidad es tan simple como:
$ ./gochopchop scan https://foobar.com
docker run gochopchop scan https://foobar.com
docker run -v ./:/app chopchop scan -c /app/chopchop.yml https://foobar.com
La reescritura en Golang tuvo lugar hace un par de meses, pero aún queda mucho por hacer. Aquí hay algunas características que planeamos integrar: [x] Hilos para mejor rendimiento [x] Capacidad de especificar el número de hilos concurrentes [x] Colores y mejor formato [x] Capacidad de filtrar verificaciones/firmas a buscar [x] Pruebas simuladas y unitarias [x] CI de Github ¡Y mucho más!
Para probar rápida y exhaustivamente chopchop, proporcionamos un servidor web en tests/server.go.
Para probarlo, ejecute go run tests/server.go y luego ejecute chopchop con el siguiente comando ./gochopchop scan http://localhost:8000 --verbosity Debug.
ChopChop debería imprimir "no se encontraron vulnerabilidades".
También hay pruebas unitarias que puede lanzar con go test -v ./....
Estas pruebas están integradas en el flujo de trabajo de CI de GitHub.
Puede encontrar las banderas disponibles para el comando scan:
Aquí hay una lista de usos avanzados que podrían interesarle.
Nota: Se pueden usar redireccionadores como > para post-procesamiento.
$ ./gochopchop scan https://foobar.com --insecure
$ ./gochopchop scan https://foobar.com --insecure --signature test_config.yml
plugins o plugins --severity High$ ./gochopchop plugins --severity High
--threads 4 para 4 trabajadores$ ./gochopchop plugins --threads 4
--max-severity Medium$ ./gochopchop scan https://foobar.com --max-severity Medium
./gochopchop scan https://foobar.com --timeout 1 --verbosity --export=csv,json --export-filename boo --plugin-filters=Git,Zimbra,Jenkins
$ ./gochopchop plugins
$ ./gochopchop plugins --severity High
$ ./gochopchop scan --url-file url_file.txt
$ ./gochopchop scan https://foobar.com --export=csv,json --export-filename results
Escribir una nueva verificación es tan simple como:
- endpoint: "/.git/config"
checks:
- name: Git exposed
match:
- "[branch"
remediation: Do not deploy .git folder on production servers
description: Verifies that the GIT repository is accessible from the site
severity: "High"
Un endpoint (ej. /.git/config) se asigna a múltiples verificaciones, lo que evita enviar X peticiones para X verificaciones. Se pueden realizar múltiples verificaciones a través de una sola petición HTTP.
Cada verificación necesita estos campos:
Consulte el archivo third-party.txt para obtener más información.
ChopChop se ha publicado bajo la Licencia Apache 2.0.
Consulte el archivo LICENSE para obtener más información.
| Bandera | Bandera completa | Descripción |
|---|
-h | --help | Asistente de ayuda |
-v | --verbosity | Nivel de detalle de registro |
-c | --signature | Ruta del archivo de firma personalizado |
-k | --insecure | Deshabilitar verificación SSL |
-u | --url-file | Ruta a un archivo específico que contiene URLs a probar |
-b | --max-severity | Bloquear el pipeline de CI si la severidad es igual o superior a la bandera especificada |
-e | --export | Tipo de exportación de la salida (csv y/o json) |
--export-filename | Especificar el nombre del archivo para los archivos de exportación | |
-t | --timeout | Tiempo de espera para las peticiones HTTP |
--severity-filter | Filtrar plugins por severidad | |
--plugin-filter | Filtrar plugins por nombre de plugin | |
--threads | Número de hilos concurrentes |
| Atributo | Tipo | Descripción | ¿Opcional? | Ejemplo |
|---|
name | string | Nombre de la verificación | No | Git exposed |
description | string | Una pequeña descripción de la verificación | No | Ensure .git repository is not accessible from the webroot |
remediation | string | Dar una remediación para esta "incidencia" específica | No | Do not deploy .git folder on production servers |
severity | Enum("High", "Medium", "Low", "Informational") | Calificar la criticidad si se activa en su entorno | No | High |
status_code | integer | El código de estado HTTP que debería devolverse | Sí | 200 |
headers | List of string | Lista de cabeceras que deberían estar en la respuesta HTTP | Sí | N/A |
no_headers | List of string | Lista de cabeceras que NO deberían estar en la respuesta HTTP | Sí | N/A |
match | List of string | Listar las cadenas que deberían estar en la respuesta HTTP | Sí | "[branch" |
no_match | List of string | Listar las cadenas que NO deberían estar en la respuesta HTTP | Sí | N/A |
query_string | Parámetros GET que deben pasarse al endpoint | String | Sí | query_string: "id=FOO-chopchoptest" |
| Nombre de la biblioteca | Enlace | Licencia |
|---|
| Viper | https://github.com/spf13/viper | MIT License |
| Go-pretty | https://github.com/jedib0t/go-pretty | MIT License |
| Cobra | https://github.com/spf13/cobra | Apache License 2.0 |
| strfmt | https://github.com/go-openapi/strfmt | Apache License 2.0 |
| Go-homedir | https://github.com/mitchellh/go-homedir | MIT License |
| pkg-errors | https://github.com/pkg/errors | BSD 2 (Simplified License) |
| Go-runewidth | https://github.com/mattn/go-runewidth | MIT License |