A finales del año pasado, durante la limpieza en el centro de datos de la Universidad de Utah, se encontró una cinta magnética archivada con el código del sistema operativo UNIXv4, que fue desarrollado en 1973 para la computadora PDP-11/45 y se consideraba perdida. UNIXv4 continuó el desarrollo del sistema operativo UNIXv3, lanzado un año antes, que fue el primero en utilizar el lenguaje C y canales sin nombre. Una de las características de UNIXv4 fue la reescritura del núcleo de ensamblador a C. El código del núcleo de 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ó encontrar el equipo necesario y extraer el archivo almacenado en la cinta. Se utilizó la herramienta readtape para digitalizar la señal analógica grabada en la cinta, y se emplearon desarrollos realizados durante la restauración del archivo con la implementación del editor Emacs de James Gosling para decodificar el formato del archivo.
Además del código UNIXv4, en la cinta también se encontraron los textos fuente de uno de los primeros compiladores para el lenguaje C y un intérprete del lenguaje SNOBOL. Posteriormente, el código de UNIXv4 fue ordenado y publicado en GitHub en una forma adecuada para compilar y ejecutar en un simulador PDP-11. El código de UNIXv4 incluye 61 mil líneas, de las cuales 27 mil están en lenguaje C, 33 mil en ensamblador para PDP-11 y alrededor de mil son archivos de encabezado.

Uno de los investigadores de seguridad se dio cuenta de la utilidad «su», que se incluía 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 llevaba a un desbordamiento de búfer debido a la copia de la contraseña introducida por el usuario en un arreglo fijo de 100 caracteres sin verificar el tamaño de los datos ingresados.
Douglas McIlroy, de 93 años, quien formó parte del equipo original de desarrolladores de Unix en Bell Labs y propuso la idea de los canales anónimos y creó utilidades como echo, spell, diff, sort, join y tr, comentó sobre el problema detectado. Según Douglas, antes de la llegada del gusano Morris en 1988, muy pocas personas prestaban atención a los desbordamientos de búfer. Añadir verificaciones para el tamaño de los datos introducidos manualmente se consideraba como una adición innecesaria de código, y la finalización abrupta debido al desbordamiento se veía como una forma torpe de manejar datos de entrada incorrectos. Con el tiempo, los desbordamientos causados por el procesamiento de cadenas generadas automáticamente comenzaron a corregirse, pero para la entrada manual la lógica era del tipo '¿quién podría necesitar introducir cadenas demasiado largas manualmente?'
Fuente: opennet.ru
