Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Error de software
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
{{redirige aquí|Bug}} Un '''error de ''software''''', '''error''' o simplemente '''fallo''' (también conocido por el inglés, '''''bug''''') es un problema en un programa de [[computadora]] o sistema de ''[[software]]'' que desencadena un resultado indeseado. Los programas que ayudan a la detección y eliminación de errores de ''software'' son denominados [[depurador]]es ({{lang-en|debuggers}}). Entre las numerosas incidencias notables causadas por este tipo de error están la máquina de radioterapia [[Therac-25]] en la década de 1980, la destrucción de la [[sonda espacial]] [[Mariner 1]] en 1962,<ref>(en inglés) [https://archive.today/20130902010756/www.wired.com/software/coolapps/news/2005/11/69355?currentPage=1 ''History's Worst Software Bugs' ' Pág. 1.] ''[[Wired]]''. Consultado el 20 de marzo de 2014.</ref> del [[Ariane 5]] 501 en 1996,<ref>(en inglés) [https://archive.today/20120918003503/www.wired.com/software/coolapps/news/2005/11/69355?currentPage=2 ''History's Worst Software Bugs''. Pág. 2.] ''Wired''. Consultado el 20 de marzo de 2014. </ref> y el [[Airbus A400M]] en 2015.<ref>(en inglés) [http://www.defensenews.com/story/defense/2015/05/29/france-spain-aerospace-defence-accident-airbus/28142421/ ''Airbus Cites Assembly Problem in A400M Crash'']. Consultado el 22 de junio de 2015.</ref> También fueron famosos los incidentes de la red de AT&T en 1990, o los accidentes del [[Boeing 737 MAX]] en 2018 y 2019 que llevaron a la suspensión de sus vuelos durante meses por fallos en el software MCAS.<ref name="737Max">{{Cita web |url=https://www.theverge.com/2020/2/6/21126364/boeing-737-max-software-glitch-flaw-problem |título=Boeing finds another software problem on the 737 Max |fechaacceso=16 de mayo de 2020 |apellido=O'Kane |nombre=Sean |enlaceautor= |fecha=6 de febrero de 2020 |formato= |obra=The Verge |editor= |editorial= |ubicación= |idioma=en |cita= }}</ref> En 2002 un estudio encargado por el [[Instituto Nacional de Estándares y Tecnología]] del Departamento de Comercio de Estados Unidos concluyó que los errores informáticos costaban a la economía estadounidense 59 500 millones de USD al año, un 0.6% del PIB.<ref>{{cita web |url=http://www.nist.gov/public_affairs/releases/n02-10.htm |título=Software bugs cost US economy dear |date=10 de junio de 2009 |fechaacceso=16 de mayo de 2020 |archiveurl=https://web.archive.org/web/20090610052743/http://www.nist.gov/public_affairs/releases/n02-10.htm |archivedate=10 de junio de 2009}}</ref> == Orígenes del término == [[Archivo:First Computer Bug, 1947.jpg|thumb|Foto del origen de la leyenda acerca del primer ''bug'' informático conocido.]] El 9 de septiembre de 1947, la física y matemática [[Grace Murray Hopper]] y otros que trabajaban en la Universidad de Harvard en el [[Harvard Mark II|Mark II]] informaron de que el ordenador sufrió un fallo en el [[Relé|relé electromagnético]] #70 del panel F. Cuando se investigó ese relé, el equipo encontró una [[polilla]] (''bug'') electrificada que provocó que el relé quedase abierto. Hopper pegó el insecto con cinta adhesiva en la bitácora con el comentario:<ref> (en inglés) [https://web.archive.org/web/20050709234230/http://www.history.navy.mil/photos/pers-us/uspers-h/g-hoppr.htm «Rear Admiral Grace Murray Hopper, USNR, (1906-1992)»: imagen: Photo #: NH 96566-KN.] Naval History and Heritage Command. Consultado el 20 de marzo de 2014.</ref> {{cita|‘First actual case of bug being found.‘| col2=‘Primer caso real de «bug» encontrado.’}} Este incidente es erróneamente referido como el origen de la utilización del término inglés ''bug'' («bicho») para indicar un problema en un aparato o sistema.<ref>[http://www.catb.org/jargon/html/B/bug.html bug<!-- Título generado por un bot -->]</ref><ref>[http://www.microsiervos.com/archivo/leyendas-urbanas/polilla-volo-en-ordenador-y-origen-leyenda-bug.html La polilla que voló dentro de un ordenador y el origen de «bug informático» | Microsiervos (Leyendas Urbanas)<!-- Título generado por un bot -->]</ref> En realidad, el término ''bug'' ya formaba parte del idioma inglés, al menos desde que [[Thomas Alva Edison]] lo utilizó en sus notas en 1872, en una carta en 1878 para referirse a defectos mecánicos o eléctricos,<ref name="Edison">{{Cita web |url=https://spectrum.ieee.org/the-institute/ieee-history/did-you-know-edison-coined-the-term-bug |título=Did You Know? Edison Coined the Term “Bug” |fechaacceso=16 de mayo de 2020 |apellido=Magoun |nombre=Alexander B. |enlaceautor= |fecha=1 de agosto de 2013 |formato= |obra=IEEE Spectrum |editor= |editorial= |ubicación= |idioma=en |cita= }}</ref> y en 1889 refiriéndose a interferencias y mal funcionamiento en un fonógrafo.<ref>{{cita web |url = https://en.oxforddictionaries.com/explore/was-the-first-computer-bug-a-real-insect |título = Was the first computer ‘bug’ a real insect? |fechaacceso = 15 de julio de 2018 |sitioweb = [[Oxford Living Dictionaries]] |idioma = en-uk |cita = The term in fact originates not with computer pioneers, but with engineers of a much earlier generation. The first example cited in the 20-volume historical Oxford English Dictionary is from the Pall Mall Gazette of 11 March 1889: "Mr. Edison, I was informed, had been up the two previous nights discovering 'a bug' in his phonograph - an expression for solving a difficulty, and implying that some imaginary insect has secreted itself inside and is causing all the trouble." It seems clear from this that the original ‘bug’, though it was indeed an insect, was in fact imaginary. |formato = html |urlarchivo = https://web.archive.org/web/20170402120340/https://en.oxforddictionaries.com/explore/was-the-first-computer-bug-a-real-insect |fechaarchivo = 2 de abril de 2017 }}</ref> Es posible que Hopper lo haya asociado por primera vez a la informática, en este caso, relacionado con un insecto real. Por otra parte, aunque durante los años 50 del {{siglo|XX||s}}, Hopper también empleó en inglés el término ''debug'' al hablar de la [[depuración de errores]] en los códigos de programación. El primer uso registrado del término se encuentra en la ''Journal of the Royal Aeronautical Society'' de 1945: <ref name="Words">{{Cita web |url=http://www.worldwidewords.org/qa/qa-bug1.htm |título=Bug |fechaacceso=16 de mayo de 2020 |apellido= |nombre= |enlaceautor= |fecha= |formato= |obra=World Wide Words |editor= |editorial= |ubicación= |idioma=en |cita= }}</ref> {{cita|‘It ranged from the pre-design development of essential components, through the stage of type test and flight test and ‘debugging’ right through to later development of the engine.‘| col2=‘Iba desde el desarrollo previo del diseño de los componentes esenciales, pasando por la etapa de prueba, vuelo de prueba y «debugging» y terminando con el desarrollo del motor.’}} == Errores de programación comunes == * [[División por cero]] * [[Ciclo infinito]] * [[Problemas aritméticos]] como desbordamientos (''[[Desbordamiento aritmético|overflow]]'') o subdesbordamientos (''[[underflow]]''). * Exceder el tamaño del [[array]] definido * Utilizar una [[variable no inicializada]] * [[Error tipográfico|Errores tipográficos]] varios, por ejemplo confundir el dígito "0" con la vocal "O", confundir el dígito "1" con la letras "I" o "l", o escribir "," en lugar de "." como parte de nombres de variables en lenguajes donde no es necesario declarar las variables antes de usarlas. Por ejemplo, en Fortran IV los espacios no cuentan, por lo que cambiar una coma por un punto en un bucle <code>DO 100 I=1. 10</code> equivale a la asignación <code>DO100I = 1.10</code> que por ser una instrucción válida no la reporta el compilador. * Usar [[constante mágica|constantes mágicas]], es decir que en lugar de definir una variable o macro para definir un parámetro que puede cambiar, poner el valor en el código. Por ejemplo, declarar un arreglo <code>float X[10]</code> y usarla en bucles <code>for i=0 to 10</code> en varias partes del programa en lugar de definir una constante <code>XSize=10; float X[XSize];</code> y usar <code>for i=0 to XSize</code>, con lo que se evitan omisiones cuando se cambie la dimensión de X, ya que basta con con cambiar <code>XSize=20</code> en lugar de buscar en todo el código las constantes mágicas 10 para cambiarlas por 20. * Acceder a [[Memoria de ordenador|memoria]] no permitida ([[Violación de acceso]]) * [[Pérdida de memoria (informática)|Pérdida de memoria]] (''memory leak'') * Desbordamiento o subdesbordamiento de la [[pila (estructura de datos)]] (''Stack overflow'') * [[Desbordamiento de búfer]] (''buffer overflow'') * [[Bloqueo mutuo]] (''deadlock'') * [[Índice (base de datos)|Indizado]] inadecuado de tablas en bases de datos. * Corrupción de las bases de datos relacionales por no estar [[Normalización de bases de datos|normalizadas]]. * Desbordamiento de la pila de recursión, cuando se dejan demasiadas llamadas en espera. * Programar por [[ensayo y error]], en lugar de desarrollar los programas sistemáticamente. * No atender los [[mensaje de error|mensajes de advertencia]] al momento de compilar un programa. * Errores que resultan del uso indiscriminado de [[variable global|variables de alcance global]]. * Errores por no declarar el [[Tipo de dato|tipo]] de las [[variable (programación)|variables]]. * Errores que emergen porque el programador no toma en cuenta la [[Semántica de lenguajes de programación|semántica]] del [[lenguaje de programación]]. Por ejemplo, desconocer si el alcance es léxico o dinámico. * [[Error de sintaxis|Errores de sintaxis]], por ejemplo, no terminar una instrucción con un [[punto y coma]] ( ; ) en un lenguaje de programación que lo requiere. * No [[Comentario (informática)|documentar]] correctamente el programa, provoca el no entender qué hace, lo que acarrea errores por no tener claro lo que hace. * [[Condición de carrera]] (''race condition'') * Uso incorrecto de API. * Incompatibilidad de sistemas. == Defectos de instalación o programación == [[Archivo:Computer Screen with software error at Gate 11 (SCL).jpg|thumb|Pantalla de ordenador con error de software en la Puerta 11 del [[Aeropuerto Internacional Arturo Merino Benítez|Aeropuerto de Santiago-Pudahel]]]] * Eliminación o sustitución de [[Biblioteca (programación)|bibliotecas]] comunes a más de un programa o del sistema ([[DLL Hell]]). * Reiniciar arbitrariamente la sesión de un usuario para que la instalación tenga efecto. * Suponer que el usuario tiene una conexión permanente a [[internet]]. * Utilizar como fuente [[Enlace simbólico|enlaces simbólicos]] a ficheros que pueden cambiar de ubicación. == Códigos de errores de lenguajes de programación == La mayor parte de los lenguajes de programación presentan al menos dos tipos de errores que permiten a los programadores manejar las fallas de los programas de una manera eficiente y que no resulte agresiva con el usuario final. Dichos errores son de [[compilación]] y errores en [[tiempo de ejecución]]. Los errores de compilación normalmente inhiben que el código fuente derive en un programa [[ejecutable]], mientras que los errores en tiempo de ejecución son situaciones específicas en las que un evento externo al programa impide su ejecución. Regularmente un programador eficiente debe intentar imaginar como debe responder ante esos eventos de manera que sea el programa y no el usuario o el sistema operativo los que resuelvan el problema. Por ejemplo, un bloque de error no manejado podría hacer lo siguiente: Abre el archivo "miarchivo" para escritura comienza a escribir datos en mi archivo cierra el archivo Si "miarchivo" no existe (o el programa o el usuario no tienen privilegios suficientes para abrirlo), el sistema operativo regresará un error que el programa no atrapará y tendremos un mensaje como "El archivo "miarchivo" no puede ser abierto para escritura" y botones para reintentar, cancelar y abortar (en el sistema operativo Windows), que no tendrán otra acción que repetirse indefinidamente sin posibilidad de salir de ese ciclo como no sea dando por terminado violentamente el programa. Un código que permitiese atrapar el error en tiempo de ejecución sería: Abre el archivo "miarchivo" para escritura Si el sistema operativo lo permite comienza a escribir datos en "miarchivo" si no lo permitió informa al usuario de lo que sucede regresa al usuario a un punto donde no haya conflicto (el menú principal, por ejemplo) Continúa operando normalmente Los diferentes [[lenguaje de programación|lenguajes de programación]] permiten diferentes construcciones lógicas a los programadores para atrapar y resolver errores en tiempo de ejecución, como pueden ser las [[Instrucción (informática)|sentencias]] ''[[Aserción (informática)|assert]], try'' y ''on error'' en diferentes lenguajes de programación. == Defectos de diseño de programas == * Diseños con colores inapropiados para las personas que padecen [[daltonismo]] * Diseños que usan textos con tipografías de difícil lectura por su tamaño o diseño * Diseños que fuerzan el uso del [[Ratón (informática)|ratón]] sin dejar alternativas de teclado para personas con disfunciones motrices * Estimar que el equipo donde se instalará tiene determinadas características (como la resolución de la pantalla, la velocidad del procesador, la cantidad de memoria o conectividad a [[Internet]]) propias de un equipo de gama alta, en vez de diseñar el ''software'' para su ejecución en equipos normales == Implicaciones == El tipo y cantidad de daño producido por un error de software puede afectar los procesos de toma de decisión y la política sobre la calidad del software. En aplicaciones para el viaje espacial tripulado y para el automóvil los controles de calidad del software deben ser superiores. == Casos notables == === Y2K === [[Archivo:Y2K Logo.gif|miniaturadeimagen|123x123px|Y2K]] {{AP|Problema del año 2000}} El [[problema del año 2000]] (Y2K) pudo llegar a ser un colapso económico porque muchos programas interpretarían el año 2000 como si fuera el año 1900. Los trabajos de adaptación y corrección de programas evitaron problemas graves. === Knight Capital === Disrupción de la bolsa de Nueva York en 2012. El 1 de agosto de 2012 [[Knight Capital]] provocó una disrupción del mercado de bolsa que le llevó a perder en dos días el 75% de su capitalización bursátil. Knight Capital disponía del software SMARS que gestionaba de forma automatizada, a alta velocidad y de forma algorítmica las órdenes para ejecutar en el mercado. Dentro del código tenía la funcionalidad «Power Peg», que ya no usaba desde 2003. No se había borrado y estaba disponible si se la llamaba. El contador de las acciones vendidas en cada orden pasó a realizarla otra parte del código fuera de «Power Peg» desde 2005. Comenzando el 27 de julio de 2012 se inició la instalación del nuevo software SMARS por fases en los servidores durante varios días. El nuevo software contenía una etiqueta que en el antiguo activaba «Power Peg». Un técnico olvidó realizar una copia del nuevo código RLP a uno de los ocho servidores SMARS que gestionaban las órdenes de compra y venta de acciones automatizadas. El 1 de agosto de 2012 el servidor no actualizado al ejecutar el antiguo código «Power Peg» mandó millones de órdenes porque el contador de acciones ejecutadas en cada orden no se comunicaba a SMARS y entonces el proceso de compra no se paraba nunca. En un intento de solucionar el problema desinstalaron el nuevo código RLP de los siete servidores que funcionaban correctamente, lo que agravó el problema. En 45 minutos ejecutó 4 millones de operaciones en 154 valores moviendo 397 millones de acciones, cuando en su lugar debería haber ejecutado 212 órdenes de pequeña entidad. Knight Capital perdió 460 millones de USD y la [[Comisión de Bolsa y Valores|SEC]] le impuso una multa de 12 millones de USD por violar regulaciones de bolsa.<ref name="SEC">{{Cita web |url=https://www.sec.gov/litigation/admin/2013/34-70694.pdf |título=SECURITIES EXCHANGE ACT OF 1934 Release No. 70694 / October 16, 2013 |fechaacceso=16 de mayo de 2020 |apellido= |nombre= |enlaceautor= |fecha=16 de octubre de 2013 |formato= |obra=SEC |editor=SEC |editorial= |ubicación= |idioma=en |cita= }}</ref> === Boeing 737 MAX === {{AP|Boeing 737 MAX}} [[Archivo:WS YYC 737 MAX 1.jpg|thumb|right|Boeing 737 MAX 8]] Dos accidentes del avión Boeing 737 MAX en 2018 y 2019 llevaron a que el 13 de marzo de 2019 la [[Administración Federal de Aviación|FAA]] iniciara la [[Suspensión de vuelo del Boeing 737 MAX]] durante meses por fallos en el software MCAS (Sistema de Aumento de Características de Maniobra, en inglés, Manoeuvring Characteristics Augmentation System).<ref name="737Max"/> Fallecieron 346 personas en los accidentes. La FAA permitía a fabricantes como Boeing emitir certificados de vuelo para sus aviones. En noviembre de 2019 la FAA suspendió la capacidad de Boeing para emitir certificados para los aviones MAX. El MCAS en el MAX se diseñó para activarse usando la señal de uno de los dos sensores de ángulo de ataque del avión, haciéndolo susceptible al punto único de fallo ([[Single point of failure]]). Cuando MCAS detecta que el avión está en modo manual con los flaps arriba y con un ángulo de ataque elevado, ajusta el estabilizador horizontal para bajar el morro y que el piloto no suba demasiado rápido y produzca una caída en pérdida. Aunque el sistema MCAS podía causar picados no intencionados, no se mencionaba en los manuales de vuelo y entrenamiento, por lo que los pilotos lo desconocían.<ref name=Flight13mar2020>{{cita web |url= https://www.flightglobal.com/programmes/timeline-of-the-twists-and-turns-in-the-grounding-of-the-boeing-737-max/137202.article |título= Timeline of the twists and turns in the grounding of the Boeing 737 Max |autor= Graham Dunn |fecha= 13 de marzo de 2020 |obra= Flightglobal}}</ref> En marzo de 2019 quedaron en tierra 387 aviones MAX que realizaban 8600 vuelos semanales para 59 compañías aéreas. En enero de 2020 Boeing calculó que en 2019 perdió 18 400 millones de USD y le cancelaron 183 pedidos de MAX. En 2019 el precio de un Boeing 737 MAX iba de 100 a 135 millones de USD. === Therac-25 === {{AP|Therac-25}} [[Archivo:Therac 25 Input Screen.gif|thumb|Simulación de la pantalla de entrada de un Therac-25.]] [[Archivo:Therac 25 Malfunction 54 8 sec.gif|thumb|Simulación de la pantalla de entrada de un Therac-25 con el error 54.]] [[Archivo:Desbordamiento Octeto Byte Overflow.gif|thumb|Desbordamiento de una variable octeto (8 bits).]] La [[Therac-25]] fue una máquina de radioterapia producida por AECL, sucesora de los modelos Therac-6 y Therac-20 (las unidades anteriores fueron producidas en asociación con CGR). El aparato estuvo comprometido en al menos seis accidentes entre 1985 y 1987, en los que varios pacientes recibieron sobredosis de radiación. Tres de los pacientes murieron como consecuencia directa. Estos accidentes pusieron en duda la fiabilidad del control por software de sistemas de seguridad crítica, convirtiéndose en caso de estudio en la informática médica y en la ingeniería de software. La comisión investigadora concluyó que las causas primarias de los accidentes fueron malas prácticas de desarrollo, análisis de requerimientos y un mal diseño de software, y no por errores aislados en el código fuente. En particular, el programa de la Therac-25 fue diseñado de tal manera que era casi imposible encontrar y subsanar fallos automáticamente. El sistema no usaba un sistema operativo estándar. En su lugar operaba con un sistema operativo propio escrito en lenguaje ensamblador PDP-11 para funcionar en el ordenador 32K [[PDP-11]]/23.<ref name="Leveson"/> Cuando el sistema notificaba un error y detenía los rayos X, solamente mostraba el mensaje «MALFUNCTION» (error de funcionamiento) seguido de un número del 1 al 64. El manual de la máquina no explicaba el problema ni mostraba los códigos de error, y por lo tanto el operario acababa por cerrar la advertencia y proceder con el tratamiento. El personal de AECL y los operadores de las máquinas inicialmente no creyeron en las quejas de los pacientes por la alta confianza que tenían en la máquina. La ingeniería había reutilizado código de modelos más antiguos (Therac-6 y Therac-20), que sí que contaban con sistemas de seguridad mecánicos. El fallo solo ocurría cuando se introducía rápidamente una secuencia particular de teclas en la terminal [[VT100]], que controlaba la computadora [[PDP-11]] de la Therac-25. El operador había rellenado todas las casillas y estaba en la casilla de órdenes cuando se daba cuenta que había un error en la casilla del tipo de haz que contenía una X (Rayos X) cuando debía contener una E (haz de Electrones). Para corregirlo usaba el cursor {{key press |↑}} hasta subir a la casilla, escribir una E y bajar con el cursor {{key press |↓}} hasta la casilla de órdenes, escribir una B y pulsar {{key press |Enter}}. La secuencia completa era {{key press |↑}} {{key press |↑}} {{key press |↑}} {{key press |↑}} {{key press |↑}} {{key press |↑}} {{key press |↑}} {{key press |↑}} {{key press |↑}} {{key press |↑}} {{key press |E}} {{key press |↓}} {{key press |↓}} {{key press |↓}} {{key press |↓}} {{key press |↓}} {{key press |↓}} {{key press |↓}} {{key press |↓}} {{key press |↓}} {{key press |↓}} {{key press |B}} {{key press |Enter}}. Si esta secuencia se realizaba en menos de 8 segundos la máquina producía una radiación que podía llegar a ser hasta 1000 veces la que se pretendía aplicar. Esto ocurría muy raramente y se desconocía que existiera tal error de [[condición de carrera]] (''race condition'') en el que la salida o estado de un proceso es dependiente de una secuencia de eventos que se ejecutan en orden arbitrario y van a trabajar sobre un mismo recurso compartido. Se puede producir un error cuando dichos eventos no llegan (se ejecutan) en el orden que el programador esperaba. El programa cambiaba la variable bandera «Class3» incrementándola cada vez que ejecutaba la rutina de prueba de ajuste, en vez de asignarle un valor fijo. La variable «Class3» tenía 1 byte de longitud y sus valores posibles iban de 0 a 255. Cuando el valor era 255 y se sumaba 1, la variable «Class3» pasaba a valer 0. Cuando la variable «Class3» valía 0 indicaba que se podía lanzar el haz de electrones y no se comprobaba la posición del colimador.<ref name="Leveson"/> La rutina de prueba de ajuste se ejecutaba cientos de veces en cada sesión para un paciente. Una vez de cada 256 ejecuciones de la rutina, la variable «Class3» tenía el valor 0 (no intencionado), el colimador no se comprobaba y cualquier fallo en el colimador no se detectaba. La sobredosis se producía si el operador apretaba el botón {{key press |Set}} en el preciso momento en que la variable «Class3» pasaba de 255 a 0 (desbordamiento). Entonces el software aplicaba la máxima potencia de 25 MeV sin tener el objetivo en su sitio y sin escanear. AECL corrigió este problema asignando a la variable «Class3» un valor distinto de 0 cada vez que pasaba por la rutina de prueba de ajuste, en lugar de incrementarla.<ref name="Leveson">{{cita web |url=http://sunnyday.mit.edu/papers/therac.pdf |título=Medical Devices: The Therac-25 (PDF) |autor=Nancy Leveson |obra=Safeware:System Safety and Computers |editor=Addison-Wesley |fecha=1995 |fechaacceso=16 de mayo de 2020 |urlarchivo=https://web.archive.org/web/20080216083852/http://sunnyday.mit.edu/papers/therac.pdf |fechaarchivo=16 de febrero de 2008 }}</ref><ref> {{cita web |url=http://radonc.wdfiles.com/local--files/radiation-accident-therac25/Therac_UGuelph_TGall.pdf |título=Computerized Radiation Therapy (PDF) reported by TROY GALLAGHER |fechaacceso=12 de febrero de 2011 }} </ref> === OpenSSL === [[Archivo:Explicación simplificada de Heartbleed.png|thumb|Explicación simplificada del error «Heartbleed».]] Un usuario del paquete Debian OpenSSL notificó un aviso para su rectificación. En el proceso de arreglo de la incidencia un programador estropeó el generador de números aleatorios. El parche defectuoso se lanzó en septiembre de 2006 con la versión OpenSSL 0.9.8c-1. Hasta abril de 2008 no se descubrió el problema. Todas las claves criptográficas generadas con esa versión están comprometidas porque los números «aleatorios» son fácilmente predecibles, y los datos encriptados con ellas también son vulnerables. Esto supuso una amenaza en muchas aplicaciones que se apoyan en la encriptación como [[S/MIME]], [[Tor (red de anonimato) |Tor]], conexiones protegidas por [[Secure Sockets Layer |SSL]] o [[Transport Layer Security |TLS]] y [[Secure Shell |SSH]]. Se corrigió en la versión OpenSSL 0.9.8c-4etch3.<ref> {{cita web |url=http://www.debian.org/security/2008/dsa-1571 |título=DSA-1571-1 openssl -- predictable random number generator |fechaacceso=16 de mayo de 2020 }} </ref> [[Heartbleed]] ([[Idioma español|español]]: hemorragia de corazón) es un [[agujero de seguridad]] de ''software'' en la [[biblioteca (programación)|biblioteca]] de código abierto [[OpenSSL]], solo vulnerable en su versión 1.0.1f, que permite a un atacante leer la [[memoria (informática)|memoria]] de un servidor o un cliente, permitiéndole por ejemplo, conseguir las [[criptografía asimétrica|claves privadas]] SSL de un servidor.<ref name="ars1">{{cita web |url=http://arstechnica.com/security/2014/04/critical-crypto-bug-in-openssl-opens-two-thirds-of-the-web-to-eavesdropping/ |título=Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping |fechaacceso=24 de abril de 2014 |apellido=Goodin |nombre=Dan |fecha=7 de abril de 2014 |obra=ArsTechnica.com |idioma=inglés }}</ref> El código vulnerable fue adoptado y usado ampliamente con el lanzamiento de la versión 1.0.1 de OpenSSL el 14 de marzo de 2012. El soporte de Heartbeat estaba habilitado de forma predeterminada, causando que las versiones afectadas fueran vulnerables por defecto.<ref name="hb">{{cite web| last = Codenomicon Ltd| title = Heartbleed Bug| date = 8 de abril de 2014| url = http://heartbleed.com/}}</ref><ref>{{cite web| last = Goodin| first = Dan| title = Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping| work = Ars Technica| date = 8 de abril de 2014| url = http://arstechnica.com/security/2014/04/critical-crypto-bug-in-openssl-opens-two-thirds-of-the-web-to-eavesdropping/}}</ref><ref name="hbos">{{cite web | title = OpenSSL "Heartbleed" bug: what's at risk on the server and what is not | author = Hagai Bar-El | date = 9 de abril de 2014 | url = http://www.hbarel.com/openssl-heartbleed-bug | fechaacceso = 18 de mayo de 2020 | fechaarchivo = 13 de abril de 2014 | urlarchivo = https://web.archive.org/web/20140413140412/http://www.hbarel.com/openssl-heartbleed-bug | deadurl = yes }}</ref> La «RFC 6520 Heartbeat Extension» prueba los enlaces de comunicación segura TLS/DTLS al permitir que un ordenador en un extremo de una conexión envíe un mensaje de "solicitud de latido de corazón" ("Heartbeat Request"), que consiste en una [[carga útil (informática)|carga útil]], típicamente una cadena de texto, junto con la longitud de dicha carga útil como un entero de 16-bits. El equipo receptor debe entonces enviar la misma carga exacta de vuelta al remitente. Las versiones afectadas de OpenSSL asignan un búfer de memoria para el mensaje a devolver basado en el campo de longitud en el mensaje de solicitud, sin tener en cuenta el tamaño real de la carga útil de ese mensaje. Debido a esta falla de revisión de los límites apropiados, el mensaje devuelto consta de la carga útil, posiblemente seguido de cualquier otra cosa que sea que esté asignada en el ''buffer'' de memoria. La Agencia Tributaria de Canadá reportó el robo de números de la Seguridad Social que pertenecen a 900 contribuyentes, y declaró que fueron accedidos a través de la explotación del fallo durante un período de seis horas el 8 de abril de 2014.<ref>{{citation| title=Heartbleed bug: 900 SINs stolen from Revenue Canada|url=http://www.cbc.ca/news/business/heartbleed-bug-900-sins-stolen-from-revenue-canada-1.2609192|date=14 de abril de 2014|publisher=[[CBC News]]}}</ref> Cuando el ataque se descubrió, la agencia cerró su sitio web y amplió el plazo de presentación de los contribuyentes del 30 de abril al 5 de mayo.<ref>{{citation|title=Canada Revenue Agency pushes tax deadline to May 5 after Heartbleed bug|url=http://www.vancouversun.com/technology/Canada+Revenue+Agency+pushes+deadline+after+Heartbleed/9734773/story.html|publisher=[[Vancouver Sun]]|date=13 de abril de 2014|fechaacceso=9 de junio de 2014|urlarchivo=https://web.archive.org/web/20140616124751/http://www.vancouversun.com/technology/Canada+Revenue+Agency+pushes+deadline+after+Heartbleed/9734773/story.html#|fechaarchivo=16 de junio de 2014}}</ref> La primera versión corregida, 1.0.1g, fue lanzada el día 7 de abril de 2014. == En la cultura popular == * En la película "[[Brazil]]" (1985), un error en un apellido debido a una mosca caída en la cabecera de un [[teletipo]] provoca la detención errónea de un ciudadano inocente, con consecuencias fatales para este; una suerte de dramatización basada en el caso de la polilla en el ordenador [[Harvard Mark II|Mark II]] en 1947. * La novela de [[Ellen Ullman]] ''The Bug'' (2004) trata de la búsqueda de error de software por parte de una probadora de software y un programador. El bug es apodado «The Jester» por su tendencia a aparecer en los momentos más inoportunos y amenazando el destino de la compañía.<ref> {{cita libro |apellido=Ullman |nombre=Ellen |fecha=2004 |título=The Bug |editor=Pushkin Press, Limited |isbn=9781908968142}} </ref> * La película canadiense Control Alt Delete (2008) es una comedia que trata de un programador que a finales de 1999 trata de corregir errores para prevenir los problemas del error [[2YK]].<ref name="IMDB">{{Cita web |url=https://www.imdb.com/title/tt1031224/ |título=Control Alt Delete |fechaacceso= 17 de mayo de 2020|apellido= |nombre= |enlaceautor= |fecha= |formato= |obra=IMDB |editor= |editorial= |ubicación= |idioma=en |cita= }}</ref> == Véase también == {{Lista de columnas|2| * [[Anexo:Errores de software|Lista de errores de software]] * [[Last Error (informática)|Last Error]] * [[Agujero de seguridad]] * [[Bugtraq]] * [[Bugzilla]] * [[Hotfix]] * [[Depurador]] * [[Depuración de programas]] * [[Ingeniería de software]] * [[Exploit]] * [[Seguridad informática]] * [[Common Vulnerabilities and Exposures]] (CVE) * [[Packet Storm]] * [[Época (informática)]] * [[Heisenbug]]}} == Referencias == {{listaref|2}} == Enlaces externos == {{commonscat|Software bugs}} * [https://web.archive.org/web/20100514035150/http://cert.inteco.es/vulnSearch/Actualidad/Actualidad_Vulnerabilidades/buscador_vulnerabilidades/ Buscador de Vulnerabilidades por productos de INTECO-CERT] {{Control de autoridades}} [[Categoría:Errores de software]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Plantillas usadas en esta página:
Bug
(
editar
)
Plantilla:AP
(
editar
)
Plantilla:Cita
(
editar
)
Plantilla:Cita/styles.css
(
editar
)
Plantilla:Cita libro
(
editar
)
Plantilla:Cita web
(
editar
)
Plantilla:Citation
(
editar
)
Plantilla:Cite web
(
editar
)
Plantilla:Commonscat
(
editar
)
Plantilla:Control de autoridades
(
editar
)
Plantilla:Key press
(
editar
)
Plantilla:Lang-en
(
editar
)
Plantilla:Lista de columnas
(
editar
)
Plantilla:Listaref
(
editar
)
Plantilla:Obra citada
(
editar
)
Plantilla:Propiedad
(
editar
)
Plantilla:Redirige aquí
(
editar
)
Plantilla:Siglo
(
editar
)
Plantilla:Tecla
(
editar
)
Plantilla:Tecla/base
(
editar
)
Plantilla:Título sin coletilla
(
editar
)
Plantilla:Unicode
(
editar
)
Módulo:Arguments
(
editar
)
Módulo:Citas
(
editar
)
Módulo:Citas/Configuración
(
editar
)
Módulo:Citas/ValidaciónFechas
(
editar
)
Módulo:Citas/Whitelist
(
editar
)
Módulo:Control de autoridades
(
editar
)
Módulo:Date
(
editar
)
Módulo:Identificadores
(
editar
)
Módulo:Lang
(
editar
)
Módulo:Lang/ISO 639 synonyms
(
editar
)
Módulo:Lang/data
(
editar
)
Módulo:Lang/data/iana languages
(
editar
)
Módulo:Lang/data/iana languages translation
(
editar
)
Módulo:Lang/data/iana regions
(
editar
)
Módulo:Lang/data/iana scripts
(
editar
)
Módulo:Lang/data/iana suppressed scripts
(
editar
)
Módulo:Lang/data/iana variants
(
editar
)
Módulo:No globals
(
editar
)
Módulo:Redirección
(
editar
)
Módulo:String
(
editar
)
Módulo:Tablas
(
editar
)
Módulo:Unicode data
(
editar
)
Módulo:Wikidata
(
editar
)
Módulo:Wikidata/mensajes
(
editar
)
Módulo:Wikidata/modulosTipos
(
editar
)
Módulo:Yesno
(
editar
)
Buscar
Buscar
Edición de «
Error de software
»
Añadir idiomas
Añadir tema