Media

vyper performs double eval of the slice start/length args in certain cases

  • Publicada: 25.04.2024
  • Actualizado: 11.10.2026 12:20

Summary

Using the slice builtin can result in a double eval vulnerability when the buffer argument is either msg.data, self.code or <address>.code and either the start or length arguments have side-effects.

A contract search was performed and no vulnerable contracts were found in production. Having side-effects in the start and length patterns is also an unusual pattern which is not that likely to show up in user code. It is also much harder (but not impossible!) to trigger the bug since 0.3.4 since the unique symbol fence was introduced (https://github.com/vyperlang/vyper/pull/2914).

Details

It can be seen that the _build_adhoc_slice_node function of the slice builtin doesn't cache the mentioned arguments to the stack: https://github.com/vyperlang/vyper/blob/4595938734d9988f8e46e8df38049ae0559abedb/vyper/builtins/functions.py#L244

As such, they can be evaluated multiple times (instead of retrieving the value from the stack).

PoC

with Vyper version 0.3.3+commit.48e326f the call to foo passes the asserts:

vyper
l: DynArray[uint256, 10]

@external
def foo(cs: String[64]) -> uint256:
    for i in range(10):
        self.l.append(1)
    assert len(self.l) == 10
    s: Bytes[64] = b""
    s = slice(msg.data, self.l.pop(), 3)
    assert len(self.l) == 10 - 2
    return len(self.l)

Patches

Patched in https://github.com/vyperlang/vyper/pull/3976.

Impact

No vulnerable production contracts were found.

Software afectado

Haz clic en una tecnología para ver todas sus vulnerabilidades.

PlataformaPaqueteVersiones vulnerablesCorregida en
Python (PyPI) vyper < 0.4.0 0.4.0

Referencias

Puntuación CVSS 5.3/10
Vector CVSS
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Debilidad (CWE)
CWE-20
Plataforma
Python (PyPI)
Paquete
vyper
Publicada
25.04.2024
Actualizado
11.10.2026 12:20

Fuentes y licencias

OSV / GitHub Advisory Database - PYSEC-2024-207 - PyPA Advisory Database; CC BY 4.0

OSV / GitHub Advisory Database - GHSA-r56x-j438-vw5m - CC BY 4.0

Historial de vulnerabilidades: vyper

Todas las vulnerabilidades publicadas de este paquete (Python (PyPI)), de la más reciente a la más antigua. Muestra si es un fallo aislado o un paquete que hay que vigilar.

Todas (47) en el archivo
Entradas en total
47
Primera → última
03.2020 10.2026
Sin corrección
5
Explotada en ataques
0

Distribución por gravedad

  • Crítica 3
  • Alta 14
  • Media 20
  • Baja 10

Divulgaciones por año

  1. 2020: 1
  2. 2021: 5
  3. 2022: 4
  4. 2023: 14
  5. 2024: 14
  6. 2025: 6
  7. 2026: 3
Gravedad:
  1. vyper performs double eval of the slice start/length args in certain cases esta entrada
    Media · 5.3 CVE-2024-32646 < 0.4.0 0.4.0
  2. Crítica · 9.8 CVE-2024-24563 < 0.4.0 0.4.0
  3. Crítica · 9.8 CVE-2024-24561 < 0.4.0 0.4.0
  4. Alta · 7.3 CVE-2024-22419 >= 0.3.0, < 0.4.0 0.4.0
  5. Alta · 7.5 CVE-2023-46247 < 0.3.8 0.3.8
  6. Alta · 8.1 CVE-2023-42443 >= 0.3.4, < 0.3.10 0.3.10
  7. Crítica · 8.7 CVE-2023-39363 >= 0.2.15, < 0.3.1 0.3.1
  8. Alta · 7.5 CVE-2023-32058 < 0.3.8 0.3.8
  9. Alta · 7.5 CVE-2023-30837 < 0.3.8 0.3.8
  10. Alta · 7.5 CVE-2023-30629 >= 0.3.1, < 0.3.8 0.3.8
  11. Alta · 7.5 CVE-2022-29255 < 0.3.4 0.3.4
  12. Alta · 7.1 CVE-2022-24788 < 0.3.2 0.3.2
  13. Alta · 7.5 CVE-2022-24787 < 0.3.2 0.3.2
  14. Alta ghsa-7f92-rr6w-cq64 >= 0.2.13, < 0.2.15 0.2.15

Identifica las vulnerabilidades de tu aplicación

Con la integración de DockRay y el inventario de software activado, DockRay compara las versiones notificadas de los componentes con las vulnerabilidades conocidas y avisa de las coincidencias confirmadas. La cobertura depende de la tecnología compatible y de los avisos disponibles.

Conectar tu aplicación
Newsletter DockRay

La seguridad de tus aplicaciones en tu correo

Vulnerabilidades importantes, recomendaciones concretas y consejos prácticos para tus aplicaciones. Elige tus tecnologías y sigue lo que importa para tu proyecto.

  • Un resumen diario de nuevas vulnerabilidades, también las críticas.
  • Avisos sobre actualizaciones importantes.
  • Consejos prácticos sobre seguridad y monitorización de aplicaciones.

Déjalo vacío para recibir avisos de todas las tecnologías.

Suscripción gratuita. Date de baja con un clic en cualquier correo.