Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en OpenZeppelin Contracts (CVE-2025-54070)

Gravedad CVSS v4.0:
MEDIA
Tipo:
CWE-125 Lectura fuera de límites
Fecha de publicación:
17/07/2025
Última modificación:
17/07/2025

Descripción

OpenZeppelin Contracts es una librería para el desarrollo seguro de contratos inteligentes. A partir de la versión 5.2.0 y anteriores a la 5.4.0, la función `lastIndexOf(bytes,byte,uint256)` de la librería `Bytes.sol` puede acceder a memoria no inicializada cuando se cumplen las dos condiciones siguientes: 1) la longitud del búfer proporcionado está vacía (es decir, `buffer.length == 0`) y la posición no es `2**256 - 1` (es decir, `pos != type(uint256).max`). El argumento `pos` podría usarse para acceder a datos arbitrarios fuera de los límites del búfer. Esto podría provocar que la operación se quede sin gas o que devuelva un índice no válido (fuera del búfer vacío). Procesar este resultado no válido para acceder al `buffer` provocaría una reversión en condiciones normales. Cuando se activa, la función lee la memoria en el desplazamiento `buffer + 0x20 + pos`. Si la memoria en esa ubicación (fuera del búfer) coincide con el patrón de búsqueda, la función devolvería un índice fuera de los límites en lugar del `type(uint256).max` esperado. Esto genera un comportamiento inesperado: quienes llaman reciben un índice aparentemente válido que apunta fuera de los límites del búfer. Los accesos posteriores a memoria que no verifiquen los límites y utilicen el índice devuelto deben revisar cuidadosamente el posible impacto según su configuración. El código que dependa de que esta función devuelva `type(uint256).max` para búferes vacíos o que utilice el índice devuelto sin verificar los límites podría presentar un comportamiento indefinido. Los usuarios deben actualizar a la versión 5.4.0 para recibir una actualización.