Commits

La jornada de les nou fusions: segona auditoria tancada i volcats que ja no es corrompen

Nou branques de tiquet fusionades a main: guarda SSRF sense DNS rebinding, volcats de base de dades sense pèrdua silenciosa, zips no endevinables, descàrregues només per POST i les tres onades de la segona auditoria de seguretat integrades.

tk-1..tk-15 + bd2f27e · wp-mantenimiento · milestone

El dia gros del projecte: nou branques de tiquet acabades per subagents en worktrees separats, revisades i fusionades a main per ordre de fregament creixent.

El rebinding que ja no col·la

La guarda SSRF validava el hostname amb getaddrinfo però httpx resolia DNS al connectar: un DNS atacant podia col·lar una IP privada. El fix connecta contra la IP ja validada conservant Host i SNI, i el test del rebinding va passar d'arribar a 10.0.0.5 a connectar a la IP pública.

Volcats sense pèrdua silenciosa

esc_sql arrossega des de WP 4.8.3 un token intern de placeholders: cada % del contingut entrava trencat al dump i el keyset perdia files amb % a la clau, en silenci. Reversió canònica amb remove_placeholder_escape, claus primaries compostes paginant per OFFSET i índexs únics només si són d'una sola columna. Els zips, mentrestant, ja no són endevinables: sufix aleatori, escriptura temporal i rename només després d'un tancament amb èxit — res de truncats fent passar per còpia bona.

Les tres onades de la segona auditoria

El tiquet dels vint hallazgos nous es va tancar en tres onades. Al portal: ja no segueix redireccions amb les capçaleres HMAC dins, restaurar i esborrar còpies exigeix admin, tancar sessió o canviar contrasenya mata els tokens, el secret del connector ja no viatja a l'HTML i el lockout és atòmic per IP+usuari. A la web: nginx serveix el SPA amb CSP des d'un contenidor sense root, i la descàrrega de còpies passa a POST amb formulari natiu perquè el navegador faci streaming per sobre de 2 GB.

La costura que ningú veia venir

Les fusions van deixar dues costures: tests que interceptaven httpx.post directe i, amb el seam nou de la guarda, sortien a DNS real; i un stub de PHP amb firma incompatible que va explotar en convidar la segona branca. Arreglats petits, batería en verd: 139 tests pytest, harness 18/18, build ok.

Tancat amb verificació manual: sense botons d'admin per a operador i Resumen amb Reintentar quan l'inventari falla.