
Marco de detección automatizada de vulnerabilidades para vulnerabilidades de ejecución transitoria (IEEE S&P '26)
Soportamos los siguientes entornos:
Trevex se desarrolla y prueba en Ubuntu 22.04 LTS y 24.04 LTS. Aunque otras distribuciones pueden funcionar, algunas partes del framework, por ejemplo, la verificación e instalación de dependencias, asumen apt como gestor de paquetes.
Trevex actualmente solo apunta a x86. El soporte para más arquitecturas llegará en un futuro cercano.
Recomendamos agregar el siguiente alias de shell en sus dotfiles:
function tvx() {<repo-root>/tvx.py $@}
A continuación, instale las dependencias del framework:
pip install -r ./requirements.txt
sudo apt-get update
sudo apt-get install build-essential cmake tmux cpuid linux-tools-common
Trevex se controla mediante la utilidad de línea de comandos tvx.
tvx sigue esta sintaxis:
tvx <command> <subcommand>
y soporta los siguientes comandos:
runEl comando run se usa para controlar ejecuciones locales de fuzzing:
# start the fuzzer
tvx run start
# clear the progress made and all results
tvx run cleanup
resultEl comando result se usa para inspeccionar y procesar los resultados del fuzzing:
# classify the results
# (typically the first thing you want to do after fuzzing)
tvx result classify
# view the content of a testfile
tvx result view <result-file.json>
# export a given test file into a standalone 'reproducer'
# allows you to inspect the result further
tvx result export <result-file.json>
# rerun the testcase inside the fuzzer
tvx result rerun
setup (se publicará en un futuro cercano)El comando setup se usa para instalar y cargar dependencias.
# install/check Trevex system dependencies (apt and python packages)
tvx setup install
# load the tvx Python environment
tvx setup load
ctrl (se publicará en un futuro cercano)El comando ctrl se usa para orquestar campañas de fuzzing de Trevex que consisten en múltiples máquinas. Permite desplegar Trevex en varias máquinas y extraer los resultados a su máquina. El conjunto de máquinas se define mediante un archivo de configuración de máquinas.
El archivo de máquina consiste en 1 nombre de configuración SSH por línea. Además, el formato soporta comentarios que comienzan con #. Trevex asume que tiene acceso SSH sin contraseña a estas máquinas. Normalmente, esto se hace mediante autenticación basada en claves y almacenando las claves en su agente SSH local, por ejemplo, usando ssh-add.
Una configuración válida se ve así:
uarch-lab01 # my server
uarch-lab03 # my dev machine
uarch-lab07 # my other dev machine
El comando ctrl requiere que especifique el archivo de máquina antes del subcomando:
tvx ctrl -m <machine_file.cfg> <subcommand>
Una campaña típica de fuzzing se ve de la siguiente manera:
# prepare the machines for the fuzzing campaign
# ATTENTION: this might change the running kernel and reboot the machine
# This is not always needed, you can just try skipping the step.
tvx ctrl -m ./my-servers.cfg setup
# Start Trevex on the remote machines and attach to their tmux sessions
# Note: If Trevex fails to start, the skipped setup step might be the reason.
tvx ctrl -m ./my-servers.cfg spawn
# Detach from all tmux sessions and let it run for a while
tvx ctrl -m ./my-servers.cfg detach
# Attach again to the tmux sessions
tvx ctrl -m ./my-servers.cfg attach
# Stop all Trevex instances once you're done
tvx ctrl -m ./my-servers.cfg stop
# Retrieve the results and store them on your local machine
# Note: While this is often useful for organization, actual
# reproduction steps should executed on the *exact same*
# CPU that was fuzzed.
tvx ctrl -m ./my-servers.cfg pull-results
# Reset the state on all machines. This cleans all progress
# made and deletes all results.
tvx ctrl -m ./my-servers.cfg cleanup
devEste comando se usa únicamente para fines de desarrollo. Por lo tanto, permanece sin documentar por ahora.
"Novel" se refiere a hallazgos que son completamente nuevos o donde TREVEX descubrió aspectos adicionales, como nuevas variantes o instancias en microarquitecturas que no se sabía anteriormente que estuvieran afectadas.
| Vulnerability | Status | Notes |
|---|---|---|
| FP-DSS | Novedosa | Fuga datos obsoletos de la unidad de ejecución de punto flotante |
| LVI-NULL | Novedosa | Descubierta en microarquitecturas no conocidas como vulnerables |
| FPVI | Novedosa | Descubierta nueva variante y FPVI en Zhaoxin |
| GDS (Downfall) | Reproducida | Primer fuzzer en detectarlo |
| MDS (ZombieLoad, RIDL, VRS, ...) | Reproducida | - |
| Meltdown-US | Reproducida | La vulnerabilidad Meltdown "original" |
| Meltdown-CPL-REG | Reproducida | Requiere un sistema con nofsgsbase |
Vaya al directorio ./pocs.
La carpeta ./pocs/amd-fpdss contiene nuestra PoC para Floating-Point Divider State Sampling (FP-DSS). FP-DSS es un ataque de ejecución transitoria que filtra estado de las unidades de división de punto flotante SSE y AVX. Se rastrea como CVE-2025-54505 y es discutido por AMD en un Aviso de Seguridad. Afecta a CPUs AMD Zen 1 y Zen+.
La carpeta ./pocs/amd-fpvi-variant contiene nuestra PoC para una variante de FPVI que no requiere valores de entrada denormales. AMD discute el hallazgo en un Aviso de Seguridad. Afecta a CPUs AMD.
La carpeta ./pocs/intel-zero-at-ret contiene nuestra PoC para la variante Zero-at-Ret de LVI NULL.
La carpeta ./pocs/zhaoxin-fpvi contiene nuestra PoC que desencadena el comportamiento FPVI en la microarquitectura LuJiaZui de Zhaoxin.
El artículo está disponible aquí. Puede citar nuestro trabajo con la siguiente entrada BibTeX:
@inproceedings{Weber2026Trevex,
author = {Weber, Daniel and Thomas, Fabian and Trampert, Leon and Zhang, Ruiyi and Schwarz, Michael},
booktitle = {{IEEE S\&P}},
title = {{Trevex: A Black-Box Detection Framework For Data-Flow Transient Execution Vulnerabilities}},
year = {2026}
}
Proporcionamos este código tal cual. Usted es responsable de protegerse a sí mismo, su propiedad y datos, y a otros de cualquier riesgo causado por este código. Este código puede causar comportamientos inesperados y no deseados en su máquina.