Αρχιτεκτονική της επίθεσης
Η επίθεση ακολουθεί μια δομημένη αλληλουχία HTTP αιτημάτων, εκμεταλλευόμενη τον τρόπο με τον οποίο η PHP διαχειρίζεται τα multipart uploads και το session state. Το PoC επιτυγχάνει την εκτέλεση κώδικα σε τέσσερα στάδια:
- Health Check: Επιβεβαίωση της έκδοσης και της κατάστασης του server.
- Heap Leak: Πρόκληση OOM (Out of Memory) για την ανάκτηση της βάσης του Zend heap μέσω των cookies της συνεδρίας.
- Code Leak: Ανάκτηση διευθύνσεων του PHP binary για τον εντοπισμό του pointer της
zval_ptr_dtorκαι τον υπολογισμό της διεύθυνσης τηςzif_system. - 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 επιτρέπει την επαναληψιμότητα της διαδικασίας μέχρι την επιτυχή εκτέλεση της εντολής.