Η αρχιτεκτονική της ευπάθειας
Η ευπάθεια εντοπίζεται στη συνάρτηση php_session_rfc1867_callback εντός του ext/session/session.c. Ο μηχανισμός αποθηκεύει προσωρινά (cache) δύο pointers (post_bytes_processed και current_file_bytes_processed) που δείχνουν σε HashTables. Το πρόβλημα έγκειται στο γεγονός ότι, κατά την επεξεργασία ενός multipart POST, το lifecycle του αιτήματος απελευθερώνει αυτές τις δομές, ενώ οι pointers παραμένουν ενεργοί (dangling pointers).
Μηχανισμός εκμετάλλευσης (Exploitation)
Η εκμετάλλευση βασίζεται στη διαδοχική αποστολή αιτημάτων. Ένα πρώτο, ταχύ multipart POST «οπλίζει» τις caches, ενώ ένα δεύτερο αίτημα προκαλεί την ανανέωση του session file. Κατά τη διαδικασία zend_hash_update, η προηγούμενη δομή καταστρέφεται μέσω του zval_ptr_dtor. Ο επιτιθέμενος, μέσω heap spraying, επανακτά τη δεσμευμένη μνήμη και εισάγει μια κακόβουλη δομή zend_fcall_info, η οποία τελικά οδηγεί στην κλήση της zend_call_function με ελεγχόμενα ορίσματα.
Διαχείριση και μετριασμός κινδύνου
Επειδή οι offsets των δομών στη μνήμη μεταβάλλονται ανάλογα με το build της PHP, η έρευνα συνοδεύεται από ένα framework που εξάγει τα απαραίτητα σύμβολα (symbols) για την επιτυχή στόχευση. Μέχρι την κυκλοφορία επίσημων patches, οι διαχειριστές συστημάτων οφείλουν να:
- Απενεργοποιήσουν το
session.upload_progressστοphp.iniή.htaccess. - Εφαρμόσουν αυστηρό rate-limiting σε multipart/form-data αιτήματα μέσω reverse proxy ή WAF.
- Προγραμματίσουν άμεση αναβάθμιση στις τελευταίες stable εκδόσεις της PHP μόλις καταστούν διαθέσιμες οι διορθώσεις.