TRANSPORT HUBRevision documental

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:

RutaMetodoResultado inicialMIMEBytes iniciales
/api/reviewGET200application/json; charset=utf-83944
/api/review/PROJECT_STATUSGET200application/json; charset=utf-86074
/api/review/bundle?ids=PROJECT_STATUS,DATABASE_CHANGELOG,TEST_RESULTSGET200application/json; charset=utf-865466

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

ElementoEvidenciaResultado
DNS publico ADNS-over-HTTPS Google y resolver local51.178.24.58
DNS publico AAAANOERROR sin respuestasNo publica IPv6
Segundo resolver DoHConexion a Cloudflare rechazada desde entorno ejecutorNo es un fallo del dominio
TLS/SNIHandshake con verificacion y nombre th85.aeizoon.comValido, TLS 1.3
CertificadoSAN th85.aeizoon.com, Let's Encrypt YE205/11/2026 23:02:21 a 03/02/2027 23:02:20 UTC
IPv4 curlHTTP 200, ssl_verify_result 0Correcto
IPv6 curlExit 6, no AAAA resolubleNo disponible; no AAAA defectuoso
HTTP a HTTPSGET manifest por HTTP301 a la misma ruta HTTPS
Raiz HTTPSGET anonimo200 sin cookies ni login
manifest.jsonGET anonimo200 JSON valido
PROJECT_STATUS.htmlGET anonimo200 HTML pasivo
Documentos enlazados iniciales26 representaciones, 12 documentosTodos 200 y hash correcto
User-Agent Mozilla/5.0GET PROJECT_STATUS200
User-Agent ChatGPT-TestGET PROJECT_STATUS200, mismo hash
Servicio interno 85GET manifest200
Servicio 88health/ready200
Login privadoadmin/platform y knowledge sin sesion303 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.