HTTP Connection Request Smuggling

Reading time: 5 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Αυτή η σελίδα συνοψίζει, επεκτείνει και ενημερώνει την πρωτοποριακή έρευνα του PortSwigger σχετικά με 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 όπως η δηλητηρίαση επαναφοράς κωδικού πρόσβασης ή δηλητηρίαση web cache για να αποκτηθεί πρόσβαση παρόμοια με 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. Ο επιτιθέμενος ενσωματώνει μια κρυφή <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Σημειώσεις
2022AWS Application Load BalancerΟ επικεφαλής Host επικυρώθηκε μόνο στο πρώτο αίτημα; διορθώθηκε με την επιδιόρθωση του μηχανισμού κανόνων (αποκαλύφθηκε από το SecurityLabs).
2023Apache Traffic Server < 9.2.2CVE-2023-39852Επέτρεψε την εκμετάλλευση αιτημάτων μέσω επαναχρησιμοποίησης σύνδεσης HTTP/2 όταν είχε ρυθμιστεί το CONFIG proxy.config.http.parent_proxy_routing_enable.
2024Envoy Proxy < 1.29.0CVE-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 – Ακατάλληλη επικύρωση εξουσίας

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks