
Prueba de concepto de escalada de privilegios para CVE-2026-89020: explota un desbordamiento de RouterOS mtget TFTP RRQ para reescribir la política de grupo y promover a un usuario de solo lectura a administrador total.
Desbordamiento original (DoS): Kazuma Matsumoto, GMO Cybersecurity by IERAE.
Escalada de privilegios desde solo lectura: Cristiano Maranci, Davide Turaccio.
Un usuario autenticado en el grupo read reescribe la política de grupo almacenada mediante el desbordamiento de TFTP en mtget y obtiene privilegios totales en RouterOS sin parchear. MikroTik lo reprodujo. Este repositorio es la PoC de escalada, no el desbordamiento original.
| Compilación | mtget sha256 (16) | Vulnerable |
|---|---|---|
| 6.49.7 | c86bad170066c058 | sí |
| 6.49.11 | c86bad170066c058 | sí (probado en dispositivo real) |
| 6.49.18 | a98020b2d5e39cf3 | sí |
| 6.49.19 | a98020b2d5e39cf3 | sí |
| 6.49.20 | a98020b2d5e39cf3 | sí |
| 6.49.21 | 9721d0bb5d21ec2a | no (corrección) |
| 6.49.22 | 9721d0bb5d21ec2a | no |
| 7.23.3 | 0a976b16314073e7 | sí |
| 7.23.7 | b315c9516f67c078 | no (corregido en 7.23.4) |
| 7.24.1 | e5cba2a80146f361 | sí |
| 7.24.2 | a6a8b50ee270e018 | no (corrección) |
| 7.24.5 | 13dafb8a1d28fac7 | no |
Vulnerable en todas las compilaciones 6.x muestreadas desde 6.0 hasta 6.49.20 y en todas las compilaciones 7.x muestreadas desde 7.1.5 hasta 7.24.1. Correcciones: 6.49.21, 7.23.4, 7.24.2. Escalada probada en 6.49.11 (RB SXT-5D) y 6.49.18 (RB433GL).
mtget: memcpy sin límites (6.49.11: constructor 0x406518, copia 0x406558). Una ruta tftp:// larga mediante /tool fetch sobrescribe los registros guardados y la dirección de retorno./rw/store/group.dat, escribe el prefijo del primer registro (38 bytes), lo vuelve a leer, escribe un archivo marcador y finaliza.group::restore en /nova/bin/user (6.49.11: 0x40c348) aplica allow & clip y deny & clip sin validación de valores. El grupo read se convierte en el grupo 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 es el controlador probado para 6.49.11. poc_read2full_generic.py también acepta 6.49.7, u otra compilación con una carga útil recalculada.
--promote-user NAME opcionalmente mueve esa cuenta a full después de la reescritura.
payloads/6.49.7-6.49.11.mipsbe.bin (4094 B, sha256 433d59c9...) es la carga útil utilizada en las ejecuciones reales. Otras compilaciones necesitan una carga útil recalculada.
Ejecútalo solo en dispositivos que poseas o estés autorizado a probar. Reescribe la política del grupo read y puede reiniciar el dispositivo.