# HTTP Connection Request Smuggling {{#include ../banners/hacktricks-training.md}} **Αυτή η σελίδα συνοψίζει, επεκτείνει και ενημερώνει** την πρωτοποριακή έρευνα του PortSwigger σχετικά με [Browser-Powered Desync Attacks](https://portswigger.net/research/browser-powered-desync-attacks) και την επακόλουθη εργασία σχετικά με την κακή χρήση της κατάστασης σύνδεσης HTTP/2. Επικεντρώνεται σε ευπάθειες όπου **μια προέλευση καθορίζεται μόνο μία φορά ανά σύνδεση TCP/TLS**, επιτρέποντας σε έναν επιτιθέμενο να “λαθρέψει” αιτήματα σε έναν διαφορετικό εσωτερικό διακομιστή μόλις η σύνδεση έχει καθοριστεί. ## Connection-State Attacks ### First-request Validation Όταν δρομολογούν αιτήματα, οι αντίστροφοι διακομιστές μεσολάβησης μπορεί να εξαρτώνται από την κεφαλίδα **Host** (ή **:authority** στο HTTP/2) για να καθορίσουν τον προορισμό διακομιστή, συχνά βασιζόμενοι σε μια λευκή λίστα διακομιστών που επιτρέπεται η πρόσβαση. Ωστόσο, υπάρχει μια ευπάθεια σε αρκετούς διακομιστές μεσολάβησης όπου η λευκή λίστα **επιβάλλεται μόνο στην πρώτη αίτηση σε μια σύνδεση**. Ως εκ τούτου, οι επιτιθέμενοι μπορούν να αποκτήσουν πρόσβαση σε εσωτερικούς εικονικούς διακομιστές στέλνοντας πρώτα μια επιτρεπόμενη αίτηση και στη συνέχεια επαναχρησιμοποιώντας την ίδια υποκείμενη σύνδεση: ```http GET / HTTP/1.1 Host: allowed-external-host.example GET /admin HTTP/1.1 Host: internal-only.example ``` ### Πρώτη-αίτηση Δρομολόγηση Πολλοί 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: public.example POST /pwreset HTTP/1.1 Host: private.internal ``` > [!TIP] > Στο Burp Suite Professional ≥2022.10 μπορείτε να ενεργοποιήσετε το **HTTP Request Smuggler → Connection-state probe** για να ανιχνεύσετε αυτόματα αυτές τις αδυναμίες. --- ## ΝΕΟ το 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. Ο επιτιθέμενος ενσωματώνει μια κρυφή `` στη σελίδα του. 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}}