Articulo de referencia

Lectura fuera de límites

En seguridad informática y programación , una lectura fuera de límites [ 1 ] es una anomalía de software en la que un programa , al leer datos de un búfer , lee fuera de los lím...

En seguridad informática y programación , una lectura fuera de límites [ 1 ] es una anomalía de software en la que un programa , al leer datos de un búfer , lee fuera de los límites del búfer desde la memoria adyacente. Este es un caso especial de violación de la seguridad de la memoria y una forma de violación de la confidencialidad de los datos (véase la tríada CIA ). Una lectura excesiva del búfer [ 2 ] [ 3 ] y una lectura insuficiente del búfer son casos especiales de lecturas fuera de límites. [ 1 ]

Las lecturas fuera de límites son la base de muchas vulnerabilidades de software . En algunos casos, pueden ser explotadas maliciosamente para acceder a información privilegiada. [ 4 ] Por ejemplo, a veces pueden ser desencadenadas, como en el error Heartbleed , por entradas maliciosas diseñadas para explotar la falta de comprobación de límites y leer partes inaccesibles de la memoria.

En otras ocasiones, las lecturas fuera de límites pueden provocar otros comportamientos erráticos del programa, como errores de acceso a la memoria (incluidos fallos de página no válidos ), resultados incorrectos o bloqueos . Por ejemplo, las interrupciones generalizadas de TI en 2024 fueron causadas por un error de memoria fuera de límites en un software de ciberseguridad desarrollado por CrowdStrike . [ 5 ]

Los lenguajes de programación comúnmente asociados con lecturas fuera de límites incluyen C y C++ , que no proporcionan ninguna protección incorporada contra el uso de punteros para acceder a datos en cualquier parte de la memoria virtual , y que no comprueban automáticamente que la lectura de datos de un bloque de memoria sea segura; ejemplos respectivos son intentar leer más elementos de los contenidos en una matriz, o no agregar un terminador final a una cadena terminada en nulo .

La comprobación de límites , el sandboxing , el análisis estático , el uso de lenguajes de programación seguros para la memoria y la verificación del programa pueden prevenir las lecturas excesivas del búfer, [ 6 ] mientras que técnicas como las pruebas de fuzz pueden ayudar a detectarlas.

Ejemplos de lecturas fuera de límites

Entre los principales ejemplos históricos de lecturas prohibidas se incluyen:

  • Heartbleed (2012) fue un error importante en OpenSSL que permitía a los clientes leer desde memoria arbitraria. [ 7 ]

Categorización

Mitre Corporation (MITRE) clasifica las lecturas fuera de límites bajo la Enumeración de Debilidades Comunes CWE-125, [ 1 ] con subcategorías CWE-126 (sobrelectura de búfer) [ 2 ] y CWE-127 (sublectura de búfer). [ 11 ]

MITRE enumera el patrón de ataque correspondiente en la Enumeración y Clasificación de Patrones de Ataque Comunes "CAPEC-540: Overread Buffers". [ 12 ] Este ataque se clasifica con una baja probabilidad de ataque, pero con una gravedad típica alta si se produce un ataque.

Mitigación

MITRE recomienda que las lecturas excesivas de búfer se pueden detectar eficazmente con análisis estático (más específicamente, pruebas de seguridad de aplicaciones estáticas ). Recomienda el análisis dinámico (como AddressSanitizer ) por su eficacia moderada en la detección. [ 2 ]

Para la vulnerabilidad principal de lecturas fuera de límites (CWE-125), MITRE recomienda la validación de datos (por ejemplo, comprobar que los datos estén dentro de los límites), así como la selección del lenguaje: «Utilice un lenguaje que proporcione abstracciones de memoria adecuadas». [ 1 ] Véase también Lista de lenguajes de programación por tipo#Lenguajes por tipo de gestión de memoria . El fuzzing también se menciona como un método de detección muy eficaz. [ 1 ]

Véase también

Referencias

  1. 1 2 3 4 5 "CWE - CWE-125: Lectura fuera de límites (4.20)" . cwe.mitre.org . Consultado el 14 de junio de 2026 .
  2. 1 2 3 "CWE – CWE-126: Lectura excesiva del búfer" . Enumeración de debilidades comunes (versión de la lista 4.15) . 18 de febrero de 2014. Archivado del original el 8 de febrero de 2018. Recuperado el 24 de julio de 2024 .
  3. Strackx, Raoul; Younan, Yves; Philippaerts, Pieter; Piessens, Frank; Lachmund, Sven; Walter, Thomas (1 de enero de 2009). «Rompiendo la suposición del secreto de la memoria» . Actas del Segundo Taller Europeo sobre Seguridad de Sistemas . EUROSEC '09. Nueva York, NY, EE. UU.: ACM. págs. 1–8 . doi : 10.1145/1519144.1519145 . ISBN  9781605584720. S2CID 17259394 . 
  4. "CWE - CWE-126: Lectura excesiva del búfer (4.20)" . cwe.mitre.org . Consultado el 14 de junio de 2026 .
  5. "Centro de orientación y solución de problemas de actualización de contenido de Falcon | CrowdStrike" . crowdstrike.com . Archivado del original el 24/07/2024 . Consultado el 24/07/2024 .
  6. Yves Younan; Wouter Joosen; Frank Piessens (25 de febrero de 2013). "Protección eficiente contra desbordamientos de búfer basados ​​en el montón sin recurrir a la magia" (PDF) . Departamento de Ciencias de la Computación, Universidad Católica de Lovaina. Archivado del original (PDF) el 5 de septiembre de 2013. Consultado el 24 de abril de 2014 .
  7. "Vulnerabilidad 'Heartbleed' de OpenSSL (CVE-2014-0160) | CISA" . www.cisa.gov . 5 de octubre de 2016. Consultado el 14 de junio de 2026 .
  8. "PHP DateInterval Heap Buffer Overread Denial of Service - TELUS Security Labs" . telussecuritylabs.com . Archivado del original el 24/04/2014 . Consultado el 14/06/2026 .
  9. "PHP :: Bug #66060 :: Lectura excesiva del búfer del montón en DateInterval" . bugs.php.net . Consultado el 14 de junio de 2026 .  
  10. "Centro de orientación y solución de problemas de actualización de contenido de Falcon" . CrowdStrike . Consultado el 24 de julio de 2024 .{{cite web}}: CS1 mantenimiento: estado de la URL ( enlace )
  11. "CWE - CWE-127: Lectura insuficiente del búfer (4.20)" . cwe.mitre.org . Consultado el 14 de junio de 2026 .
  12. "CAPEC - CAPEC-540: Sobrelectura de búferes (Versión 3.9)" . capec.mitre.org . Consultado el 14 de junio de 2026 .
  • Heartbleed
  • Error de PHP n.° 66060: Lectura excesiva del búfer de montón en DateInterval