
Proof-of-concept di escalation dei privilegi per CVE-2026-89020: sfrutta un overflow TFTP RRQ di mtget in RouterOS per riscrivere i criteri di gruppo e promuovere un utente in sola lettura ad amministratore completo.
Overflow originale (DoS): Kazuma Matsumoto, GMO Cybersecurity by IERAE.
Escalation di privilegi da sola lettura: Cristiano Maranci, Davide Turaccio.
Un utente autenticato nel gruppo read riscrive la policy di gruppo memorizzata tramite l'overflow TFTP di mtget e ottiene privilegi completi su RouterOS non aggiornato. MikroTik ha riprodotto il problema. Questo repository contiene il PoC dell'escalation, non l'overflow originale.
| Build | mtget sha256 (16) | Vulnerabile |
|---|---|---|
| 6.49.7 | c86bad170066c058 | sì |
| 6.49.11 | c86bad170066c058 | sì (testato su dispositivo reale) |
| 6.49.18 | a98020b2d5e39cf3 | sì |
| 6.49.19 | a98020b2d5e39cf3 | sì |
| 6.49.20 | a98020b2d5e39cf3 | sì |
| 6.49.21 | 9721d0bb5d21ec2a | no (correzione) |
| 6.49.22 | 9721d0bb5d21ec2a | no |
| 7.23.3 | 0a976b16314073e7 | sì |
| 7.23.7 | b315c9516f67c078 | no (corretto in 7.23.4) |
| 7.24.1 | e5cba2a80146f361 | sì |
| 7.24.2 | a6a8b50ee270e018 | no (correzione) |
| 7.24.5 | 13dafb8a1d28fac7 | no |
Vulnerabile in ogni build 6.x campionata da 6.0 a 6.49.20 e in ogni build 7.x campionata da 7.1.5 a 7.24.1. Correzioni: 6.49.21, 7.23.4, 7.24.2. Escalation testata su 6.49.11 (RB SXT-5D) e 6.49.18 (RB433GL).
mtget: memcpy senza limiti (6.49.11: builder 0x406518, copia 0x406558). Un percorso tftp:// lungo tramite /tool fetch sovrascrive i registri salvati e l'indirizzo di ritorno./rw/store/group.dat, scrive il prefisso del primo record (38 byte), lo rilegge, scrive un file marcatore ed esce.group::restore in /nova/bin/user (6.49.11: 0x40c348) applica allow & clip e deny & clip senza validazione dei valori. Il gruppo read diventa il gruppo full.python3 poc_read2full.py --host H --port P --user U --password W
python3 poc_read2full_generic.py --host H --port P --user U --password W \
--payload payloads/6.49.7-6.49.11.mipsbe.bin
poc_read2full.py è il driver testato per la 6.49.11. poc_read2full_generic.py accetta anche la 6.49.7, o un'altra build con un payload ricalcolato.
--promote-user NAME sposta facoltativamente quell'account a full dopo la riscrittura.
payloads/6.49.7-6.49.11.mipsbe.bin (4094 B, sha256 433d59c9...) è il payload utilizzato nelle esecuzioni reali. Le altre build richiedono un payload ricalcolato.
Eseguirlo solo su dispositivi di propria proprietà o per i quali si è autorizzati a eseguire test. Riscrive la policy del gruppo read e può riavviare il dispositivo.