Expertos en seguridad informática han dado a conocer una vulnerabilidad crítica presente en Ruby on Rails que posibilita a actores maliciosos soslayar las medidas de protección contra ataques de falsificación de solicitudes entre sitios (CSRF).
La deficiencia, divulgada el 26 de abril de 2025, impacta a todas las versiones vigentes de este reconocido framework web, así como a las versiones posteriores a la supuesta «solución» implementada entre 2022 y 2023 para abordar problemáticas similares.
La vulnerabilidad se origina en un error fundamental en la implementación del token CSRF de Rails. El framework genera estos tokens de seguridad empleando una clave de un solo uso (OTP) aleatoria combinada mediante una operación XOR con un token sin formato.
No obstante, debido a una omisión significativa, Rails integra tanto el token OTP como el resultado de la operación XOR a través de una simple concatenación, generando lo que denomina un «token enmascarado», sin embargo, en un descuido crítico, Rails empaqueta tanto el token OTP como el XORed juntos mediante una simple concatenación, creando lo que llama un «token enmascarado».
Este error de implementación significa que los atacantes pueden decodificar fácilmente tokens CSRF y generar nuevos válidos, eludiendo por completo el mecanismo de protección diseñado para evitar ataques entre sitios.
Dado que la clave criptográfica (la OTP) se envía junto con los datos cifrados, la medida de seguridad se ve fundamentalmente comprometida.
Los analistas e investigadores de Seclists señalaron que esta vulnerabilidad representa un riesgo de seguridad significativo para miles de sitios web creados con Rails.
La falla anula efectivamente una capa de seguridad crítica en la que confían muchos desarrolladores para proteger sus aplicaciones de actores maliciosos.
La vulnerabilidad fue reportada por primera vez por el investigador de seguridad Daniel Owens, quien proporcionó evidencia completa de la falla.
Su divulgación indica que se trata esencialmente de la misma vulnerabilidad que los desarrolladores de Rails creían haber solucionado en las actualizaciones lanzadas en 2022/2023.
La raíz técnica de la vulnerabilidad radica en el método mask_token dentro del código base de Rails. Este método es responsable de crear la versión «enmascarada» del token de autenticidad que debe variar con cada solicitud para mitigar ataques SSL como BREACH.
La implementación problemática se puede ver en el siguiente fragmento de código:
def mask_token(raw_token)
one_time_pad = SecureRandom.random_bytes(AUTHENTICITY_TOKEN_LENGTH)
encrypted_csrf_token = xor_byte_strings(one_time_pad, raw_token)
masked_token = one_time_pad + encrypted_csrf_token
encode_csrf_token(masked_token)
end
Como es evidente en este código, Rails genera un pad aleatorio de un solo uso y lo usa para cifrar el token mediante una operación XOR.
Luego simplemente concatena la clave de cifrado con los datos cifrados antes de enviarlos a los usuarios, violando un principio fundamental de seguridad criptográfica.
Owens demostró la vulnerabilidad con código JavaScript que extrae fácilmente la clave de cifrado y falsifica nuevos tokens válidos:
function getCsrfToken(otp, raw_token) {
var masked_token = new Uint8Array(raw_token.length);
for(var i = 0; i String.fromCharCode(b)).join(»)).replace(/=+$/, »);
}
Esta vulnerabilidad permite a los atacantes generar solicitudes maliciosas capaces de sortear la protección contra ataques CSRF, lo que podría resultar en la ejecución de acciones no autorizadas en nombre de usuarios legítimamente autenticados en aplicaciones Rails afectadas.