## https://sploitus.com/exploit?id=ED17408A-B330-538D-BD0F-A9A1125C5694
#CVE-2022-31630 – Proof of Concept Exploit
Peringatan: Kode ini dibuat hanya untuk tujuan edukasi dan pengujian di lingkungan laboratorium yang terisolasi. Penggunaan di sistem lain tanpa izin adalah ilegal dan tidak bertanggung jawab.
---
📌 Deskripsi
CVE-2022-31630 adalah kerentanan Out-of-Bounds (OOB) Read pada ekstensi GD PHP, tepatnya dalam fungsi imageloadfont(). Kerentanan ini memungkinkan penyerang yang dapat mengontrol file font yang dimuat oleh aplikasi PHP untuk membaca data di luar batas buffer yang dialokasikan. Dampak yang mungkin ditimbulkan:
· Denial of Service (crash) – aplikasi berhenti merespons.
· Information Disclosure – data sensitif dari memori dapat terbaca (misalnya kunci, token, atau fragmen data lain).
Versi PHP yang Terpengaruh
· PHP 7.4.x sebelum 7.4.33
· PHP 8.0.x sebelum 8.0.25
· PHP 8.1.x sebelum 8.1.12
PHP 7.4.33 adalah versi pertama yang menerima patch untuk CVE ini. Repositori ini menyediakan Proof of Concept (PoC) untuk menunjukkan perbedaan perilaku antara versi rentan (≤ 7.4.32) dan versi yang telah dipatch (≥ 7.4.33).
---
🔍 Detail Teknis
Kerentanan berakar pada kurangnya validasi input saat membaca berkas font GD (format .gdf). Berkas font memiliki struktur header sebagai berikut:
Byte offset Ukuran (byte) Deskripsi
0 2 Magic number (0x01BE)
2 2 Jumlah karakter (nchars)
4 2 Lebar karakter (width) (dalam piksel)
6 2 Tinggi karakter (height)
8 2 Jumlah byte per karakter (char_offset)
Jika nilai width dibuat sangat besar (misal 65535), perhitungan ukuran buffer untuk menyimpan bitmap karakter menjadi salah. Akibatnya, buffer yang dialokasikan terlalu kecil. Ketika fungsi imagechar() kemudian membaca karakter dari font tersebut, ia akan mengakses memori di luar batas buffer – inilah yang disebut Out-of-Bounds Read.
---
🧪 Persyaratan Pengujian
· Docker (untuk menjalankan lingkungan terisolasi)
· PHP versi 7.4.32 atau 7.4.33 (bisa menggunakan image Docker php:7.4.32-cli / php:7.4.33-cli)
· Ekstensi GD (akan diinstal di dalam container)
---
🚀 Cara Menggunakan PoC
1. Clone repositori ini
```bash
git clone https://github.com/sepkascurty-cpu/php-exploit_cve-2022-31630.git
cd exploit_cve-2022-31630
```
2. Jalankan container dengan versi PHP yang diinginkan
Untuk menguji versi rentan (7.4.32):
```bash
docker run -it --rm -v $(pwd):/app php:7.4.32-cli bash
```
Untuk menguji versi patched (7.4.33):
```bash
docker run -it --rm -v $(pwd):/app php:7.4.33-cli bash
```
3. Di dalam container, instal ekstensi GD
```bash
cd /app
apt-get update
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
docker-php-ext-configure gd --with-freetype --with-jpeg
docker-php-ext-install gd
```
4. Jalankan exploit
```bash
php exploit_cve-2022-31630.php
```
---
📊 Contoh Output
Versi PHP Hasil yang Diharapkan
7.4.32 (rentan) Program crash dengan Segmentation Fault atau terjadi kebocoran memori (terlihat data dummy dari memori).
7.4.33 (patched) Eksekusi selesai normal, file gambar output.png tersimpan, tidak ada crash.
---
🛡️ Mitigasi
· Update PHP ke versi terbaru yang mengandung patch:
· PHP 7.4.33 atau lebih baru
· PHP 8.0.25 atau lebih baru
· PHP 8.1.12 atau lebih baru
· Jika tidak dapat segera update, nonaktifkan ekstensi GD atau fungsi imageloadfont() jika tidak benar-benar diperlukan.
· Terapkan prinsip least privilege pada aplikasi untuk meminimalkan dampak jika terjadi kebocoran memori.
---
📚 Referensi
· CVE-2022-31630 di NVD
· Commit patch di php-src
· PHP Release Announcements
---
⚠️ Disclaimer
Repositori ini disediakan untuk tujuan edukasi dan penelitian keamanan. Penulis tidak bertanggung jawab atas penyalahgunaan kode ini. Pastikan Anda hanya menguji di lingkungan yang Anda miliki atau telah mendapatkan izin tertulis.
---
Dibuat untuk komunitas keamanan siber Indonesia.