Ende letzten Jahres wurde während einer Reinigung im Rechenzentrum der Universität Utah ein archiviertes Magnetband mit dem Betriebssystemcode UNIXv4 entdeckt, das 1973 für den PDP-11/45 Rechner entwickelt wurde und als verloren galt. UNIXv4 setzte die Entwicklung des ein Jahr zuvor veröffentlichten Betriebssystems UNIXv3 fort, in dem erstmals die Programmiersprache C und unbenannte Pipes verwendet wurden. Eine Besonderheit von UNIXv4 war die Neuschreibung des Kernels von Assembler in die Sprache C. Der Kernelcode von UNIXv4 wurde von Ken Thompson und die Treiber von Dennis Ritchie geschrieben.
Ende Dezember 2025 gelang es den Mitarbeitern des Museums für Computertechnik, die benötigte Hardware zu finden und das auf dem Band gespeicherte Archiv zu extrahieren. Zum Digitalisieren des analogen Signals, das auf dem Band aufgenommen wurde, wurde das Werkzeug readtape verwendet, während zur Dekodierung des Archivformats Entwicklungen eingesetzt wurden, die im Rahmen der Wiederherstellung des Archivs unter Verwendung des Emacs-Editors von James Gosling erstellt wurden.
Neben dem UNIXv4-Code auf dem Band wurden auch die Quelltexte eines der ersten Compiler für die Programmiersprache C und des SNOBOL-Interpreters gefunden. Später wurde der UNIXv4-Code überarbeitet und auf GitHub veröffentlicht, in einer Form, die für den Aufbau und den Betrieb im PDP-11-Simulator geeignet ist. Der UNIXv4-Code umfasst 61.000 Zeilen, davon 27.000 in C, 33.000 in PDP-11-Assembler und etwa 1.000 Header-Dateien.

Ein Sicherheitsforscher bemerkte das "su"-Dienstprogramm, das mit UNIXv4 geliefert wurde. Dieses Dienstprogramm bestand aus weniger als 50 Zeilen Code, wurde mit dem setuid-root-Flag installiert und ermöglichte es, /bin/sh mit Root-Rechten zu starten, wenn das richtige Passwort eingegeben wurde. Der Code beinhaltete eine Schwachstelle, die zu einem Buffer Overflow führte, da das eingegebene Passwort ohne Größenüberprüfung in ein festes 100-Zeichen-Array kopiert wurde.
Der 93-jährige Douglas McIlroy, ein Mitglied des ursprünglichen Unix-Entwicklungsteams bei Bell Labs, kommentierte das identifizierte Problem und schlug die Idee der anonymen Pipes vor. Er entwickelte auch nützliche Werkzeuge wie echo, spell, diff, sort, join und tr. Laut Douglas kümmerten sich bis zum Auftreten des Morris-Wurms im Jahr 1988 nur wenige um Bufferüberläufe. Das Hinzufügen von Prüfungen für manuell eingegebene Daten galt als überflüssiger Code, während ein Absturz bei einem Überlauf als unbeholfene Reaktion auf ungültige Eingaben angesehen wurde. Im Laufe der Zeit wurden die Überläufe, die bei der Verarbeitung automatisch generierter Zeichenfolgen auftraten, behoben, aber für manuelle Eingaben war die Logik: 'Wer könnte schon zu lange Zeichenfolgen manuell eingeben?'
Quelle: opennet.ru
