Un usuario descubrió un error significativo a nivel de hardware en su punto de acceso Wi-Fi 7 TP-Link EAP770 v1 que causaba la corrupción de datos durante las transferencias de archivos grandes. El problema se manifestaba como errores de 'bad record mac' durante las descargas HTTPS y fallos en las transferencias de `rsync`, a pesar de que los checksums de TCP parecían válidos. A través del análisis de paquetes e inspección de controladores, el usuario identificó al culpable como un error de coherencia de caché DMA en el controlador `qca-nss-dp` de Qualcomm. Específicamente, la ruta de transmisión rápida del controlador no sincroniza la caché de la CPU para todo el búfer de recepción antes de devolverlo a la Tarjeta de Interfaz de Red (NIC). Esto permite que las líneas de caché 'sucias' de operaciones anteriores se vuelvan a escribir en la DRAM, sobrescribiendo bloques de 64 bytes de los nuevos datos del paquete.

La corrupción se ve exacerbada por las funciones de descarga SFE/PPE (Switch Fabric Engine / Packet Process Engine) del dispositivo. Estas funciones aceleran el tráfico puenteado recalculando los checksums de TCP después de que los datos ya han sido corrompidos en la memoria. Debido a que los checksums se recalculan sobre la carga útil corrompida, la capa TCP acepta los segmentos como válidos, dejando que las comprobaciones de integridad de extremo a extremo en TLS y SSH detecten los errores. El usuario determinó que la solución requería desactivar dos configuraciones específicas de sysfs: `l2_feature` y `ppe_rfs_feature`. Sin embargo, TP-Link clasificó el hardware v1 como 'End-of-Life' y se negó a proporcionar una actualización de firmware, y la shell SSH predeterminada del dispositivo no proporcionaba permisos para modificar estas configuraciones.

Para eludir estas restricciones, el usuario desarrolló un exploit de kernel para obtener privilegios de root. El exploit aprovechó CVE-2022-0185, un desbordamiento de enteros en la función `legacy_parse_param()` del kernel de Linux, que permite a un usuario sin privilegios activar un desbordamiento de escritura en un objeto de slab de 4 KiB. Al preparar la memoria del kernel y manipular los búferes de tuberías (pipes), el usuario logró realizar una escritura arbitraria, sobrescribiendo finalmente `modprobe_path` para ejecutar una shell con privilegios root globales. Esto les permitió desactivar manualmente las funciones de descarga defectuosas, deteniendo con éxito la corrupción de datos sin necesidad de un parche proporcionado por el fabricante. El usuario señaló que, si bien el sistema estaba bien protegido contra exploits comunes, la falta de mantenimiento en el hardware antiguo obligó al uso de primitivas a nivel de kernel para resolver un fallo fundamental del controlador.

Una persona trabajando en una computadora para solucionar problemas en un punto de acceso TP-Link
El trayecto de un usuario desde la identificación de un error de hardware hasta el desarrollo de un exploit de kernel para un TP-Link EAP770.blog.dfb.sh

El proceso del usuario para identificar un error de coherencia de caché DMA y, finalmente, desarrollar un exploit de kernel para eludir las limitaciones de hardware.