Αρχιτεκτονική της επίθεσης

Η επίθεση ακολουθεί μια δομημένη αλληλουχία HTTP αιτημάτων, εκμεταλλευόμενη τον τρόπο με τον οποίο η PHP διαχειρίζεται τα multipart uploads και το session state. Το PoC επιτυγχάνει την εκτέλεση κώδικα σε τέσσερα στάδια:

  1. Health Check: Επιβεβαίωση της έκδοσης και της κατάστασης του server.
  2. Heap Leak: Πρόκληση OOM (Out of Memory) για την ανάκτηση της βάσης του Zend heap μέσω των cookies της συνεδρίας.
  3. Code Leak: Ανάκτηση διευθύνσεων του PHP binary για τον εντοπισμό του pointer της zval_ptr_dtor και τον υπολογισμό της διεύθυνσης της zif_system.
  4. Callback Execution: Έγχυση μιας πλαστής δομής HashTable που, κατά τον καθαρισμό της, καλεί τη συνάρτηση system() με ορίσματα ελεγχόμενα από τον επιτιθέμενο.

Η σημασία του περιβάλλοντος εκτέλεσης

Ένα κρίσιμο εύρημα του PoC είναι ότι το binary layout της PHP εξαρτάται άμεσα από το build. Η χρήση του Alpine Linux είναι επιβεβλημένη, καθώς οι offsets που έχουν υπολογιστεί για την έκδοση 8.4.26 δεν είναι συμβατοί με άλλες διανομές όπως το Debian, παρόλο που η έκδοση της PHP παραμένει η ίδια. Η διαλειτουργικότητα (interoperability) της επίθεσης περιορίζεται από το ASLR, το οποίο απαιτεί την επιτυχή ανάκτηση των διευθύνσεων σε κάθε νέο worker process.

Τεχνικές προκλήσεις και σταθερότητα

Η επίθεση αποτελεί έναν αγώνα δρόμου (race condition) ενάντια στους διαθέσιμους workers του PHP CLI server. Επειδή η pipelining διαδικασία δεν εγγυάται ποιος worker θα απαντήσει σε κάθε αίτημα, η επιτυχία δεν είναι εγγυημένη σε κάθε εκτέλεση. Ωστόσο, η σταθερότητα των leaks εντός ενός ήδη ενεργού container επιτρέπει την επαναληψιμότητα της διαδικασίας μέχρι την επιτυχή εκτέλεση της εντολής.