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

Vulnerabilidad en Vyper (CVE-2023-42443)

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-787 Escritura fuera de límites
Fecha de publicación:
18/09/2023
Última modificación:
22/09/2023

Descripción

Vyper es un Lenguaje de Contrato Inteligente Pitónico para la Máquina Virtual Ethereum (EVM). En la versión 0.3.9 y anteriores, bajo ciertas condiciones, la memoria utilizada por las funciones integradas `raw_call`, `create_from_blueprint` y `create_copy_of` puede estar dañada. Para `raw_call`, el búfer de argumentos de la llamada puede estar dañado, lo que genera `calldata` incorrectos en el subcontexto. Para `create_from_blueprint` y `create_copy_of`, el búfer para el código de bytes que se va a implementar puede estar dañado, lo que lleva a implementar un código de bytes incorrecto. Cada elemento incorporado tiene condiciones que deben cumplirse para que se produzca la corrupción. Para `raw_call`, el argumento `data` del incorporado debe ser `msg.data` y el `valor` o `gas` pasado al incorporado debe ser alguna expresión compleja que dé como resultado la escritura en la memoria. Para `create_copy_of`, el `valor` o `salt` pasado al incorporado debe ser alguna expresión compleja que dé como resultado la escritura en la memoria. Para `create_from_blueprint`, no se deben pasar parámetros de constructor al incorporado o `raw_args` debe establecerse en True, y el `valor` o `salt` pasado al incorporado debe ser alguna expresión compleja que dé como resultado la escritura en la memoria . Al momento de la publicación, no existe ninguna versión parcheada. El problema aún se está investigando y es posible que haya otros casos en los que se produzca corrupción. Cuando se llama a la función incorporada desde una función "interna" "F", el problema no está presente siempre que la función que llama a "F" haya escrito en la memoria antes de llamar a "F". Como workaround, las expresiones complejas que se pasan como kwargs al incorporado deben almacenarse en caché en la memoria antes de la llamada al incorporado.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:a:vyperlang:vyper:*:*:*:*:*:python:*:* 0.3.10 (excluyendo)