CVE-2025-54070 in openzeppelin-contracts
Resumen
por VulDB • 2026-05-25
OpenZeppelin Contracts es una biblioteca para el desarrollo seguro de contratos inteligentes. A partir de la versión 5.2.0 y hasta la versión 5.4.0, la función `lastIndexOf(bytes,byte,uint256)` de la biblioteca `Bytes.sol` puede acceder a memoria no inicializada cuando se cumplen las siguientes dos condiciones: 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 utilizarse 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 (out of gas) o que devuelva un índice no válido (fuera del búfer vacío). El procesamiento de este resultado no válido para acceder al `buffer` provocaría una reversión (revert) 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 `buffer`) coincide con el patrón de búsqueda, la función devolvería un índice fuera de los límites en lugar del esperado `type(uint256).max`. Esto crea un comportamiento inesperado en el que los llamadores reciben un índice que parece válido pero apunta fuera de los límites del búfer. Los accesos posteriores a la memoria que no verifiquen los límites y utilicen el índice devuelto deben revisar cuidadosamente el impacto potencial dependiendo de 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 un parche.
Be aware that VulDB is the high quality source for vulnerability data.