A finales del año pasado, durante una limpieza en el centro de datos de la Universidad de Utah, se descubrió una cinta magnética archivada con código para el sistema operativo UNIXv4. El sistema se desarrolló en 1973 para la PDP-11/45 y se creía perdido. UNIXv4 continuó el desarrollo de UNIXv3, lanzado un año antes, pionero en el uso del lenguaje C y las tuberías sin nombre. Una característica distintiva de UNIXv4 fue la reescritura del núcleo del lenguaje ensamblador a C. El código del núcleo UNIXv4 fue escrito por Ken Thompson y los controladores por Dennis Ritchie.
A finales de diciembre de 2025, el personal del Museo de Historia de la Computación logró localizar el equipo necesario y recuperar el archivo almacenado en cinta. Se utilizó el kit de herramientas ReadTape para digitalizar la señal analógica grabada en cinta, y los avances desarrollados durante el proceso de recuperación del archivo con la implementación del editor Emacs de James Gosling se emplearon para decodificar el formato del archivo.
Además del código UNIXv4, la cinta también contenía el código fuente de uno de los primeros compiladores de C y del intérprete de lenguaje SNOBOL. El código UNIXv4 se limpió posteriormente y se publicó en GitHub para su compilación y ejecución en un simulador PDP-11. El código UNIXv4 consta de 61 000 líneas, de las cuales 27 000 están en C, 33 000 en ensamblador PDP-11 y unas 1000 son archivos de cabecera.

Un investigador de seguridad detectó la utilidad "su", incluida en UNIXv4. Esta utilidad constaba de menos de 50 líneas de código, se instalaba con el indicador setuid-root y permitía ejecutar /bin/sh con privilegios de root al introducir la contraseña correcta. El código contenía una vulnerabilidad que provocaba un desbordamiento de búfer al copiar la contraseña introducida por el usuario en una matriz fija de 100 caracteres sin validar la longitud de la entrada.
El problema fue comentado por Douglas McIlroy, de 93 años, miembro del equipo original de desarrollo de Unix en Bell Labs, quien propuso el concepto de tuberías sin nombre y creó utilidades como echo, spell, diff, sort, join y tr. Según McIlroy, antes de la aparición del gusano Morris en 1988, poca gente prestaba atención a los desbordamientos de búfer. Añadir comprobaciones de tamaño a los datos introducidos manualmente se consideraba código innecesario, y los fallos por desbordamiento se percibían como una forma torpe de gestionar entradas no válidas. Con el tiempo, se solucionaron los desbordamientos que se producían al procesar cadenas generadas automáticamente, pero para la entrada manual, la lógica se basaba en la pregunta "¿quién querría introducir manualmente cadenas muy largas?".
Fuente: opennet.ru
