
Analizar solicitudes HTTP para minimizar riesgos de ataques HTTP Desync (precursor de HTTP request smuggling/splitting).
Esto significa que existe una variedad de servidores y clientes, los cuales pueden tener diferentes puntos de vista sobre los límites de las solicitudes, creando oportunidades para ataques de desincronización (también conocidos como HTTP Desync).
Puede parecer sencillo seguir las últimas recomendaciones de la RFC. Sin embargo, para sistemas a gran escala que han estado funcionando por un tiempo, esto puede conllevar un impacto inaceptable en la disponibilidad.
La biblioteca http_desync_guardian está diseñada para analizar solicitudes HTTP y prevenir ataques HTTP Desync, equilibrando seguridad y disponibilidad.
Clasifica las solicitudes en diferentes categorías y proporciona recomendaciones sobre cómo debe manejarse cada nivel.
Se puede usar tanto para encabezados de solicitud HTTP sin procesar como para aquellos ya analizados por un motor HTTP. Los consumidores pueden configurar la recopilación de registros y métricas. El registro tiene límite de velocidad y todos los datos del usuario están ofuscados.
Si cree que podría haber encontrado un problema de seguridad, siga nuestro Proceso de Notificación de Seguridad.
El enfoque principal de esta biblioteca es HTTP/1.1. Consulte tests para todos los casos cubiertos. Los predecesores de HTTP/1.1 no admiten la reutilización de conexiones, lo que limita las oportunidades de HTTP Desync,
sin embargo, algunos proxies pueden actualizar dichas solicitudes a HTTP/1.1 y reutilizar conexiones de backend, lo que podría permitir crear solicitudes maliciosas HTTP/1.0.
Es por eso que se analizan usando los mismos criterios que HTTP/1.1. Para otras versiones del protocolo, se tienen las siguientes excepciones:
HTTP/0.9 nunca se consideran Compliant, sino que se clasifican como Acceptable. Si hay presencia de Content-Length/Transfer-Encoding, entonces es Ambiguous.HTTP/1.0: la presencia de Transfer-Encoding hace que una solicitud sea Ambiguous.HTTP/2+ está fuera del alcance. Pero si su proxy degrada HTTP/2 a HTTP/1.1, asegúrese de que la solicitud saliente sea analizada.Consulte la documentación para obtener más información.
Esta biblioteca está diseñada para ser utilizada principalmente desde motores HTTP escritos en C/C++.
cargo install --force cbindgencbindgen --output http_desync_guardian.h --lang c para C.cbindgen --output http_desync_guardian.h --lang c++ para C++.cargo build --release. Los binarios se encuentran en los archivos ./target/release/libhttp_desync_guardian.*.#include "http_desync_guardian.h"
/*
* http_engine_request_t - ya analizada por el motor HTTP
*/
static int check_request(http_engine_request_t *req) {
http_desync_guardian_request_t guardian_request = construct_http_desync_guardian_from(req);
http_desync_guardian_verdict_t verdict = {0};
http_desync_guardian_analyze_request(&guardian_request, &verdict);
switch (verdict.tier) {
case REQUEST_SAFETY_TIER_COMPLIANT:
// La solicitud es válida. luz verde
break;
case REQUEST_SAFETY_TIER_ACCEPTABLE:
// Rechazar, si mode == STRICTEST
// De lo contrario, OK
break;
case REQUEST_SAFETY_TIER_AMBIGUOUS:
// La solicitud es ambigua.
// Rechazar, si mode == STRICTEST
// De lo contrario, enviarla pero no reutilizar ninguna conexión FE/BE.
break;
case REQUEST_SAFETY_TIER_SEVERE:
// Enviar 400 y cerrar la conexión FE.
break;
default:
// código inalcanzable
abort();
}
}
Consulte benchmarks como ejemplo de uso desde Rust.
Si descubre un posible problema de seguridad en http_desync_guardian, le pedimos que notifique a
AWS Security a través de nuestra página de reporte de vulnerabilidades. Por favor, no cree un issue público en github.
Consulte CONTRIBUTING para más información.
Este proyecto está licenciado bajo la Licencia Apache-2.0.