flawopen.com/Simulators/HTTP Request Smuggling
Bac à sable visuel pas à pas modélisant les sockets persistants entre proxy et backend, le découpage des segments chunked et l'empoisonnement de flux.
Imaginez un tapis roulant entre un caissier et un cuisinier. Vous donnez une boîte contenant 1 burger et un bon de commande supplémentaire. Le caissier compte 1 article, mais le cuisinier prend le burger et laisse le bon sur le comptoir. Lorsque le client suivant commande une salade, le cuisinier associe sa carte à votre bon!
// Vulnerable HTTP parser logic
int http_parser_execute(http_parser *parser, const char *data, size_t len) {
if (parser->flags & F_CONTENT_LENGTH && parser->flags & F_CHUNKED) {
parser->body_read_mode = READ_CHUNKED;
return PARSE_CONTINUE;
}
}
// Hardened RFC 9112 section 6.1 compliant parser
int http_parser_execute(http_parser *parser, const char *data, size_t len) {
if ((parser->flags & F_CONTENT_LENGTH) && (parser->flags & F_CHUNKED)) {
parser->status_code = 400;
parser->connection_close = 1;
return PARSE_ERROR_INVALID_HEADER;
}
}