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.
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.