Vulnerabilidad en Vyper (CVE-2024-24563)
Gravedad CVSS v3.1:
CRÍTICA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
07/02/2024
Última modificación:
15/02/2024
Descripción
Vyper es un lenguaje de contrato inteligente pitónico para la máquina virtual Ethereum. Las matrices pueden codificarse mediante un entero con signo, mientras que están definidas solo para enteros sin signo. El verificador de tipos no arroja datos al detectar el uso de un `int` como índice para una matriz. El verificador de tipos permite el uso de números enteros con signo como índices de matrices. La vulnerabilidad está presente en diferentes formas en todas las versiones, incluida la "0.3.10". Para enteros, se utiliza la representación en complemento a 2. Debido a que la matriz fue declarada muy grande, la verificación de los límites pasará. Los valores negativos simplemente se representarán como números muy grandes. Al momento de la publicación, no existe una versión fija. Hay tres clases potenciales de vulnerabilidad: comportamiento impredecible, acceso a elementos inaccesibles y denegación de servicio. Clase 1: si es posible indexar una matriz con un número entero negativo sin revertirla, lo más probable es que el desarrollador no lo anticipe y dichos accesos pueden causar un comportamiento impredecible para el contrato. Clase 2: si un contrato tiene una invariante en la forma "afirmar índice = x` son accesibles. Sin embargo, al utilizar índices negativos, esto se puede evitar. Clase 3: Si el índice depende del estado del contrato, esto plantea un riesgo de denegación de servicio. Si el estado del contrato se puede manipular de tal manera que el índice se vea obligado a ser negativo, el acceso a la matriz siempre se puede revertir (porque lo más probable es que la matriz no se declare extremadamente grande). Sin embargo, todos estos escenarios son muy improbables. El comportamiento más probable es revertir la comprobación de los límites.
Impacto
Puntuación base 3.x
9.80
Gravedad 3.x
CRÍTICA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:a:vyperlang:vyper:*:*:*:*:*:python:*:* | 0.3.10 (incluyendo) |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://github.com/vyperlang/vyper/blob/a1fd228cb9936c3e4bbca6f3ee3fb4426ef45490/vyper/codegen/core.py#L534-L541
- https://github.com/vyperlang/vyper/blob/c150fc49ee9375a930d177044559b83cb95f7963/vyper/semantics/types/subscriptable.py#L127-L137
- https://github.com/vyperlang/vyper/security/advisories/GHSA-52xq-j7v9-v4v2