GitHub - matusf/openapi-fuzzer: Black-box fuzzer that fuzzes APIs based on OpenAPI specification. Find bugs for free!
Extracto
Black-box fuzzer that fuzzes APIs based on OpenAPI specification. Find bugs for free! - GitHub - matusf/openapi-fuzzer: Black-box fuzzer that fuzzes APIs based on OpenAPI specification. Find bugs f...
Resumen
Resumen Principal
openapi-fuzzer es una herramienta de fuzzing diseñada para realizar pruebas de seguridad automatizadas en APIs que siguen la especificación OpenAPI. Como fuzzer de caja negra, no requiere conocimiento interno del sistema objetivo, lo que facilita su implementación en entornos donde el acceso al código fuente es limitado o nulo. La herramienta aprovecha la definición estructurada de la API (en formato OpenAPI) para generar solicitudes mal formadas, inesperadas o límite, con el objetivo de detectar vulnerabilidades, fallos de validación, errores de servidor o comportamientos inseguros. Su enfoque automatizado permite a los equipos de desarrollo y seguridad identificar posibles puntos de fallo sin necesidad de escribir manualmente casos de prueba complejos. Al estar alojado en GitHub, el proyecto es de código abierto, lo que promueve la colaboración comunitaria, la transparencia en su desarrollo y una rápida evolución basada en retroalimentación real. La promesa de "encontrar errores gratis" resalta su valor como solución accesible y eficaz para mejorar la resiliencia de las APIs sin costos asociados.
Elementos Clave
-
Fuzzing de caja negra: La herramienta opera sin necesidad de acceso interno al código de la API, lo que permite evaluar su seguridad desde una perspectiva externa, simulando ataques reales de usuarios no autorizados.
-
Basado en especificaciones OpenAPI: Utiliza archivos de definición OpenAPI (anteriormente Swagger) para entender la estructura de la API, incluyendo endpoints, métodos HTTP, tipos de datos y parámetros, lo que permite generar pruebas más precisas y contextualizadas.
-
Detección automatizada de errores: Automatiza la generación de entradas anómalas o inesperadas para identificar fallos como desbordamientos de búfer, inyecciones, errores de tipo 5xx o respuestas inconsistentes, sin intervención manual.
-
Herramienta de código abierto: Disponible públicamente en GitHub, lo que permite su uso gratuito, modificación por parte de la comunidad y contribuciones continuas para mejorar su cobertura y eficacia en distintos escenarios.
Análisis e Implicaciones
La existencia de herramientas como openapi-fuzzer democratiza las prácticas de seguridad en el desarrollo de APIs, permitiendo incluso a equipos pequeños o individuos realizar auditorías robustas sin inversión económica significativa. Además, su enfoque en la especificación OpenAPI lo convierte en un complemento ideal para flujos de trabajo de desarrollo modernos que ya utilizan dicha especificación como parte de su documentación y contrato de API. Esto refuerza la importancia de mantener especificaciones precisas, ya que también se convierten en base para pruebas de seguridad automatizadas.
Contexto Adicional
El fuzzing es una técnica ampliamente utilizada en seguridad informática para descubrir vulnerabilidades mediante la inyección de datos aleatorios o mutados en sistemas de entrada. En el contexto de las APIs REST, herramientas como esta permiten validar no solo la funcionalidad esperada, sino también la capacidad del sistema para manejar entradas maliciosas o inesperadas. Al integrarse fácilmente en pipelines de CI/CD, openapi-fuzzer puede ayudar a detectar errores críticos antes del despliegue en producción.
Contenido
OpenAPI fuzzer
Black-box fuzzer that fuzzes APIs based on OpenAPI specification. All you need to do is to supply URL of the API and its specification. Find bugs for free!
Findings
The fuzzer has been used to find bugs in numerous software. Some of the well-known fuzzed software include1:
- Kubernetes
- Gitea
- Vault
The category of bugs differ, but some of the common are parsing bugs, invalid format bugs and querying non-existent entities. If you have found bugs with this fuzzer, please reach out to me. I would love to hear from you. Feel free to submit a PR and add your finding to the list above.
Building & installing
To build the fuzzer, you will need to have rust installed.
# Install from crates.io cargo install openapi-fuzzer # Or download the repo and build locally git clone git@github.com:matusf/openapi-fuzzer.git cd openapi-fuzzer # Install to the $PATH cargo install --path . # Or build (add --releade to build optimized binary) inside the repo cargo build
Usage
After installation you will have two binaries, openapi-fuzzer and openapi-fuzzer-resender. The openapi-fuzzer will fuzz the API according to the specification and report any findings. All findings will be located in a results directory in a JSON format. After you are done with fuzzing, you can use openapi-fuzzer-resender to resend payloads that triggered a bugs and examine the cause in depth.
Tips
- When the fuzzer receives an unexpected status code, it will report is as a finding. However, many APIs do not specify client error status codes in the specification. To minimize false positive findings ignore status codes that you are not interested in with
-iflag. It is adviced to fuzz it two stages. Firstly, run the fuzzer without-iflag for a minute. Then checkresultsfolder for the reported findings. If there are reports from status codes you do not care about, add them via-iflag and rerun the fuzzer. - Most APIs use some base prefix for endpoints like
/v1or/api, however, the specifications are sometimes writen without it. Do not forget to include the path prefix in the url. - You may add an extra header with
-Hflag. It may be useful when you would like to increase coverage by providing some sort of authorization.
$ openapi-fuzzer --help
Usage: openapi-fuzzer -s <spec> -u <url> [-i <ignore-status-code>] [-H <header>]
OpenAPI fuzzer
Options:
-s, --spec path to OpenAPI specification
-u, --url url of api to fuzz
-i, --ignore-status-code
status codes that will not be considered as finding
-H, --header additional header to send
--help display usage information
$ openapi-fuzzer -s spec.yaml -u http://127.0.0.1:8200/v1/ -i 404
Replaying findings
When you are done fuzzing you can replay the findings. All findings are stored in the results folder in path according to finding's endpoint and method. To resend the same payload to API, you simply run openapi-fuzzer-resender with path to the finding file as an argument. You can overwrite the headers with -H flag as well, which is useful for example, when the authorization token expired.
$ tree -L 3 results/
results/
├── sys-leases-renew
│ └── POST
│ └── 500
└── sys-seal
└── POST
└── 500
$ openapi-fuzzer-resender --help
Usage: openapi-fuzzer-resender <file> [-H <header>]
Resender of openapi-fuzzer results
Options:
-H, --header extra header
--help display usage information
$ openapi-fuzzer-resender results/sys-seal/POST/500/1b4e8a77.json
Response[status: 500, status_text: Internal Server Error, url: http://127.0.0.1:8200/v1/sys/seal]
{"errors":["1 error occurred: * missing client token"]}
Future plans
- Add script for minimization of the findings
-
not all found bugs are linked
↩
Fuente: GitHub
