Translated ['src/pentesting-web/http-connection-request-smuggling.md'] t

This commit is contained in:
Translator 2025-07-12 22:08:24 +00:00
parent 072222405c
commit dcf86f656a

View File

@ -2,33 +2,82 @@
{{#include ../banners/hacktricks-training.md}}
**Αυτή είναι μια περίληψη της ανάρτησης** [**https://portswigger.net/research/browser-powered-desync-attacks**](https://portswigger.net/research/browser-powered-desync-attacks)
**Αυτή η σελίδα συνοψίζει, επεκτείνει και ενημερώνει** την πρωτοποριακή έρευνα του PortSwigger σχετικά με [Browser-Powered Desync Attacks](https://portswigger.net/research/browser-powered-desync-attacks) και την επακόλουθη εργασία σχετικά με την κακή χρήση της κατάστασης σύνδεσης HTTP/2. Επικεντρώνεται σε ευπάθειες όπου **μια προέλευση καθορίζεται μόνο μία φορά ανά σύνδεση TCP/TLS**, επιτρέποντας σε έναν επιτιθέμενο να “λαθρέψει” αιτήματα σε έναν διαφορετικό εσωτερικό διακομιστή μόλις η σύνδεση έχει καθοριστεί.
## Connection State Attacks <a href="#state" id="state"></a>
## Connection-State Attacks <a href="#state" id="state"></a>
### First-request Validation
Όταν δρομολογούν αιτήματα, οι αντίστροφοι διακομιστές μπορεί να εξαρτώνται από το **Host header** για να προσδιορίσουν τον προορισμό διακομιστή back-end, συχνά βασιζόμενοι σε μια λευκή λίστα φιλοξενουμένων που επιτρέπεται η πρόσβαση. Ωστόσο, υπάρχει μια ευπάθεια σε ορισμένους διακομιστές όπου η λευκή λίστα επιβάλλεται μόνο στην αρχική αίτηση σε μια σύνδεση. Ως εκ τούτου, οι επιτιθέμενοι θα μπορούσαν να εκμεταλλευτούν αυτό κάνοντας πρώτα μια αίτηση σε έναν επιτρεπόμενο διακομιστή και στη συνέχεια ζητώντας έναν εσωτερικό ιστότοπο μέσω της ίδιας σύνδεσης:
```
Όταν δρομολογούν αιτήματα, οι αντίστροφοι διακομιστές μεσολάβησης μπορεί να εξαρτώνται από την κεφαλίδα **Host****:authority** στο HTTP/2) για να καθορίσουν τον προορισμό διακομιστή, συχνά βασιζόμενοι σε μια λευκή λίστα διακομιστών που επιτρέπεται η πρόσβαση. Ωστόσο, υπάρχει μια ευπάθεια σε αρκετούς διακομιστές μεσολάβησης όπου η λευκή λίστα **επιβάλλεται μόνο στην πρώτη αίτηση σε μια σύνδεση**. Ως εκ τούτου, οι επιτιθέμενοι μπορούν να αποκτήσουν πρόσβαση σε εσωτερικούς εικονικούς διακομιστές στέλνοντας πρώτα μια επιτρεπόμενη αίτηση και στη συνέχεια επαναχρησιμοποιώντας την ίδια υποκείμενη σύνδεση:
```http
GET / HTTP/1.1
Host: [allowed-external-host]
Host: allowed-external-host.example
GET / HTTP/1.1
Host: [internal-host]
GET /admin HTTP/1.1
Host: internal-only.example
```
### First-request Routing
### Πρώτη-αίτηση Δρομολόγηση
Σε ορισμένες ρυθμίσεις, ένας διακομιστής front-end μπορεί να χρησιμοποιήσει το **Host header του πρώτου αιτήματος** για να καθορίσει τη δρομολόγηση back-end για αυτό το αίτημα, και στη συνέχεια να δρομολογήσει μόνιμα όλα τα επόμενα αιτήματα από την ίδια σύνδεση πελάτη στην ίδια σύνδεση back-end. Αυτό μπορεί να αποδειχθεί ως:
```
Πολλοί HTTP/1.1 αντίστροφοι διακομιστές μεσολάβησης αντιστοιχίζουν μια εξερχόμενη σύνδεση σε μια πίσω πισίνα **βασισμένοι αποκλειστικά στην πρώτη αίτηση που προωθούν**. Όλες οι επόμενες αιτήσεις που αποστέλλονται μέσω της ίδιας μπροστινής υποδοχής επαναχρησιμοποιούνται σιωπηλά, ανεξάρτητα από την κεφαλίδα Host τους. Αυτό μπορεί να συνδυαστεί με κλασικές [επιθέσεις κεφαλίδας Host](https://portswigger.net/web-security/host-header) όπως η δηλητηρίαση επαναφοράς κωδικού πρόσβασης ή [δηλητηρίαση web cache](https://portswigger.net/web-security/web-cache-poisoning) για να αποκτηθεί πρόσβαση παρόμοια με SSRF σε άλλους εικονικούς διακομιστές:
```http
GET / HTTP/1.1
Host: example.com
Host: public.example
POST /pwreset HTTP/1.1
Host: psres.net
Host: private.internal
```
Αυτό το ζήτημα μπορεί δυνητικά να συνδυαστεί με [Host header attacks](https://portswigger.net/web-security/host-header), όπως η δηλητηρίαση επαναφοράς κωδικού πρόσβασης ή [web cache poisoning](https://portswigger.net/web-security/web-cache-poisoning), για να εκμεταλλευτεί άλλες ευπάθειες ή να αποκτήσει μη εξουσιοδοτημένη πρόσβαση σε επιπλέον εικονικούς διακομιστές.
> [!TIP]
> Στο Burp Suite Professional ≥2022.10 μπορείτε να ενεργοποιήσετε το **HTTP Request Smuggler → Connection-state probe** για να ανιχνεύσετε αυτόματα αυτές τις αδυναμίες.
> [!NOTE]
> Για να εντοπιστούν αυτές οι ευπάθειες, μπορεί να χρησιμοποιηθεί η δυνατότητα 'connection-state probe' στο HTTP Request Smuggler.
---
## ΝΕΟ το 2023-2025 Κατάχρηση Συγκέντρωσης Σύνδεσης HTTP/2/3
Οι σύγχρονοι περιηγητές συνήθως **συγκεντρώνουν** τα αιτήματα HTTP/2 και HTTP/3 σε μία μόνο σύνδεση TLS όταν το πιστοποιητικό, το πρωτόκολλο ALPN και η διεύθυνση IP ταιριάζουν. Εάν ένα front-end εξουσιοδοτεί μόνο το πρώτο αίτημα, κάθε επόμενο συγκεντρωμένο αίτημα κληρονομεί αυτή την εξουσιοδότηση **ακόμα και αν αλλάξει το Host/:authority**.
### Σενάριο εκμετάλλευσης
1. Ο επιτιθέμενος ελέγχει το `evil.com` που επιλύεται στον ίδιο κόμβο CDN με τον στόχο `internal.company`.
2. Ο περιηγητής του θύματος έχει ήδη μια ανοιχτή σύνδεση HTTP/2 με το `evil.com`.
3. Ο επιτιθέμενος ενσωματώνει μια κρυφή `<img src="https://internal.company/…">` στη σελίδα του.
4. Επειδή οι παράμετροι σύνδεσης ταιριάζουν, ο περιηγητής επαναχρησιμοποιεί τη **υπάρχουσα** σύνδεση TLS και πολλαπλασιάζει το αίτημα για το `internal.company`.
5. Εάν το CDN/router έχει επικυρώσει μόνο το πρώτο αίτημα, ο εσωτερικός κόμβος εκτίθεται.
PoCs για Chrome/Edge/Firefox είναι διαθέσιμα στην ομιλία του James Kettle *“HTTP/2: The Sequel is Always Worse”* (Black Hat USA 2023).
### Εργαλεία
* **Burp Suite 2023.12** εισήγαγε ένα πειραματικό σημείο εισαγωγής **HTTP/2 Smuggler** που προσπαθεί αυτόματα τη συγκέντρωση και τις τεχνικές TE/CL.
* **smuggleFuzz** (https://github.com/microsoft/smugglefuzz) Ένα πλαίσιο Python που κυκλοφόρησε το 2024 για να βρει βίαια διανύσματα desync front-end/back-end μέσω HTTP/2 και HTTP/3, συμπεριλαμβανομένων των παραλλαγών κατάστασης σύνδεσης.
### Μετριασμοί
* Πάντα **επικυρώστε ξανά το Host/:authority σε κάθε αίτημα**, όχι μόνο κατά τη δημιουργία σύνδεσης.
* Απενεργοποιήστε ή περιορίστε αυστηρά τη **συγκέντρωση προέλευσης** σε επίπεδα CDN/φορτωτή (π.χ. `http2_origin_cn` απενεργοποιημένο στο NGINX).
* Αναπτύξτε ξεχωριστά πιστοποιητικά ή διευθύνσεις IP για εσωτερικά και εξωτερικά ονόματα κόμβων ώστε ο περιηγητής να μην μπορεί νομίμως να τα συγκεντρώσει.
* Προτιμήστε το **connection: close** ή `proxy_next_upstream` μετά από κάθε αίτημα όπου είναι πρακτικό.
---
## Πραγματικές Περιπτώσεις (2022-2025)
| Έτος | Συστατικό | CVE | Σημειώσεις |
|------|-----------|-----|-------|
| 2022 | AWS Application Load Balancer | | Ο επικεφαλής Host επικυρώθηκε μόνο στο πρώτο αίτημα; διορθώθηκε με την επιδιόρθωση του μηχανισμού κανόνων (αποκαλύφθηκε από το SecurityLabs). |
| 2023 | Apache Traffic Server < 9.2.2 | CVE-2023-39852 | Επέτρεψε την εκμετάλλευση αιτημάτων μέσω επαναχρησιμοποίησης σύνδεσης HTTP/2 όταν είχε ρυθμιστεί το `CONFIG proxy.config.http.parent_proxy_routing_enable`. |
| 2024 | Envoy Proxy < 1.29.0 | CVE-2024-2470 | Ακατάλληλη επικύρωση του :authority μετά την πρώτη ροή επέτρεψε την εκμετάλλευση αιτημάτων μεταξύ ενοικιαστών σε κοινά δίκτυα. |
---
## Φύλλο Ελέγχου Ανίχνευσης
1. Στείλτε δύο αιτήματα στην **ίδια** σύνδεση TCP/TLS με διαφορετικούς επικεφαλής Host ή :authority.
2. Παρατηρήστε αν η δεύτερη απάντηση προέρχεται από τον πρώτο κόμβο (ασφαλές) ή τον δεύτερο κόμβο (ευάλωτο).
3. Στο Burp: `Repeat → keep-alive → Send → Follow`.
4. Όταν δοκιμάζετε HTTP/2, ανοίξτε μια **αφιερωμένη** ροή (ID 1) για έναν αβλαβή κόμβο, στη συνέχεια πολλαπλασιάστε μια δεύτερη ροή (ID 3) σε έναν εσωτερικό κόμβο και αναζητήστε μια απάντηση.
---
## Αναφορές
* PortSwigger Research *HTTP/2: The Sequel is Always Worse* (Black Hat USA 2023)
* Envoy Security Advisory CVE-2024-2470 Ακατάλληλη επικύρωση εξουσίας
{{#include ../banners/hacktricks-training.md}}