Two government URLs appeared in Google under the title “Send crypto”. What DNS, HTTP responses and search-index evidence can establish — and what they cannot.
The investigation began with a simple Google query: site:transportes.gob.es "send crypto".
The results were unexpected. Two URLs under Spain’s Ministry of Transport domain appeared with the title
Send crypto, while their snippets displayed the generic message
“You need to enable JavaScript to run this app”.
The mismatch was worth investigating. A page about sustainable mobility and a route named
/snapshots/cubes do not appear, from their URLs alone, to have an obvious relationship with cryptocurrency.
But a search result is not a forensic finding. The task was to establish what could be observed independently,
separate those observations from interpretations, and avoid turning a plausible security hypothesis into a claim of compromise.
The anomaly was visible in the index. Its cause was not.
This is a case study in practical OSINT and open-source intelligence analysis: turning an anomalous public signal into a bounded requirement, collecting independent observations, testing competing explanations and producing a judgement that is useful without overstating certainty.
The starting query was:
site:transportes.gob.es "send crypto"
Google displayed two results. Both had the title Send crypto, and both showed the same JavaScript application-shell snippet. The URLs were:
The first URL resembles a public-facing institutional page. The second is more technical in appearance. That difference is useful for prioritising follow-up, but URL naming is not proof of function, ownership or malicious intent.
The core question was deliberately narrow:
Why does Google associate two URLs on a government domain with the title “Send crypto” when the visible snippet is a generic JavaScript application message?
The objective was not to prove an intrusion from the outside. It was to establish whether the anomaly was reproducible, identify what the public-facing infrastructure disclosed, and define what additional evidence would distinguish the leading explanations. No authentication was attempted, no security control was bypassed, and no state-changing request was sent.
In intelligence terms, this is an externally observed anomaly with potential security relevance, not yet an incident attribution. The search result is the initial indicator; DNS and HTTP checks are separate collection streams that help describe the environment, but they do not automatically corroborate the same underlying cause. The central analytical task is to determine whether the observations are causally connected.
The case is best handled as a small intelligence requirement with three questions: is the title anomaly persistent; is it reflected in the live page or only in the search index; and can the site operator identify an unauthorised change in content, metadata or deployment history? Each question requires a different source. Public OSINT can establish the external symptom and its persistence. The operator’s logs and change records are needed to determine cause.
This framing separates indicator, interpretation and judgement. It also prevents a common analytical failure: allowing a technically unusual observation, such as a DNS response or a CDN error, to lend unearned certainty to a separate hypothesis about malicious activity.
The first network test failed with curl: (6) Could not resolve host: transportes.gob.es.
A control request to Google succeeded, showing that the machine had general connectivity. The next step was to compare the local resolver with public resolvers.
nslookup transportes.gob.es
dig +short transportes.gob.es
dig transportes.gob.es A @1.1.1.1
dig transportes.gob.es A @8.8.8.8
dig transportes.gob.es NS @1.1.1.1
Both public resolvers returned NOERROR with zero answers for the root host’s A record.
The authority section contained an SOA record naming ns1.age.gob.es and the contact field
dns.mitma.es. The NS query returned ns1.age.gob.es and ns2.age.gob.es.
Direct queries to both authoritative nameservers also returned no A record.
dig transportes.gob.es AAAA @1.1.1.1
dig transportes.gob.es CNAME @1.1.1.1
dig @ns1.age.gob.es transportes.gob.es A
dig @ns2.age.gob.es transportes.gob.es A
The AAAA and CNAME queries also returned no answer. This establishes what those resolvers returned at the time of testing; it does not establish why the root host had no A/AAAA answer, nor whether that state was intentional or transient.
The www hostname behaved differently:
dig www.transportes.gob.es A @1.1.1.1
The response showed a CNAME to a CloudFront hostname and multiple IPv4 addresses. This is consistent with the
www host being served through a content-delivery network. It does not, by itself, reveal the origin server or the application architecture.
Requests to three paths on www.transportes.gob.es returned HTTP 403:
curl -sS -D - -o /dev/null --max-time 15 \
https://www.transportes.gob.es/
curl -sS -D - -o /dev/null --max-time 15 \
https://www.transportes.gob.es/movilidad-sostenible/semana-europea-movilidad
curl -sS -D - -o /dev/null --max-time 15 \
https://www.transportes.gob.es/snapshots/cubes
The responses shared several characteristics: HTTP/2 403, server: CloudFront,
x-cache: Error from cloudfront, a content length of 2,970 bytes, and the same ETag.
The returned HTML title was Página web bloqueada.
curl -sS -o cloudfront-error.html \
https://www.transportes.gob.es/snapshots/cubes
wc -c cloudfront-error.html
grep -inE 'bloque|motivo|contacto|solicitud|referencia|deneg|prohib|identificador|error' \
cloudfront-error.html
The body included this message:
Lo sentimos, los sistemas de seguridad han bloqueado la web a la que intenta acceder por motivos de seguridad. Por favor, intente acceder nuevamente más tarde.
It also loaded a Ministry-branded logo from cdn.transportes.gob.es. This establishes that the tested requests
received a branded blocking page. It does not identify which component made the blocking decision. A 403 can be generated by
a CDN configuration, a web application firewall, access policy, or the origin. The response alone cannot distinguish those causes.
The evidence supports several explanations. They are not mutually exclusive, and the current data does not select one conclusively.
<title>. Google explains that title links are automated and may use page headings, prominent text,
links and other sources. This remains a credible alternative.
/snapshots/cubes could be a valid route, an obsolete path, a test artefact, or an application route that is not meant
to be directly browsed. The path name is not enough to establish which. The 403 responses prevent a useful inspection of its current content.
| Hypothesis | Supporting observation | Missing evidence | Next discriminator |
|---|---|---|---|
| SEO spam / injection | Both results show “Send crypto” | Current HTML or server-side evidence of unauthorised content | Compare index, rendered page and origin logs |
| Stale or rewritten title | Search title differs from generic snippet | Current title and last crawl details | Recheck results and inspect an authorised current response |
| Shared SPA shell | Same JavaScript-required snippet on both paths | Successful page source and app configuration | Compare HTML and metadata when access is available |
| CDN / access policy | Same branded 403 on three www paths | WAF, CDN and origin logs | Operator-side request tracing |
The strongest finding is narrow: on 24 October 2026, a Google query was observed to show two URLs on
transportes.gob.es with the title “Send crypto”. Separately, DNS queries returned no A/AAAA answer for the root host,
www resolved through CloudFront, and HTTP requests to three www paths returned a common branded 403 page.
These facts establish an anomaly worth reporting. They do not establish unauthorised access, a successful compromise, the presence of cryptocurrency functionality, a malicious payload, or a causal relationship between DNS behaviour and the Google titles.
An anomaly is a collection requirement, not a verdict.
This distinction matters in OSINT. A good investigation does not reward the most dramatic explanation; it tests which explanation survives the evidence. Correlated observations should not be counted as independent confirmations. The same CDN error across three paths may be one configuration behaviour, not three separate security signals.
The operator-side evidence is decisive because an external observer cannot inspect deployment history or authoritative logs. The correct next step is responsible disclosure with URLs, timestamps, terminal output and the unedited search screenshot — not attempts to bypass the block or probe hidden endpoints.
The investigation began with two search results that did not fit their apparent context. The follow-up work established a repeatable search-index observation, a difference between root and www DNS behaviour, and a common branded 403 response from the www host. It also established a limit: the current content behind the routes could not be inspected from the tested environment.
Spam SEO or injected metadata remains a plausible hypothesis, not a confirmed incident. Stale indexing, automatically rewritten title links, application-level metadata and unrelated access-control behaviour remain viable alternatives.
The value of the exercise is not that it uncovered a breach. It is that it converted a weak but potentially relevant signal into a documented intelligence product: the observation is preserved, hypotheses are ranked only as far as the evidence allows, collection gaps are explicit, and the next action is tied to the evidence needed to resolve the question.
Judgement: the observed search-index anomaly is credible as a reported external observation, but its cause remains undetermined. Unauthorised SEO manipulation is a plausible explanation, yet the available evidence does not currently make it more than one of several viable hypotheses.
Confidence: high that the reported Google results and the recorded DNS/HTTP responses describe what was observed during this collection window; low regarding the underlying cause; insufficient evidence to assess whether a compromise occurred. These confidence levels refer to different propositions and should not be collapsed into a single rating.
Recommended action: preserve the evidence package and notify the responsible website/security team with the exact URLs, timestamps, query, raw outputs and screenshots. Request verification against CMS history, deployment records, page metadata and CDN/origin logs. Escalation as a confirmed incident should depend on that corroboration, not on the search title alone.
A later lead warranted a separate check. On 21 October 2026, the PHP project published fixes for CVE-2026-109618 and CVE-2026-109619. Some public reporting calls the pair “PHP2Shell”; that is not the title used in the PHP advisory. The official descriptions are RCE via OOM corruption and RCE via stale global state.
The PHP project rates both issues critical (CVSS v4.0: 9.2) and says that they can permit unauthenticated remote code execution in
PHP installations serving web requests. The first concerns an out-of-memory exit while request data is only partly initialised; the
second concerns request-owned state that can survive into a later request handled by the same worker. The fixed releases are
PHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12. The project documents a demonstrated HTTP exploit against Apache mod_php,
while describing other server interfaces and paths with more qualification. Updating to a fixed release is the only complete remediation.
This makes PHP a reasonable component to rule out where a server-side content or metadata change is being investigated: successful
code execution could, in principle, permit such a change. It does not connect these CVEs to the observed search results. The original
collection did not identify a PHP runtime, version, server interface, origin host, application or relevant time window on
transportes.gob.es. A CloudFront response is evidence of a delivery layer, not evidence of the runtime behind it.
The distinction is therefore straightforward. The Google title, DNS replies and branded 403 page are direct observations from this investigation. The CVE details and fixed versions are public vendor information, checked on 25 October 2026. Any claim that either flaw affected this domain remains a hypothesis. It would require operator-side confirmation of an affected PHP deployment during the relevant period, its SAPI and configuration, patch state, and logs or forensic evidence linking a request to an unauthorised content, metadata or deployment change. The same evidence could exclude the hypothesis if the relevant origin did not run an affected PHP build, or if logs and deployment history attribute the indexed title to another cause.
Current assessment: the PHP disclosures justify a focused validation question, not an attribution. Confidence in a relationship with the observed anomaly is insufficient.
- A. R. Brea, written 2026
Dos URL oficiales aparecieron en Google con el título «Send crypto». Qué permiten establecer el DNS, las respuestas HTTP y el índice del buscador, y qué queda sin demostrar.
La investigación comenzó con una búsqueda sencilla en Google: site:transportes.gob.es "send crypto".
Los resultados eran inesperados. Dos URL bajo el dominio del Ministerio de Transportes aparecían con el título
Send crypto, mientras que sus fragmentos mostraban el mensaje genérico
«You need to enable JavaScript to run this app».
La discrepancia merecía comprobarse. Una página sobre movilidad sostenible y una ruta llamada
/snapshots/cubes no parecen tener, por sus URL, una relación evidente con las criptomonedas.
Pero un resultado de búsqueda no es una conclusión forense. El objetivo fue determinar qué podía observarse de forma independiente,
separar las observaciones de las interpretaciones y evitar convertir una hipótesis plausible en una afirmación de intrusión.
La anomalía era visible en el índice. Su causa, no.
Este es un caso práctico de OSINT y análisis de inteligencia de fuentes abiertas: convertir una señal pública anómala en un requerimiento acotado, recopilar observaciones independientes, contrastar explicaciones y producir una valoración útil sin exagerar la certeza.
La búsqueda de partida fue:
site:transportes.gob.es "send crypto"
Google mostró dos resultados. Ambos tenían el título Send crypto y el mismo fragmento relativo a una aplicación JavaScript. Las URL eran:
La primera URL parece corresponder a una página institucional de cara al público. La segunda tiene un aspecto más técnico. Esa diferencia ayuda a priorizar comprobaciones, pero el nombre de una ruta no demuestra su función, su propietario ni una intención maliciosa.
La pregunta central se mantuvo deliberadamente acotada:
¿Por qué asocia Google dos URL de un dominio gubernamental con el título «Send crypto» si el fragmento visible es un mensaje genérico de una aplicación JavaScript?
El objetivo no era demostrar una intrusión desde el exterior. Era comprobar si la anomalía podía documentarse, identificar qué revelaba la infraestructura accesible públicamente y definir qué evidencia adicional permitiría discriminar entre las explicaciones principales. No se intentó autenticación, no se eludieron controles de seguridad y no se enviaron solicitudes que modificaran estado.
Desde una perspectiva de inteligencia, se trata de una anomalía observada desde el exterior con posible relevancia para la seguridad, no de una intrusión atribuida. El resultado de búsqueda es el indicador inicial; las comprobaciones DNS y HTTP son líneas de recopilación distintas que ayudan a describir el entorno, pero no corroboran automáticamente una misma causa. La tarea analítica central es determinar si las observaciones están relacionadas causalmente.
El caso puede abordarse como un requerimiento de inteligencia acotado con tres preguntas: ¿persiste la anomalía del título?, ¿aparece también en la página activa o solo en el índice del buscador?, y ¿puede el operador identificar un cambio no autorizado en el contenido, los metadatos o el historial de despliegues? Cada pregunta exige una fuente distinta. El OSINT público puede establecer el síntoma externo y su persistencia. Para determinar la causa hacen falta los registros y los historiales de cambios del operador.
Este enfoque separa indicador, interpretación y juicio analítico. También evita un error habitual: permitir que una observación técnicamente inusual, como una respuesta DNS o un error de CDN, aporte una certeza inmerecida a una hipótesis distinta sobre actividad maliciosa.
La primera prueba de red falló con curl: (6) Could not resolve host: transportes.gob.es.
Una petición de control a Google funcionó, lo que indicó que el equipo tenía conectividad general. El siguiente paso fue comparar el resolvedor local con resolvedores públicos.
nslookup transportes.gob.es
dig +short transportes.gob.es
dig transportes.gob.es A @1.1.1.1
dig transportes.gob.es A @8.8.8.8
dig transportes.gob.es NS @1.1.1.1
Ambos resolvedores públicos devolvieron NOERROR y cero respuestas para el registro A del dominio raíz.
La sección de autoridad contenía un registro SOA que identificaba ns1.age.gob.es y el campo de contacto
dns.mitma.es. La consulta NS devolvió ns1.age.gob.es y ns2.age.gob.es.
Las consultas directas a ambos servidores autoritativos tampoco devolvieron un registro A.
dig transportes.gob.es AAAA @1.1.1.1
dig transportes.gob.es CNAME @1.1.1.1
dig @ns1.age.gob.es transportes.gob.es A
dig @ns2.age.gob.es transportes.gob.es A
Las consultas AAAA y CNAME tampoco devolvieron respuesta. Esto documenta lo que respondieron esos resolutores en el momento de las pruebas; no demuestra por qué el dominio raíz carecía de respuestas A/AAAA ni si el estado era intencionado o temporal.
El host www se comportó de otra manera:
dig www.transportes.gob.es A @1.1.1.1
La respuesta mostró un CNAME hacia un nombre de CloudFront y varias direcciones IPv4. Esto es compatible con que el host
www se sirva mediante una red de distribución de contenidos. Por sí solo, no revela el servidor de origen ni la arquitectura de la aplicación.
Las peticiones a tres rutas de www.transportes.gob.es devolvieron HTTP 403:
curl -sS -D - -o /dev/null --max-time 15 \
https://www.transportes.gob.es/
curl -sS -D - -o /dev/null --max-time 15 \
https://www.transportes.gob.es/movilidad-sostenible/semana-europea-movilidad
curl -sS -D - -o /dev/null --max-time 15 \
https://www.transportes.gob.es/snapshots/cubes
Las respuestas compartían varias características: HTTP/2 403, server: CloudFront,
x-cache: Error from cloudfront, una longitud de contenido de 2.970 bytes y el mismo ETag.
El título del HTML recibido era Página web bloqueada.
curl -sS -o cloudfront-error.html \
https://www.transportes.gob.es/snapshots/cubes
wc -c cloudfront-error.html
grep -inE 'bloque|motivo|contacto|solicitud|referencia|deneg|prohib|identificador|error' \
cloudfront-error.html
El cuerpo incluía este mensaje:
Lo sentimos, los sistemas de seguridad han bloqueado la web a la que intenta acceder por motivos de seguridad. Por favor, intente acceder nuevamente más tarde.
También cargaba un logotipo del Ministerio desde cdn.transportes.gob.es. Esto demuestra que las peticiones probadas
recibieron una página de bloqueo con identidad visual institucional. No identifica qué componente tomó la decisión. Un 403 puede generarse
en la configuración de una CDN, un cortafuegos de aplicaciones web, una política de acceso o el servidor de origen. La respuesta por sí sola no permite distinguirlos.
La evidencia permite plantear varias explicaciones. No son mutuamente excluyentes y los datos disponibles no permiten elegir una de forma concluyente.
<title> actual. Google explica que los títulos se generan automáticamente y pueden basarse en encabezados, texto destacado,
enlaces y otras fuentes. Es una alternativa creíble.
/snapshots/cubes podría ser una ruta válida, una ruta obsoleta, un artefacto de pruebas o una ruta de aplicación que no esté pensada
para abrirse directamente. El nombre no basta para determinar cuál. Los 403 impiden inspeccionar su contenido actual de forma útil.
| Hipótesis | Observación compatible | Evidencia que falta | Siguiente comprobación |
|---|---|---|---|
| Spam SEO / inyección | Ambos resultados muestran «Send crypto» | HTML actual o evidencia del servidor de contenido no autorizado | Comparar índice, página renderizada y registros de origen |
| Título obsoleto o reescrito | El título difiere del fragmento genérico | Título actual y detalles del último rastreo | Revisar de nuevo los resultados e inspeccionar una respuesta actual autorizada |
| Plantilla SPA compartida | Mismo fragmento de JavaScript en ambas rutas | Código fuente accesible y configuración de la aplicación | Comparar HTML y metadatos cuando el acceso esté disponible |
| CDN / política de acceso | Mismo 403 institucional en tres rutas de www | Registros de WAF, CDN y origen | Trazabilidad de peticiones por parte del operador |
El hallazgo más sólido es acotado: el 24 de octubre de 2026 se observó una búsqueda de Google que mostraba dos URL de
transportes.gob.es con el título «Send crypto». Por separado, las consultas DNS no obtuvieron respuestas A/AAAA para el dominio raíz,
www resolvió mediante CloudFront y las peticiones HTTP a tres rutas de www devolvieron una página de bloqueo común.
Estos hechos documentan una anomalía que merece comunicarse. No demuestran acceso no autorizado, un compromiso exitoso, la presencia de funcionalidad de criptomonedas, una carga maliciosa ni una relación causal entre el DNS y los títulos de Google.
Una anomalía es un requisito de recopilación, no un veredicto.
Esta distinción importa en OSINT. Una buena investigación no premia la explicación más dramática: comprueba cuál resiste la evidencia. Las observaciones correlacionadas no deben contarse como confirmaciones independientes. El mismo error CDN en tres rutas puede responder a una única configuración, no a tres señales de seguridad separadas.
La evidencia del lado del operador es decisiva porque un observador externo no puede inspeccionar el historial de despliegues ni los registros autoritativos. El siguiente paso adecuado es una comunicación responsable con URL, marcas temporales, salidas de terminal y la captura original sin editar; no intentar eludir el bloqueo ni sondear endpoints ocultos.
La investigación empezó con dos resultados de búsqueda que no encajaban con su contexto aparente. Las comprobaciones posteriores documentaron una observación reproducible en el índice, una diferencia de comportamiento DNS entre el dominio raíz y www, y una respuesta 403 institucional común desde el host www. También establecieron un límite: no fue posible inspeccionar el contenido actual de las rutas desde el entorno probado.
El spam SEO o la inyección de metadatos siguen siendo hipótesis plausibles, no un incidente confirmado. La indexación obsoleta, la reescritura automática de títulos, los metadatos de una aplicación y un comportamiento de control de acceso independiente siguen siendo alternativas viables.
El valor del ejercicio no es haber descubierto una intrusión. Es haber convertido una señal débil pero potencialmente relevante en un producto de inteligencia documentado: la observación queda preservada, las hipótesis solo se priorizan hasta donde permite la evidencia, los vacíos de recopilación son explícitos y la siguiente acción depende de la evidencia necesaria para resolver la cuestión.
Juicio: la anomalía del índice de búsqueda es creíble como observación externa documentada, pero su causa sigue sin determinarse. La manipulación SEO no autorizada es una explicación plausible, aunque la evidencia disponible no permite situarla por encima de las demás hipótesis viables.
Confianza: alta en que los resultados de Google y las respuestas DNS/HTTP registradas describen lo observado durante esta ventana de recopilación; baja respecto a la causa subyacente; evidencia insuficiente para valorar si hubo compromiso. Estos niveles se refieren a proposiciones distintas y no deben reducirse a una única calificación.
Acción recomendada: conservar el conjunto de evidencias y notificar al equipo responsable del sitio o de seguridad con las URL exactas, marcas temporales, consulta, salidas originales y capturas. Solicitar que se contraste con el historial del CMS, los despliegues, los metadatos y los registros de CDN/origen. La escalada como incidente confirmado debe depender de esa corroboración, no únicamente del título mostrado por el buscador.
Una línea posterior justificaba una comprobación independiente. El 21 de octubre de 2026, el proyecto PHP publicó correcciones para CVE-2026-109618 y CVE-2026-109619. Algunas publicaciones se refieren al conjunto como «PHP2Shell», pero esa no es la denominación del aviso de PHP. Las descripciones oficiales son RCE mediante corrupción por OOM y RCE mediante estado global obsoleto.
El proyecto PHP califica ambas vulnerabilidades como críticas (CVSS v4.0: 9,2) e indica que pueden permitir ejecución remota de código
sin autenticación en instalaciones PHP que atienden peticiones web. La primera se produce al salir por falta de memoria mientras los datos
de la petición están parcialmente inicializados; la segunda, cuando estado propio de una petición persiste hasta una petición posterior
atendida por el mismo worker. Las versiones corregidas son PHP 8.2.35, 8.3.36, 8.4.27 y 8.5.12. El proyecto documenta un exploit HTTP
demostrado contra Apache con mod_php; para otras interfaces y rutas describe condiciones más específicas. Actualizar a una
versión corregida es la única remediación completa.
Esto hace razonable descartar PHP como componente cuando se investiga un posible cambio de contenido o metadatos en servidor: una ejecución
de código lograda podría, en principio, permitirlo. No conecta estas CVE con los resultados observados. La recopilación original no identificó
un runtime PHP, versión, interfaz de servidor, host de origen, aplicación ni ventana temporal relevante en transportes.gob.es.
Una respuesta de CloudFront acredita una capa de distribución, no el runtime situado detrás.
La separación es, por tanto, concreta. El título de Google, las respuestas DNS y la página 403 institucional son observaciones directas de esta investigación. Los detalles de las CVE y las versiones corregidas son información pública del proveedor, comprobada el 25 de octubre de 2026. Cualquier afirmación de que una de las vulnerabilidades afectó a este dominio sigue siendo una hipótesis. Requeriría confirmación del operador de un despliegue PHP afectado en el periodo relevante, su SAPI y configuración, estado de parcheado, y registros o evidencia forense que vinculen una petición con un cambio no autorizado de contenido, metadatos o despliegue. Esa hipótesis también quedaría descartada si el origen relevante no ejecutaba una versión PHP afectada, o si los registros y el historial de despliegues atribuyen el título indexado a otra causa.
Valoración actual: las divulgaciones de PHP justifican una pregunta de validación concreta, no una atribución. La confianza en una relación con la anomalía observada es insuficiente.
- A. R. Brea, escrito en 2026