Commits

La jornada de las nueve fusiones: segunda auditoría cerrada y volcados que ya no se corrompen

Nueve ramas de tickets fusionadas en main: protección SSRF sin DNS rebinding, volcados de base de datos sin pérdida silenciosa, archivos ZIP no adivinables, descargas solo mediante POST y las tres oleadas de la segunda auditoría de seguridad ya integradas.

El gran día del proyecto: nueve ramas de tickets completadas por subagentes en worktrees separados, revisadas y fusionadas en main en orden creciente de fricción.

El rebinding que ya no falla

La protección SSRF validaba el hostname con getaddrinfo, pero httpx resolvía el DNS al conectar: un DNS controlado por un atacante podía insertar una IP privada. La corrección conecta con la IP ya validada conservando Host y SNI, y la prueba de rebinding pasó de alcanzar 10.0.0.5 a conectar con la IP pública.

Volcados sin pérdida silenciosa

esc_sql arrastra desde WP 4.8.3 un token interno de marcadores de posición: cada % del contenido quedaba partido en el volcado y el keyset perdía filas con un % en la clave, en silencio. Reversión canónica con remove_placeholder_escape, claves primarias compuestas paginando mediante OFFSET e índices únicos solo si son de una sola columna. Mientras tanto, los archivos ZIP ya no son adivinables: sufijo aleatorio, escritura temporal y renombrado solo después de un cierre exitoso; nada de archivos truncados haciéndose pasar por una copia buena.

Las tres oleadas de la segunda auditoría

El ticket de los veinte hallazgos nuevos se cerró en tres oleadas. En el portal: ya no sigue redirecciones con las cabeceras HMAC incluidas, restaurar y eliminar copias exige ser administrador, cerrar sesión o cambiar la contraseña invalida los tokens, el secreto del conector ya no se incluye en el HTML y el bloqueo es atómico por IP+usuario. En la web: nginx sirve el SPA con CSP desde un contenedor sin privilegios de root, y la descarga de copias pasa a POST con un formulario nativo para que el navegador haga streaming por encima de 2 GB.

La costura que nadie veía venir

Las fusiones dejaron dos costuras: pruebas que interceptaban httpx.post directamente y, con el nuevo punto de integración de la protección, salían al DNS real; y un stub de PHP con firma incompatible que falló al incorporar la segunda rama. Pequeñas correcciones, conjunto de pruebas en verde: 139 pruebas con pytest, arnés 18/18 y compilación correcta.

Cerrado con verificación manual: sin botones de administración para el operador y Resumen con Reintentar cuando falla el inventario.