cd ~/blog

~/vulns/xst-cross-site-tracing.md

XST (Cross-Site Tracing)

webautor: Jordy Pérez Osorio aviso legal
webXST

~3 min de lectura


1. Descripción técnica

Cross-Site Tracing (XST) es una técnica histórica que combina una capacidad de ejecutar contenido en el navegador con un servidor que refleja peticiones HTTP TRACE. RFC 9110 define TRACE como un bucle de diagnóstico y exige que los clientes no envíen información sensible y que el servidor excluya campos sensibles de la respuesta.

La presencia de TRACE no confirma XST. Para exponer una cookie o una cabecera de autenticación, el navegador tendría que enviar ese dato en la petición, permitir que contenido controlado iniciara TRACE y dejar que el atacante leyera la respuesta. Los navegadores modernos bloquean TRACE desde fetch y XMLHttpRequest, por lo que el bypass histórico de HttpOnly no debe presentarse como un resultado actual automático.

2. Impacto

En un cliente o componente antiguo que permita completar la cadena, la respuesta reflejada puede exponer cabeceras sensibles. En una evaluación moderna, una respuesta 200 a TRACE suele demostrar superficie innecesaria y reflexión de la solicitud, pero no por sí sola robo de sesión, XSS ni bypass de HttpOnly.

3. Condiciones necesarias

  • El servidor o un intermediario acepta TRACE o un método equivalente y refleja campos de la petición.
  • Un cliente permite originar ese método desde un contexto controlado y adjunta credenciales o cookies.
  • La respuesta puede ser leída y exfiltrada por el atacante.
  • Las protecciones del navegador, la política de mismo origen y el filtrado de cabeceras no interrumpen la cadena.

4. Validación y detección

Ejemplo con cURL desde la línea de comandos para enviar una petición TRACE a un servidor web local (localhost) que tiene TRACE habilitado. Observa cómo el servidor responde con la misma petición que recibió.

$ curl -X TRACE 127.0.0.1
TRACE / HTTP/1.1
User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
Host: 127.0.0.1
Accept: */*

En este ejemplo, observa cómo enviamos un encabezado Cookie con la petición y éste también aparece en la respuesta del servidor web.

$ curl -X TRACE -H "Cookie: name=value" 127.0.0.1
TRACE / HTTP/1.1
User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
Host: 127.0.0.1
Accept: */*
Cookie: name=value

En este ejemplo el método TRACE está deshabilitado; observa cómo recibimos un error en lugar del eco de la petición.

$ curl -X TRACE 127.0.0.1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method TRACE is not allowed for the URL /.</p>
</body></html>

Ejemplo de una petición TRACE mediante XMLHttpRequest en JavaScript. En Firefox 19.0.2 no funciona y devuelve el error “Illegal Value”; en Google Chrome 25.0.1364.172 tampoco, devolviendo “Uncaught Error: SecurityError: DOM Exception 18”. Esto se debe a que los navegadores modernos bloquean el método TRACE en XMLHttpRequest precisamente para mitigar los ataques XST.

<script>
  var xmlhttp = new XMLHttpRequest()
  var url = 'http://127.0.0.1/'

  xmlhttp.withCredentials = true // send cookie header
  xmlhttp.open('TRACE', url, false)
  xmlhttp.send()
</script>

5. Límites de la evidencia

Los dos primeros ejemplos demuestran reflexión desde un cliente de línea de comandos, donde la cabecera Cookie fue añadida manualmente. No prueban que el navegador de una víctima envíe esa cabecera ni que un origen atacante pueda leer la respuesta. El tercer ejemplo muestra el resultado esperado cuando el método está deshabilitado. El bloque de JavaScript conserva la prueba histórica y los errores que impedían ejecutarla en los navegadores indicados.

6. Mitigación

Apache

En Apache 1.3.34, 2.0.55 y versiones posteriores, establece la directiva TraceEnable en “off” dentro del archivo de configuración principal y reinicia el servicio. Consulta TraceEnable para más detalles.

TraceEnable off

Además de deshabilitar TRACE cuando no sea necesario, los intermediarios deben eliminar campos sensibles de cualquier respuesta de diagnóstico. Las defensas contra Cross-Site Scripting siguen siendo necesarias porque desactivar TRACE sólo elimina esta combinación particular.

7. Clasificación

  • Técnica: Cross-Site Tracing (XST).
  • Debilidad asociada cuando existe exposición: CWE-200, Exposure of Sensitive Information.
  • La habilitación de TRACE por sí sola es una configuración de superficie, no evidencia suficiente de explotación.

8. Referencias

// relacionados