AUDIT85_DIAGNOSTIC
Etapa C: lectura alternativa JSON
Se mantiene el diagnostico de red anterior y se implementa una alternativa de lectura del contenido sanitizado, sin modificar el proxy ni ampliar acceso del proceso publico. Disponibles con el interruptor activado:
| Ruta | Metodo | Resultado inicial | MIME | Bytes iniciales |
| /api/review | GET | 200 | application/json; charset=utf-8 | 3944 |
| /api/review/PROJECT_STATUS | GET | 200 | application/json; charset=utf-8 | 6074 |
| /api/review/bundle?ids=PROJECT_STATUS,DATABASE_CHANGELOG,TEST_RESULTS | GET | 200 | application/json; charset=utf-8 | 65466 |
Mediciones iniciales sobre stage-b-20261106-v1 tras instalar el runtime JSON. El contenido completo de PROJECT_STATUS era 5522 bytes UTF-8 y su SHA coincidia. No Set-Cookie; no-store. Los tamanos cambian al publicar C.
Contrato de lectura
Individual: id, title, version, date, classification, sha256 y content_markdown completo. Index: catalogo y limites. Bundle: hasta ocho IDs, deduplicados, sin sustituir silenciosamente contenido por un extracto.
JSON maximo 1048576 bytes; documento completo preferido hasta 524288. Si no cabe, fragmented=true, content_markdown=null y lista de fragmentos. Consultar ?fragment=0 y sucesivos: fragment_id, fragment_index, byte_offset, fragment_bytes, fragment_sha256, document_sha256, total_bytes y next_url. Cada bloque maximo 65536 bytes, alineado a UTF-8. Reconstruir en orden y comprobar SHA total, sin normalizar saltos de linea. Ningun fragmento es una nueva fuente ni un original privado.
Bundle demasiado grande: 413 con URLs individuales. Parametros invalidos: 400; ID no publicado: 404; fragmento fuera de rango: 416; escrituras: 405; canal apagado o integridad no valida: 503. Se mantienen los formatos previos.
Seguridad y verificacion
Los mismos archivos sanitizados del release y hashes fijados; no consulta BD, vault, sistema de ficheros arbitrario o comandos. El usuario publico mantiene filesystem de solo lectura y bloqueo connect. No existe login ni cookie en 85. La autenticacion de 80/88 no se cambia por este mecanismo.
La herramienta web OpenAI probo tambien /api/review y PROJECT_STATUS y devolvio «URL ... is not accessible via this tool», sin codigo HTTP ni body. El cliente HTTPS ordinario si obtuvo el JSON completo. Por tanto la via esta implementada y verificada en HTTP, pero no se promete resolver la ruta de red/politica de ese cliente. No se eluden sus restricciones ni se desactiva seguridad del servicio para forzarla.
Registro historico: diagnostico inicial
Fecha de comprobacion: 06/11/2026, Europe/Madrid. Alcance: canal documental publico, servicio 85 e interruptor 88. Cero llamadas GLS.
Resultado ejecutivo
El acceso anonimo por HTTPS funciona desde el servidor de ejecucion con clientes HTTP estandar. No se reproduce un 502. La herramienta web de OpenAI devuelve un error propio de inaccesibilidad sin codigo HTTP. Sus intentos no han dejado nuevas entradas atribuibles en las trazas de 85.
No hay evidencia para atribuirlo a la aplicacion. Tampoco hay acceso a los logs del proxy corporativo para descartar una regla por IP/ASN o un bloqueo anterior al servicio. La causa exacta de la ruta OpenAI sigue NO DETERMINADA. No se ha desactivado seguridad, cambiado el proxy ni expuesto el backend.
Comprobaciones
| Elemento | Evidencia | Resultado |
| DNS publico A | DNS-over-HTTPS Google y resolver local | 51.178.24.58 |
| DNS publico AAAA | NOERROR sin respuestas | No publica IPv6 |
| Segundo resolver DoH | Conexion a Cloudflare rechazada desde entorno ejecutor | No es un fallo del dominio |
| TLS/SNI | Handshake con verificacion y nombre th85.aeizoon.com | Valido, TLS 1.3 |
| Certificado | SAN th85.aeizoon.com, Let's Encrypt YE2 | 05/11/2026 23:02:21 a 03/02/2027 23:02:20 UTC |
| IPv4 curl | HTTP 200, ssl_verify_result 0 | Correcto |
| IPv6 curl | Exit 6, no AAAA resoluble | No disponible; no AAAA defectuoso |
| HTTP a HTTPS | GET manifest por HTTP | 301 a la misma ruta HTTPS |
| Raiz HTTPS | GET anonimo | 200 sin cookies ni login |
| manifest.json | GET anonimo | 200 JSON valido |
| PROJECT_STATUS.html | GET anonimo | 200 HTML pasivo |
| Documentos enlazados iniciales | 26 representaciones, 12 documentos | Todos 200 y hash correcto |
| User-Agent Mozilla/5.0 | GET PROJECT_STATUS | 200 |
| User-Agent ChatGPT-Test | GET PROJECT_STATUS | 200, mismo hash |
| Servicio interno 85 | GET manifest | 200 |
| Servicio 88 | health/ready | 200 |
| Login privado | admin/platform y knowledge sin sesion | 303 a login, login 200 |
Cabeceras
Proxy observado: Server openresty, X-Served-By th85.aeizoon.com. Content-Type coherente con HTML/JSON/Markdown; no Set-Cookie. Cache-Control no-store,no-cache,must-revalidate,max-age=0, CDN-Cache-Control no-store, Surrogate-Control no-store, X-Robots-Tag noindex,nofollow,noarchive. CSP impide scripts, conexiones activas, formularios, marcos y recursos externos. No se quitaron controles.
Interruptor y permisos
El estado persistido estaba enabled=true por decision del usuario. El servicio publico recibe solo politica, archivos revisados y control. El servicio 88 recibe el grupo suplementario de auditoria mediante systemd. Una consola con solo el grupo primario no puede verificar esa politica; eso es aislamiento de permisos, no un fallo del canal. La comprobacion debe reproducir el contexto de grupos del servicio.
Trazas correlacionadas
Se midieron 154 lineas antes y 155 despues de tres intentos de consulta web. La diferencia de una linea corresponde al propio GET interno realizado al final de la primera medicion. No aparece una llegada adicional atribuible a esos intentos. El log deliberadamente no guarda IP, User-Agent ni rutas arbitrarias; por ello esta correlacion temporal no identifica la causa en el proxy y no excluye peticiones coincidentes de terceros.
Herramienta web: error «URL ... is not accessible via this tool» en raiz, manifest y PROJECT_STATUS (HTML/Markdown). No proporciono HTTP 502, body, cabeceras ni Ray/request ID. No se debe traducir ese error en un 502 de TH.
Restricciones por IP
El servicio 85 no contiene ACL de IP ni filtros User-Agent, y sirve copias PUBLIC_REVIEW anonimamente mientras el interruptor esta activo. Solo se ha demostrado acceso desde las redes probadas. WAF/rate limits/ASN del proxy corporativo no son inspeccionables desde esta VM. No se afirma que no existan. Resolver esa parte requiere correlacion de sus logs por hora, sin modificar politicas globales ni abrir puertos adicionales.
Cambio aplicado
No se necesita correccion de red en TRANSPORT HUB para el acceso estandar. Se publica este informe. Se coordina la actualizacion de releases con el interruptor mediante un bloqueo comun, respetando su valor mas reciente; esto evita una carrera administrativa, no pretende corregir el error OpenAI.
Cadena HTTP esperada
HTTP /manifest.json -> 301 -> HTTPS /manifest.json -> 200. HTTPS / -> 200. HTTPS /documents/PROJECT_STATUS.html -> 200. No hay redireccion a login en 85. En 88 sigue habiendo autenticacion.
Limite y siguiente diagnostico
Para el cliente web que sigue fallando, obtener del proxy corporativo el registro del intervalo correspondiente: si llego, decision/status/upstream; si no llego, revisar la ruta de consulta externa. No reconfigurar TH para eludir las restricciones de una herramienta ni habilitar proxy abierto.
La validacion final del release publicado se registra junto al manifiesto: deben coincidir todos los hashes y formatos. Las evidencias tecnicas completas permanecen privadas; solo este informe sanitizado queda publicado.